c# - agility - Come verificare che il metodo NON sia stato chiamato in Moq?



.net (4)

Come posso verificare che il metodo NON sia stato chiamato in Moq ?

Ha qualcosa come AssertWasNotCalled?

AGGIORNAMENTO: a partire dalla versione 3.0, è possibile utilizzare una nuova sintassi:

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

https://src-bin.com


Answer #1

Questo non funziona nelle versioni recenti di Moq (almeno da 3.1), dovrebbe essere specificato nel metodo Verify come menzionato nella risposta.

In realtà, è meglio specificare .AtMost(0) dopo l'istruzione Returns.

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

Sebbene anche i "tiri" AtMost(0) , AtMost(0) è un IMHO più espressivo.


Answer #2

Esegui una verifica dopo il test che ha un Times.Never . per esempio

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

Answer #3

Usa .AtMostOnce ();

Dopo il test reale, chiama di nuovo il metodo. Se lancia un'eccezione, è stato chiamato.


Answer #4

AGGIORNAMENTO : Dalla versione 3, controlla l'aggiornamento alla domanda sopra o la risposta di Dann sotto.

O, rendi il tuo mock severo in modo che fallisca se chiami un metodo per il quale non ti aspetti

new Mock<IMoq>(MockBehavior.Strict)

Oppure, se vuoi che il tuo finto sia libero, usa i .Throws (Exception)

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




moq