Mocking It.Is <> дважды запускает проверку сравнения, когда параметры не совпадают - PullRequest
1 голос
/ 13 июня 2019

Я экспериментировал с созданием упаковщиков модульных тестов и расширений для сравнения, но столкнулся с проблемой.

Я создал метод расширения, который проверяет правильность значения, передаваемого в макет (он сравнивает сложные объекты, чтобы убедиться, что все свойства совпадают.)
Когда он возвращает true, все в порядке.
Когда он возвращает false (ввод был неверным), он оценивается дважды.

Это ожидаемое поведение? Я ничего не видел в документах о том, почему это будет сделано.

Простейший пример, который я мог бы воспроизвести:

public interface ISomeTest
{
    bool RunTest(int i);
}

public static class MyExtensions
{
    public static int count = 0;
    public static bool CheckInputCorrect(this int o, int valueToCompareAgainst)
    {
        count++;
        if (valueToCompareAgainst == o)
            return true;
        return false;
    }
}

[TestFixture]
public class SomeTests
{
    [Test]
    public void TestWithMoq()
    {
        Mock<ISomeTest> mock = new Mock<ISomeTest>();
        mock.Setup(c => c.RunTest(It.Is<int>(p => p.CheckInputCorrect(2)))).Returns(true).Verifiable();

        ISomeTest someTest = mock.Object;

        someTest.RunTest(1);

        //fails
        Assert.AreEqual(1, MyExtensions.count);
    }
}

есть идеи почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...