Mocking eine Statische Klasse
Ich habe eine statische Klasse, wickelt einige native Methoden von winspool:
public static class WinSpool
{
[DllImport("winspool.drv")]
public static extern int OpenPrinter(string pPrinterName, out IntPtr phPrinter, IntPtr pDefault);
...
//some more methods here
}
Ich würde, wie um Sie zu verhöhnen, die für unit-Tests, konnte aber nicht finden ein Muster für diese. (Nicht alle vermeiden Sie statische Klassen?)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, statische Klasse ist in der Regel verpönt im Bereich der unit-Tests und mocking. AFAIK nicht open source mocking Frameworks ( wie Rhino Mocks) unterstützt statische Klasse mocking
Wenn Sie absolut und positiv muss mock statische Klasse, dann habe ich Angst, dass Sie gehen müssen, für Typemock, die ist nicht kostenlos.
Microsoft hat eine Fakes framework für Visual Studio 2012 Ultimate, die erlaubt, dass statische Typen, damit er verspottet, mit Beilagen. Shims sind "fake" - Versammlungen, die vorsehen, dass die Delegierten für alle extern zugänglichen Methoden. Anrufe werden dann weitergeleitet durch den event-filter und überall dort, wo der test hat einen von Ihren Beauftragten die Delegierten den Anruf verarbeitet. Nicht, dass jemand will, um zu ermutigen, statische Typen, die nicht ausreichend durch dependency injection. Die bevorzugte Richtung ist der Weg für die Notwendigkeit der Zwischenlagen und in Richtung der Verwendung von stubs, die mit DI.