webentwicklung-frage-antwort-db.com.de

Was ist der Zweck von Verifiable () in Moq?

Was ist der Zweck von Verifiable()?

Wenn ich ein Mock überprüfe und dieses weglasse, überprüft es immer noch das SetUp.

Edit: Ich habe VerifyAll() verwendet, daher wurde alles überprüft. Nach dem Wechsel zu Verify() wurden nur meine .Verifiable()SetUps geprüft.

113
Castrohenge

ADDENDUM: Wie in der anderen Antwort angegeben, besteht der Zweck von .Verifiable Darin, ein Setup in eine Reihe von "verzögerten Verify(...) - Aufrufen" einzutragen, die dann über mock.Verify().

Die Klarstellung des OP macht deutlich, dass dies das Ziel war und das einzige Problem darin bestand, herauszufinden, warum es nicht funktionierte, aber als @Liam drängte, sollte die Antwort auch dies wirklich berühren: Die wichtigsten Anwendungsfälle sind meines Erachtens:

  • beibehaltung der Trockenheit zwischen mock.Setup() und mock.Verify
  • zulassen, dass die Konfiguration einer Überprüfung vom eigentlichen Verify -Aufruf selbst getrennt wird (z. B. könnten Sie ihn in einer anderen Hilfsmethode einrichten)

... und zurück zu meiner Antwort, die kurz und bündig lautet: "Seien Sie vorsichtig, da die oben genannten Vorteile gemeinhin durch die Auswirkung aufgewogen werden, die das Erreichen dieser Ziele auf die Lesbarkeit und Wartbarkeit von Tests hat, die sich zu sehr auf solche Konstrukte stützen."

ORIGINAL: Beachte, dass man, wo möglich, stattdessen dem [~ # ~] aaa [~ # ~] Layout folgen sollte und daher explizit mock.Verify( expression ) machen sollte Anrufe, nachdem die Arbeit erledigt wurde, statt eines mock.Setup( ... ).Verifiable() gepaart mit einem mock.Verify() oder mock.VerifyAll() wo immer möglich (credit: @ kzu ).

77
Ruben Bartelink

Wenn die Methode Verify() am Ende des Tests aufgerufen wird und eine der als überprüfbar markierten Erwartungen nicht aufgerufen wurde, ist eine Ausnahme thrown.

VerifyAll() prüft nicht auf überprüfbare Erwartungen.

46
Suvesh Pratapa