Я экспериментировал с созданием упаковщиков модульных тестов и расширений для сравнения, но столкнулся с проблемой.
Я создал метод расширения, который проверяет правильность значения, передаваемого в макет (он сравнивает сложные объекты, чтобы убедиться, что все свойства совпадают.)
Когда он возвращает 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);
}
}
есть идеи почему?