Moq: как утверждать, что методы на моем фиктивном объекте НЕ запускаются? - PullRequest
6 голосов
/ 29 января 2009

У меня есть макеты, работающие, когда я проверяю, что методы для моего смоделированного объекта вызываются с правильными параметрами и возвращают правильный результат.

Теперь я хочу проверить другое условие. В этом случае никакие методы не должны запускаться на объекте. Как я могу выразить это в модульном тесте?

Ответы [ 2 ]

16 голосов
/ 29 января 2009

Вы можете создать свой макет как строгий. Таким образом, разрешено запускать только те методы, которые вы установили (или ожидаете, в зависимости от того, с какой версией Moq вы играете).

var foo = new Mock<IFoo>(MockBehavior.Strict);
foo.Expect(f => f.Bar());

Каждый раз, когда вызывается метод для foo, кроме Bar (), возникает исключение, и ваш тест не пройден.

3 голосов
/ 29 января 2009

Два самых простых способа - использовать MockBehaviour.Strict:

var moqFoo = new Mock<IFoo>(MockBehaviour.Strict);  
//any calls to methods that there aren't expectations set for will cause exceptions

или вы всегда можете использовать обратный вызов и вызвать исключение (если есть определенный метод, который не должен вызываться.

var moqFoo = new Mock<IFoo>(MockBehaviour.Loose);  
moqFoo.Expect(f => f.Bar()).Callback(throw new ThisShouldNotBeCalledException());
...