2009-06-10 15 views

Respuesta

4

Normalmente no. Si prueba exhaustivamente los métodos públicos que usan métodos privados y clases internas, entonces debería poder probar el rango completo de la funcionalidad privada sin exponerla.

0

Tiene que exponer un medio para invocarlos, posiblemente a través de una clase derivada específica para la prueba.

30

métodos privadas:

Si usted está tratando de probar métodos que no son públicas, por lo general significa que estás haciendo mal.

Si hay funciones que desea probar, pero no desea hacer públicas en su clase, el código está tratando de decirle algo. Tu clase probablemente tenga demasiadas responsabilidades. Debería considerar seriamente extraer esa funcionalidad privada en una nueva clase, escribir pruebas para la nueva clase y hacer que su clase anterior tenga una instancia privada de la nueva clase.

clases internas:

Este es más válida, especialmente si usted está escribiendo una biblioteca de clases para que otros puedan reutilizar. Puede tener clases que no están diseñadas para uso general, pero para las que desea escribir pruebas unitarias.

Para este caso, eche un vistazo a InternalsVisibleToAttribute.

+3

También vale la pena señalar que InternalsVisibleTo se puede utilizar para exponer los constructores/métodos utilizados únicamente por el ensamblaje de prueba y mantener los ocultos del código del cliente. – jlafay

2

La forma en que manejo esto es que hago todos mis métodos públicos. Sé que suena mal, pero ten paciencia conmigo un momento.

Al usar IoC, tiene una interfaz para cada clase que tiene algo de lógica. Básicamente, usted codifica contra la interfaz y no la implementación real. Lo que debes hacer es marcar todos los métodos como públicos y no afecta la forma en que se usa la clase, excepto que hace posible escribir pruebas unitarias para cada método en esa clase.