Ich bin in letzter Zeit sehr interessiert an Tests und versuche jetzt, Komponententests so gut wie möglich zu machen. Ich benutze NUnit zusammen mit Rhino Mocks. Ich habe auch viel hier bei Stackoverflow gelesen, aber konnte keine klare Antwort auf meine Frage finden.
Was ich mich wundere ist, wenn ich eine Methode wie die unten habe, sollte ich die OfficeClass-Abhängigkeit verspotten und auch GetAllOffices testen oder nur einen Stub für die Abhängigkeit verwenden und überprüfen, dass die Methode GetAllOffices aufgerufen wurde und dass ich tatsächlich die Büros bekomme zurück, dass ich von meinem Setup für den Stub erwartet habe?
%Vor%Wird es einen Unterschied machen, ob es sich bei der OfficeClass nur um ein anderes POCO handelt oder ob es sich um einen Webservice handelt, der sich über Spott und Stubbing lustig macht?
Lange Frage kurz: Wann zu verspotten und wann im Unit-Test zu stottern?
Mocks verwenden ein Framework, um einen "Mock" Ihrer Abhängigkeit zu generieren. Wenn beispielsweise officeClass ein Repository für Ihre Daten ist, können Sie ein Mock-Framework (ich verwende MOQ) verwenden, um eine Kopie Ihres Repositorys zu erstellen. Aus diesem Grund ist die Verwendung von Schnittstellen für Ihre Abhängigkeit ideal für Testzwecke. Das spöttische Framework kann leicht eine Schnittstelle zum Testen zum Vorschein bringen.
Mit Stubs, wie ich es verstehe, stempeln Sie manuell Ihre Abhängigkeit aus und erstellen vordefinierte Antworten. Wenn Sie zum Beispiel eine Schnittstelle IOfficeClass haben und eine neue Klasse erstellen, die von ihr erbt, können Sie diese Klasse in Ihren Dienst einfügen, damit Sie sie verwenden können.
Wiederum sollten Dinge wie Web-Services in eine Schnittstelle eingebunden werden (wie das IRepository-Muster), mit der Sie Ihre Logik einfach testen können, ohne den Web-Service zu benutzen. Das Gleiche gilt für POCO-Klassen.
In Ihrem Fall hätten Sie zum Beispiel:
%Vor%Und für Ihren Service
%Vor%Auf diese Weise können Sie auch die zugrunde liegende Datenquelle ändern, ohne die Hauptanwendung oder den Geschäftslogikcode ändern zu müssen.
Ihr Komponententest würde mit moq:
ungefähr so aussehen %Vor%Sie können mehr über Mocks und Stubs unten lesen:
Tags und Links c# unit-testing mocking stub