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%Ihr Spott tritt an die Stelle eines Mitarbeiters. Es ist ideal, eines von zwei Dingen zu tun:
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:
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:
Während strenge Mocks machen Sie:
Der erste wird allgemein als besser lesbar angesehen.
Tags und Links c# unit-testing moq tdd arrange-act-assert