Я пишу юнит-тесты (используя NUnit & Moq) для моих контроллеров MVC 2 и следую примерам в книге Pro ASP.net MVC 2 Framework Стивена Сандерсона (отличная книга, кстати). Однако я столкнулся с проблемами, которые, по-моему, связаны только с моим непониманием NUnit.
Вот выдержка с удаленными несоответствующими частями:
[Test]
public void Cannot_Save_Invalid_Event()
{
...
repository.Setup(x => x.SaveEvent(evt)).Callback(Assert.Fail);
...
repository.Verify(x => x.SaveEvent(evt));
}
Этот тест проходит для меня, хотя, насколько я понимаю, эти два утверждения должны прямо противоречить друг другу. Первоначально второго там не было, но я вставил его, чтобы убедиться, что он проходил по правильным причинам.
Насколько я понимаю, мой репозиторий настроен как сбой, если вызывается "repository.SaveEvent (evt)". Однако позже в тесте я пытаюсь убедиться, что был вызван «repository.SaveEvent (evt)». Раз это проходит, не значит ли это, что он был как вызван, так и не вызван? Возможно, эти заявления не действуют так, как я подозреваю.
Может ли кто-нибудь объяснить, почему эти два утверждения не являются противоположностями, и как они могут существовать и пройти тест?