TDD Arrange Act Assert-Muster bei Verwendung von Mocks, um Abhängigkeitsaufrufe zu verifizieren

8

Ich verwende Moq , um das Verhalten einiger void-Methoden zu testen. Mit MockBehaviour.Strict muss jeder Aufruf des Mocks während Arrange step angegeben werden. Dies führt dazu, dass viele Tests keinen Assert (oder Verify) -Schritt haben. Die Pass-Bedingung ist einfach, dass der Test ohne Ausnahme ausgeführt wurde. Fehle ich etwas? Ist das Arrange, Act, Assert -Muster bei strikten Mocks ungeeignet? Gibt es einen semantischeren Weg, diese Tests zu gestalten?

Ein triviales Beispiel ...

%Vor%     
fearofawhackplanet 22.12.2011, 16:26
quelle

1 Antwort

22

Ihr Spott tritt an die Stelle eines Mitarbeiters. Es ist ideal, eines von zwei Dingen zu tun:

  • Bereitstellung von Informationen oder Daten
  • Eine Arbeit machen

Wenn der Mock Informationen oder Daten bereitstellt, genügt es, dass dies ein Stub ist. Sie können den Rückgabewert des Mocks auf die erforderlichen Informationen einstellen. Dies sollte Teil von Arrangieren sein.

Wenn der Schein einen Job macht, kann die Delegation verifiziert werden . Deshalb haben Sie bestätigen .

Was Sie mit der strengen Interaktion machen, ist sicherzustellen, dass jede einzelne Interaktion erwartet wird, im Grunde gesagt: "Hier ist, was ich erwarte, und wenn etwas anderes passiert, ist es falsch." Dies ist eine andere Art von Tests zu Act, Arrange, Assert, die besagt, "In diesem Kontext, wenn ich das Zeug mache, dann sollte ich dieses Ergebnis bekommen."

Mit einem "netten" Schein müssen Sie sich nur um die Interaktionen kümmern, die Sie interessieren. Wenn ich zum Beispiel ein Controller bin und Informationen in einem Repository nachschaue, validiere ich sie mit ein Validator, dann speichern Sie das Ergebnis in einem anderen Repository, ich könnte mehrere Tests haben:

  • ein, um zu überprüfen, dass ich gegen die richtigen Informationen validiere
  • um zu überprüfen, wie ich auf eine falsche Validierung reagiere
  • und eins, um zu überprüfen, ob ich den Artikel speichere.

Mit dem strengen Schein müssen Sie alle die Erwartungen erfüllen, selbst wenn Sie nur an dem "Speichern" interessiert sind. Indem wir einen schönen Schein verwenden, können wir die verschiedenen Aspekte des Verhaltens aufteilen und uns nur auf einen von ihnen in jedem Test konzentrieren.

Als zusätzlichen Bonus können Sie mit netten Mocks tun:

  • Gegeben ein Kontext
  • Wenn dieses Ereignis eintritt
  • Dann sollte dieses Ergebnis auftreten

Während strenge Mocks machen Sie:

  • Gegeben ein Kontext
  • Erwarte, dass etwas passiert
  • Wenn ich eine Veranstaltung durchführe
  • Dann gehen Sie zurück und lesen Sie, was das Ergebnis eigentlich hätte sein sollen.

Der erste wird allgemein als besser lesbar angesehen.

    
Lunivore 22.12.2011, 17:34
quelle