Wie kann ich überprüfen, dass die Methode NICHT in Moq ?
Verfügt es über etwas wie AssertWasNotCalled?
UPDATE: Ab der Version 3.0 kann eine neue Syntax verwendet werden:
mock.Verify(foo => foo.Execute("ping"), Times.Never());
Wie kann ich überprüfen, dass die Methode NICHT in Moq ?
Verfügt es über etwas wie AssertWasNotCalled?
UPDATE: Ab der Version 3.0 kann eine neue Syntax verwendet werden:
mock.Verify(foo => foo.Execute("ping"), Times.Never());
UPDATE : Seit Version 3, siehe die Aktualisierung der Frage oben oder Dann's Antwort unten.
Entweder, machen Sie Ihre mock streng, so dass es fehlschlägt, wenn Sie eine Methode aufrufen, für die Sie nicht eine erwarten
new Mock<IMoq>(MockBehavior.Strict)
Oder, wenn Sie wollen, dass Ihr Mock locker ist, verwenden Sie die .Throws( Exception )
var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn't be called."));
Gestohlen von: John Fosters Antwort auf die Frage "Brauche Hilfe, um Moq besser zu verstehen"
Sie sollten unter anderem testen, ob die Zahlungsmethode nicht aufgerufen wird, wenn eine Person über 65 Jahren in die Methode
[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); }
Dies funktioniert in neueren Versionen von Moq nicht mehr (mindestens seit 3.1), sollte sie in der Datei
Verify
Methode, wie sie in der Antwort.
Eigentlich ist es besser, Folgendes anzugeben .AtMost(0)
nach der Anweisung Returns.
var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);
Obwohl die "Würfe" auch funktionieren, AtMost(0)
ist IMHO ausdrucksstärker.
VerifyNoOtherCalls
(erfordert Moq 4.8 oder höher)Diese Antwort ist ein indirekter Ansatz. Anstatt zu prüfen, dass eine bestimmte Methode nicht aufgerufen wurde, prüfen Sie, dass keine unerwarteten Aufrufe im Allgemeinen gemacht wurden.
Bedenken Sie, dass ein gründlicher Test einer Attrappe 2 Dinge bewirkt:
Wenn Sie Schritt 1 bereits ausführen, ist Schritt 2 trivial:
// Step 1 (if relevant - see note below)
mock.Verify(..., Times.Exactly(2));
mock.Verify(..., Times.Once());
// ...
// Step 2
mock.VerifyNoOtherCalls();
Anmerkungen
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Ab v4.8 gibt es eine alternativer Ansatz das ist auch eine Überlegung wert.