Pregunta

¿Cómo escribir pruebas unitarias para clases internas?

¿Fue útil?

Solución

Usted escribe pruebas que especifican el comportamiento de la interfaz externa de la clase de nivel superior. Si esa clase usa clases internas para implementar ese comportamiento o no, es un detalle de implementación de la clase, y las pruebas no necesitan saber nada al respecto.

Si la clase interna no se puede probar adecuadamente a través de la interfaz de la clase de nivel superior, generalmente es mejor mover la clase interna y probarla directamente como una nueva clase de nivel superior. Querer probar las clases internas es un olor de código que la clase interna podría ser lo suficientemente importante como para ser una clase de nivel superior.

Otros consejos

No es que lo recomiendo, pero también puede usar InternalsVisibleToAttribute .

Al usar MS Visual Studio para pruebas unitarias, simplemente tiene que crear un privado Accesorio . Creo que internamente funciona con reflexiones. Simplemente eche un vistazo al código generado.

No lo pruebas directamente. Se probará a través de la clase donde se define.

Y, si aplica TDD, como esta etiqueta de pregunta implica actualmente, ¿cuál es la prueba en la que simplemente escribe esa llamada para una clase interna? Quiero decir, ¿no puede ser una clase estándar, de propiedad privada de la clase en la que estás trabajando?

Hemos utilizado una clase auxiliar que utiliza la reflexión para cargar y llamar a métodos en clases internas. También es posible cambiar la accesibilidad en tiempo de compilación utilizando el símbolo DEBUG, por ejemplo,

#if DEBUG
public
#else
internal
#endif
    class MyInternalClass
{
    ...
}

Sin embargo, la respuesta de Esko Luontola es más correcta, ya que la funcionalidad o los requisitos empresariales son los más importantes. Es fácil concentrarse demasiado en la cobertura del código en lugar de probar las áreas de riesgo importantes.

Consulte las explicaciones detalladas en http://msdn.microsoft.com/en -us / library / bb385974.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top