559 Stimmen

Wie kann man überprüfen, dass die Methode NICHT in Moq aufgerufen wurde?

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());

0 Stimmen

Ab v4.8 gibt es eine alternativer Ansatz das ist auch eine Überlegung wert.

2voto

Neil Punkte 9755

Ich weiß, dass dies eine sehr alte Frage ist, aber sie erschien gerade in meiner Seitenleiste, und ich möchte meine Lösung hinzufügen.

Viele Unit-Tests scheinen mehrere Funktionen als Teil des Setups nachzubilden, werden dann aber während des Tests nicht verwendet.

Sicherlich ist es besser, striktes Mocking zu aktivieren (was bedeutet, dass alles, was nicht explizit eingerichtet ist, eine Ausnahme auslöst), und dann keine Funktionen einzurichten, von denen man nicht erwartet, dass sie aufgerufen werden. Oder anders ausgedrückt: Richten Sie nur die Funktionen ein, von denen ein Test erwartet, dass sie aufgerufen werden, und alles andere wird eine Ausnahme auslösen.

var thingBeingTested = new Mock<IThink>(MockBehaviour.Strict);

thingBeingTested.ThisWillThrowAnExceptionBecauseItHasNotBeenMocked();

0voto

Zia Qammar Punkte 146

Angenommen, Sie haben diese Methode und möchten prüfen, ob sie nicht aufgerufen wird

//Setup    
var databaseSessionMock = new Mock<IDatabaseSession>();
databaseSessionMock.Setup(m => m.Commit()).Returns(true).Verifiable();
RepositoryFactory.Configure<IDatabaseSession>(databaseSessionMock.Object);

können Sie wie folgt testen

databaseSessionMock.Verify(m => m.Commit(It.IsAny()), Times.Never(), "Database Session mock object was not used");

-6voto

Aaron Digulla Punkte 308693

Verwenden Sie .AtMostOnce();

Nach dem eigentlichen Test rufen Sie die Methode erneut auf. Wenn sie eine Ausnahme auslöst, wurde sie aufgerufen.

CodeJaeger.com

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.

Powered by:

X