2009-09-03 13 views
5

¿Es posible burlarse de la clase Assembly?¿Cómo puedo simular el montaje?

Si es así, ¿en qué marco y cómo?

De lo contrario, ¿cómo escribir pruebas para el código que usa Assembly?

+9

contarla "tu madre es un hámster y su padre huele a eldeberries"? – patros

+0

@patros: me tomó un tiempo entender ... –

+0

@Martinho Fernandes: Agregué un ejemplo para Rhino. –

Respuesta

9

TypeMock es muy potente. Supongo que puede hacerlo. Para los otros frameworks simulados como Moq o Rhino, necesitarás usar otra estrategia. Estrategia

para Rhino o Moq:

Por ejemplo: Usted está utilizando el Asssembly clase para obtener el nombre completo de montaje.

public class YourClass 
{ 
    public string GetFullName() 
    { 
     Assembly ass = Assembly.GetExecutingAssembly(); 
     return ass.FullName; 
    } 
} 

La Asamblea clase derivada de la interfaz _Assembly. Entonces, en lugar de usar Asamblea directamente, puede inyectar la interfaz. Entonces, es fácil burlarse de la interfaz para su prueba.

La clase modificación:

public class YourClass 
{ 
    private _Assembly _assbl; 
    public YourClass(_Assembly assbl) 
    { 
     _assbl = assbl; 
    } 

    public string GetFullName() 
    { 
     return _assbl.FullName; 
    } 
} 

En su prueba, que se burlan de _Assembly:

public void TestDoSomething() 
{ 
    var assbl = MockRepository.GenerateStub<_Assembly>(); 

    YourClass yc = new YourClass(assbl); 
    string fullName = yc.GetFullName(); 

    //Test conditions 
} 
+0

Lo hace. ¿Puede explicar cómo lo haría en un marco simulado "tradicional" (como Moq o Rhino)? –

+1

Oh, no sabía acerca de esta interfaz "oculta" '_Assembly'. Gracias. Si lo hiciera, no habría hecho la pregunta. Supongo que si Assembly no implementó esta interfaz, podría haber creado uno yo mismo ('IAssembly') y escribir un contenedor que lo implemente y use la implementación' Assembly', ¿es correcto? –

+1

@ Martinho: es correcto –

Cuestiones relacionadas