2009-12-01 19 views
7

tengo una clase estática que envuelve algunos métodos nativos de winspool:que imita una clase estática

public static class WinSpool 
{ 
    [DllImport("winspool.drv")] 
    public static extern int OpenPrinter(string pPrinterName, out IntPtr phPrinter, IntPtr pDefault); 
    ... 
    //some more methods here 
} 

quisiera burlarse de ellos para las pruebas unitarias, pero no pudo encontrar un patrón para esto. (¿Todos evitan las clases estáticas?)

Respuesta

10

Sí, la clase estática generalmente es frowned upon in the field of unit testing and mocking. Que yo sepa ningún marco de burla de código abierto (como Rhino Mocks) apoyan clase estática burlarse

Si usted absolutamente y positivamente debe burlarse de clase estática, entonces me temo que usted debe ir para Typemock, que no es libre.

+6

Me parece irónico cómo los miembros estáticos son "mal vistos", cuando lo que realmente debemos desaprobar son los marcos de burla que no pueden burlarse de los miembros estáticos. Después de todo, si TypeMock puede hacer esto, ¿por qué los marcos OSS no pueden hacer lo mismo? –

+1

La razón de esto es que la mayoría de los frameworks burladores implementan simulaciones usando el patrón Proxy, que esencialmente requiere herencia, y por supuesto no se pueden heredar las clases estáticas. Typemock utiliza un enfoque completamente diferente, mediante la redirección de llamadas a métodos con inyección de IL, lo que le da la capacidad de simular llamadas estáticas. – womp

+6

Porque es * demasiado caro para ser desarrollado gratis * (http://stackoverflow.com/questions/1534119/is-there-any-open-source-mocking-framework-resembling-typemock) – Graviton

2

Microsoft ha producido un marco Fakes para Visual Studio 2012 Ultimate que permite burlar los tipos estáticos utilizando cuñas. Las cuñas son ensamblajes "falsos" que proporcionan delegados para todos los métodos accesibles externamente. Las llamadas se enrutan a través del filtro de eventos, y dondequiera que la prueba haya configurado a uno de sus delegados, el delegado maneja la llamada. No es que alguien quiera fomentar los tipos estáticos que no se manejan a través de la inyección de dependencia. La dirección preferida es alejarse de la necesidad de calzas y hacia el uso de talones usando DI.

Cuestiones relacionadas