Ich habe 2 Klassen:
SecondDeep.cs
Ich habe einfachen Code zum Beispiel:
und
%Vor%Dann möchte ich Unit-Test für die Methode "AddA" schreiben:
%Vor%Und danach habe ich Probleme, ich weiß nicht, wie korrekt Stub für die Methode SomethingToDo in meiner Testklasse schreiben soll. Ich habe immer falsch. Ich sollte nur TRUE zurückgeben. Aber wie?
Eine gute Möglichkeit, um Stubs zu schreiben, ist die Verwendung von Abhängigkeitsinjektion . FirstDeep
hängt von SecondDeep
ab und in Ihrem Test möchten Sie SecondDeep
durch einen Stub ersetzen.
Ändern Sie zuerst Ihren vorhandenen Code, indem Sie eine Schnittstelle für SecondDeep
extrahieren und dann diese in FirstDeep
im Konstruktor einfügen:
Beachten Sie, dass FirstDeep
keine SecondDeep
-Instanz mehr erstellt. Stattdessen wird eine Instanz in den Konstruktor eingefügt.
In Ihrem Test können Sie einen Stub für ISecondDeep
erstellen, wobei SomethingToDo
immer true zurückgibt:
Im Test verwenden Sie den Stub:
%Vor% Im Produktionscode verwenden Sie das "reale" SecondDeep
:
Die Verwendung eines Dependency-Injection-Containers und eines Stubbing-Frameworks kann vieles einfacher machen.
Wenn Sie Ihren Code nicht neu schreiben möchten, können Sie ein Framework zum Abfangen von Anrufen wie Microsoft Moles
Um Ihren Code testbar zu machen, sollten Sie keine Abhängigkeiten innerhalb Ihrer Klasse instanziieren. Verwenden Sie Dependency Injection (über Konstruktor, Eigenschaft oder Parameter). Verwenden Sie auch abstrakte Klassen oder Schnittstellen, um Abhängigkeiten zu spotten:
%Vor%Je nach Abstraktion können Sie Ihre Klasse isoliert testen.
%Vor% Hier ist ein Testbeispiel (mit Moq ). Es zeigt Ihnen, wie Sie true
vom Aufruf an Ihre gespottete Abhängigkeit zurückgeben können: