webentwicklung-frage-antwort-db.com.de

Wie überprüfe ich, ob diese Methode in Moq NICHT aufgerufen wurde?

Wie überprüfe ich, ob die Methode NICHT in Moq aufgerufen wurde?

Hat es so etwas wie AssertWasNotCalled?

UPDATE: Ab Version 3.0 kann eine neue Syntax verwendet werden:

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

UPDATE : Überprüfen Sie seit Version 3 das Update auf die obige Frage oder Danns Antwort unten.

Machen Sie entweder Ihren Mock streng, damit er fehlschlägt, wenn Sie eine Methode aufrufen, für die Sie keine Erwartung haben

new Mock<IMoq>(MockBehavior.Strict)

Oder, wenn Sie möchten, dass Ihr Mock locker ist, verwenden Sie die .Throws (Ausnahme)

var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn't be called."));
145
Dan Fish

Führen Sie nach dem Test eine Überprüfung durch, für die eine Times.Never - Aufzählung festgelegt ist. z.B.

_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());
492
Dann

Gestohlen von: John Fosters Antwort auf die Frage "Brauche Hilfe, um Moq besser zu verstehen"

Eines der Dinge, die Sie möglicherweise testen möchten, ist, dass die Bezahlmethode nicht aufgerufen wird, wenn eine Person über 65 in die Methode übernommen wird

[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());
}
40
Chris Marisic

Dies funktioniert in neueren Versionen von Moq nicht (seit mindestens 3.1), sollte es in der Verify -Methode angegeben werden, wie in der Antwort erwähnt.

Eigentlich ist es besser, .AtMost(0) nach der Returns-Anweisung anzugeben.

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

Obwohl die "Würfe" auch funktionieren, ist AtMost(0) meiner Meinung nach ausdrucksvoller.

9
miha