Option 1: Verwenden Sie eine Naht
Der einfachste Weg besteht darin, diese Methode mit einer Naht zu überarbeiten:
%Vor%Auf diese Weise können Sie die Erstellung des "neuen" Operators abfangen, indem Sie diese Klasse erweitern. Wenn dies von Hand gemacht wird, könnte es so aussehen:
%Vor%Diese falsche Klasse kann in Ihren Testmethoden verwendet werden.
Option 2: Trennen Sie Verhalten und Daten
Ein besserer Weg wäre, die Daten vom Verhalten zu trennen. Ihr Befehl hat sowohl Daten (die Nachricht) als auch das Verhalten (diese Nachricht behandelnd). Wenn Sie eine solche Änderung in Ihrer Codebasis vornehmen dürfen: Trennen Sie dies, indem Sie beispielsweise Befehle und Befehlshandler definieren. Hier ist ein Beispiel:
%Vor%Jetzt können Sie Abhängigkeitsinjektion verwenden, um einen Handler in die Klasse zu injizieren, die Sie testen möchten. Diese Klasse sieht jetzt so aus:
%Vor%Da Sie nun die Daten vom Verhalten getrennt haben, ist es sehr einfach, einen falschen Befehlshandler zu erstellen (oder ihn mit Rhino-Mocks zu erstellen), der überprüft, ob der richtige Befehl an den Handler gesendet wurde. Das würde manuell so aussehen:
%Vor% Dieser falsche Handler kann während des gesamten Unit-Testprojekts wiederverwendet werden. Ein Test mit diesem FakeHandler
könnte folgendermaßen aussehen:
Wenn Sie die Daten vom Verhalten trennen, wird Ihre Anwendung nicht nur testfähiger. Es macht Ihre Anwendung widerstandsfähiger gegenüber Veränderungen. Zum Beispiel können übergreifende Bedenken bei der Ausführung von Befehlen hinzugefügt werden, ohne Änderungen an einem Handler im System vornehmen zu müssen. Da IHandler<T>
eine Schnittstelle mit einer einzigen Methode ist, ist es sehr einfach, einen Dekorator zu schreiben, der jeden Handler umschließt und fügen Sie Dinge wie Protokollierung, Audit-Trailing, Profiling, Validierung, Transaktionsverarbeitung, Fehlertoleranzverbesserungen usw. hinzu. Sie können mehr darüber in Dieser Artikel .
Tags und Links c# unit-testing mvvm rhino-mocks