Verpackung eine statische Klasse/Methode, um unit-Tests?
Ich habe eine statische Klasse, die ich benutze für die Anmeldung:
public static class myLogger
{
public static ErrorLogging(string input)
{
//dostuff
}
}
So wie ich bin, es zu benutzen ist:
public class myClassthatDoesStuff
{
...
myLogger.ErrorLogging("some error ocurred");
...
}
Wie kann ich die moq myLogger Klasse, um in der Lage sein, um Gerät zu testen und sicherzustellen, dass die ErrorLogging Methode ausgeführt wurde? Ist es möglich, dies zu tun, ohne alle Parameter in den Konstruktor (constructor injection)? myClassthatDoesStuff erfordert, dass es keine Parameter im Konstruktor.
check-out von Microsoft Shims msdn.microsoft.com/en-us/library/hh549176(v=vs. 110).aspx
Anforderungen Visual Studio Ultimate
Möglich, Duplikat der Wie zum Hohn statische Methoden in c# verwenden MOQ-framework?
Anforderungen Visual Studio Ultimate
Möglich, Duplikat der Wie zum Hohn statische Methoden in c# verwenden MOQ-framework?
InformationsquelleAutor l--''''''---------'''''''''''' | 2016-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
In diesem blog-post beschreibt das Szenario - Sie haben einen alten statischen logging-Methode, die Sie nutzen und es in testbarem code.
Überall dort, wo Sie würde haben hing auf die statische Klasse, hängt von der Schnittstelle statt. Zum Beispiel, wenn die Klasse
DoesSomething
erfordert die Funktion in der statischen Klasse:Dies bietet Ihnen zwei Vorteile:
Können Sie die unit-test-code, der verwendet wird statische Klassen (durch das entfernen der direkten Abhängigkeit, die statische Klasse.) Sie können ersetzen
ILogger
mit einer Klasse verspottet, wie einer, der fügt Ihr Fehlermeldungen auf der Liste.Wenn Sie nicht setzen alles in den Konstruktor, der macht bestimmt es schwerer. Wenn Sie verwenden können, dependency injection von Grund auf, gibt Ihnen eine gewisse Kontrolle darüber, wie Ihre Klassen instanziiert sind. Zum Beispiel, ohne dependency injection-ein WCF-Dienst-Klasse in der Regel nicht haben konnte, etwas in den Konstruktor.
scott-vielen Dank für die Erklärung. Sinn macht
InformationsquelleAutor Scott Hannen
Wenn Sie nicht ändern können, es von einer statischen auf eine nicht-statische Klasse, wickeln Sie es mit einer nicht-statischen Klasse...
wusste
@
erwähnt, könnte sich zu solcher Folter...) Sie können die parameter sicher... aber dann, wie würden Sie testen, um zu sehen, wenn Sie den Protokolleintrag aus, den Sie Hinzugefügt haben, existiert in den Daten speichern? 🙂InformationsquelleAutor Aydin
Kann man es mit Microsoft Shims
Vorausgesetzt, dass Ihr Projekt genannt
ConsoleApplication1
.Zuerst gehen Sie zu Ihrem unit-test-Projekt, Referenzen, klicken Sie rechts auf Montage, enthält
myClassthatDoesStuff
Klasse und wählte "Fügen Sie Fakes-Assembly".Unit-test mit den Distanzscheiben aussieht:
Einmal hieß es Maulwürfe, die immer noch verfügbar für VS2010 -visualstudiogallery.msdn.microsoft.com/...
InformationsquelleAutor igorushi
Können Sie es mit Typemock Isolator.
Ermöglicht es Ihnen, zu vermeiden alle diese Menge von Wrapper und Schnittstellen und tun es ganz einfach:
InformationsquelleAutor JamesR