Как проверить, что метод не был вызван в Moq? - PullRequest
421 голосов
/ 11 февраля 2009

Как проверить, что метод НЕ был вызван в Moq ?

Есть ли что-то вроде AssertWasNotCalled?

ОБНОВЛЕНИЕ: Начиная с версии 3.0, можно использовать новый синтаксис:

mock.Verify(foo => foo.Execute("ping"), Times.Never());

Ответы [ 5 ]

484 голосов
/ 05 августа 2010

Запустите проверку после теста, для которого установлено перечисление Times.Never. например,

_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());
144 голосов
/ 11 февраля 2009

ОБНОВЛЕНИЕ : начиная с версии 3, проверьте обновление на вопрос выше или ответ Данна ниже.

Либо сделайте свой макет строгим, чтобы он потерпел неудачу, если вы вызовете метод, для которого у вас нет ожидания

new Mock<IMoq>(MockBehavior.Strict)

Или, если вы хотите, чтобы ваш макет был свободным, используйте .Throws (Исключение)

var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn't be called."));
39 голосов
/ 16 марта 2010

Украдено у: Ответ Джона Фостера на вопрос: «Нужна помощь, чтобы лучше понять Мок»

Одна из вещей, которую вы можете проверить, это то, что метод оплаты не звонят, когда лицо старше 65 лет попадает в Метод

[Test]
public void Someone_over_65_does_not_pay_a_pension_contribution() {

    var mockPensionService = new Mock<IPensionService>();

    var person = new Person("test", 66);

    var calc = new PensionCalculator(mockPensionService.Object);

    calc.PayPensionContribution(person);

    mockPensionService.Verify(ps => ps.Pay(It.IsAny<decimal>()), Times.Never());
}
9 голосов
/ 19 февраля 2009

Это не работает в последних версиях Moq (начиная с версии 3.1), его следует указывать в методе Verify, как указано в ответить.

На самом деле, лучше указать .AtMost(0) после оператора Returns.

var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);

Хотя «броски» также работают, AtMost(0) более выразительно ИМХО.

0 голосов
/ 11 февраля 2009

Использовать .AtMostOnce ();

После реального теста снова вызовите метод. Если выдается исключение, оно вызывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...