Как проверить, что метод НЕ был вызван в Moq?
Есть ли что-то вроде AssertWasNotCalled?
UPDATE: начиная с версии 3.0 можно использовать новый синтаксис:
mock.Verify(foo => foo.Execute("ping"), Times.Never());
Как проверить, что метод НЕ был вызван в Moq?
Есть ли что-то вроде AssertWasNotCalled?
UPDATE: начиная с версии 3.0 можно использовать новый синтаксис:
mock.Verify(foo => foo.Execute("ping"), Times.Never());
ОБНОВЛЕНИЕ. Начиная с версии 3, проверьте обновление до вопроса выше или ответ Данна ниже.
Либо сделайте свой макет строгим, чтобы он не сработал, если вы вызываете метод, для которого вы не ожидаете
new Mock<IMoq>(MockBehavior.Strict)
Или, если вы хотите, чтобы ваш макет был свободным, используйте .Throws(Exception)
var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn't be called."));
Запустите проверку после теста, который имеет набор Times.Never
enum. например.
_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());
Украден из: Джон Фостер отвечает на вопрос: "Нужна помощь, чтобы лучше понять Moq"
Одна из вещей, которые вы можете протестировать, заключается в том, что метод оплаты не вызывается, когда лицо в возрасте старше 65 лет переходит в Метод
[Test] public void Someone_over_65_does_not_pay_a_pension_contribution() { Mock<IPensionService> mockPensionService = new Mock<IPensionService>(); Person p = new Person("test", 66); PensionCalculator calc = new PensionCalculator(mockPensionService.Object); calc.PayPensionContribution(p); mockPensionService.Verify(ps => ps.Pay(It.IsAny<decimal>()), Times.Never()); }
Это не работает в последних версиях Moq (начиная с по крайней мере 3.1), оно должно быть указано в методе
Verify
, как указано в Ответ.
На самом деле лучше указать .AtMost(0)
после оператора Returns.
var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);
Хотя "броски" также работают, AtMost(0)
более выразительно ИМХО.
Используйте .AtMostOnce();
После реального теста снова вызовите метод. Если он выдает исключение, он вызывается.