unitarias unit tutorial test pruebas mock example espaƱol unit-testing mocking moq

unit-testing - tutorial - pruebas unitarias pdf



Clases internas burlonas con Moq para pruebas unitarias. (1)

Digamos que tengo una clase "ClassA", que depende de una clase "ClassB" (inyectada en el constructor de ClassA). Quiero burlarme de ClassB para poder probar ClassA de forma aislada. Ambas clases son internas.

Corríjame si me equivoco, pero parece que Moq solo puede burlarse de una clase si es pública, tiene un constructor público sin parámetros, y los métodos para burlarse son public virtual . Realmente no quiero hacer estas clases públicamente visibles. ¿Me estoy perdiendo algo con Moq, o simplemente no es adecuado para lo que quiero hacer?

Supongo que podría crear una interfaz (diga "IClassB") que implementa ClassB, inyectarla en ClassA y simular la interfaz en su lugar. ClassB todavía puede ser interno (aunque me doy cuenta de que los métodos de interfaz deberían ser públicos). Si bien esto funcionaría, me siento incómodo al crear muchas interfaces, cuyo único propósito es apoyar el simulacro de prueba unitaria. ¿Pensamientos?


Puede hacer que las partes internas sean visibles para Moq agregando InternalsVisibleToAttribute en el archivo assembly.cs de su proyecto, como esto:

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]

¿Por qué "DynamicProxyGenAssembly2" y no "Moq" ? Es el nombre del conjunto dinámico creado para contener los tipos de proxy generados dinámicamente (todo esto es manejado por otra biblioteca, DynamicProxy de Castle ) que usa Moq. Por lo tanto, expone los tipos al ensamblado de proxy dinámico, no a Moq.

Pero, ¿cuál es el punto de burlarse de la clase si no hay un miembro anulable? No te burlarás de nada y todas las llamadas utilizarán la implementación real. Tu segunda solucion

Supongo que podría crear una interfaz (diga "IClassB") que implementa ClassB, inyectarla en ClassA y simular la interfaz en su lugar.

es lo que normalmente haría. Su propósito es mucho más que "apoyar el simulacro de la prueba unitaria" : le ayuda a construir componentes acoplados de forma poco precisa, lo que siempre es algo que vale la pena apuntar.