Настройка как таковая:
public interface IFoo
{
void Fizz();
}
[Test]
public void A()
{
var foo = new Mock<IFoo>(MockBehavior.Loose);
foo.Object.Fizz();
foo.Verify(x => x.Fizz());
// stuff here
foo.Verify(x => x.Fizz(), Times.Never()); // currently this fails
}
В принципе, я хотел бы ввести код в // stuff here
, чтобы сделать проход foo.Verify(x => x.Fizz(), Times.Never())
.
И поскольку это, вероятно, представляет собой мокси/модульное тестирование, мое оправдание заключается в том, что я могу сделать что-то вроде этого:
[Test]
public void Justification()
{
var foo = new Mock<IFoo>(MockBehavior.Loose);
foo.Setup(x => x.Fizz());
var objectUnderTest = new ObjectUnderTest(foo.Object);
objectUnderTest.DoStuffToPushIntoState1(); // this is various lines of code and setup
foo.Verify(x => x.Fizz());
// reset the verification here
objectUnderTest.DoStuffToPushIntoState2(); // more lines of code
foo.Verify(x => x.Fizz(), Times.Never());
}
В принципе, у меня есть объект состояния, где справедливая часть работы (как с точки зрения создания различных макетных объектов, так и с другими faffing around) требует, чтобы она входила в State1. Затем я хочу проверить переход из State1 в State2. Вместо дублирования или абстрагирования кода я бы предпочел просто повторно использовать тест State1, перетащить его в State2 и выполнить мои Asserts - все, что я могу сделать, кроме проверочных вызовов.