Wie schreiben Stub-Methode mit NUnit in C #

8

Ich habe 2 Klassen:

  • FirstDeep.cs
  • SecondDeep.cs

    Ich habe einfachen Code zum Beispiel:

%Vor%

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?

    
Smit 08.05.2012, 08:54
quelle

2 Antworten

9

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:

%Vor%

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:

%Vor%

Im Test verwenden Sie den Stub:

%Vor%

Im Produktionscode verwenden Sie das "reale" SecondDeep :

%Vor%

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 . In der nächsten Version von Visual Studio wird eine ähnliche Technologie in den Fakes verfügbar sein Framework .

    
Martin Liversage 08.05.2012, 09:01
quelle
4

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:

%Vor%     
Sergey Berezovskiy 08.05.2012 09:02
quelle

Tags und Links