Используя Rhinomocks, как я могу проверить, что Насмешку/тупик никогда не называли вообще? Значение никаких методов назвали на насмешке/тупике?
Я знаю о методе AssertWasNotCalled, но этот метод требует, чтобы я упомянул имя метода. (Возможно, у меня есть класс с 10 различными методами, которые можно было назвать).
Log.AssertWasNotCalled(x => x.LogAndReportException(null, null), x => x.IgnoreArguments());
Вы можете использовать Strict mock, так как эта функция может исчезнуть в будущем:
var mocks = new MockRepository();
var cm = mocks.StrictMock<ICallMonitor>();
cm.Replay();
cm.HangUp(); // this will cause VerifyAllExpectations to throw
cm.VerifyAllExpectations();
В этом синтаксисе Strick Mock разрешает только явно определенные вызовы.
Когда вы используете насмешки, вы не должны утверждать, что каждый звонок был сделан или нет. Это приводит ваши тесты к определенной реализации и делает их хрупкими и кошмаром рефакторинга.
Если бы я когда-нибудь столкнулся с такой ситуацией, я бы переосмыслил, почему я хотел утверждать, что зависимость никогда не использовалась.
Очевидно, что если зависимость нигде не используется, просто удалите ее. Если она нужна для некоторых операций, но все операции в зависимости являются деструктивными операциями, и вы хотите убедиться, что какая-то операция не причинит им вреда, вы должны явно утверждать, что деструктивные операции не вызывались, и позволить реализации делать с недеструктивными операциями всё, что она захочет (если таковые есть). Это делает ваши тесты более явными и менее хрупкими
. Вы можете использовать метод StrictMock
для создания строгого макета - это не удастся, если будет использован какой-либо неизведанный вызов метода. Согласно сайту Айенде , это не рекомендуется, но похоже, что это именно тот сценарий, в котором это было бы полезно.