Verpackung eine statische Klasse/Methode, um die Einheit testen?
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?
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 Ihrem statische Klasse, dies zu tun:Dies bietet Ihnen zwei Vorteile:
Können Sie die unit-test-code, der verwendet die statische Klasse (durch 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 ändern können, es von einer statischen auf eine nicht-statische Klasse, wickeln Sie es mit einer nicht-statischen Klasse...
@
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? 🙂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 Versammlung enthält
myClassthatDoesStuff
Klasse und wählte "Fügen Sie Fakes-Assembly".Unit-test mit den Distanzscheiben aussieht:
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: