Estoy en contra de todas estas recomendaciones para otorgar automáticamente amistad a clases de prueba ...
personalmente prefiero a centrarse en lo siguiente que me permita el acceso a la parte interna de una clase que necesito para probar:
- confiar en la interfaz pública de la clase cuando sea posible; a veces esto significa extender ligeramente la interfaz pública para permitir pruebas más fáciles. No pelee demasiado con estas extensiones, pero tampoco deje que manejen demasiado su diseño ...
- Considere agregar una interfaz de monitorización que también se puede usar con el código 'real' como código de prueba para habilitar el monitoreo de el código bajo prueba. (Todavía me sorprende la frecuencia con la que esta es una parte realmente buena del proceso de diseño).
- Considere proporcionar acceso a algunas partes de la clase a clases derivadas a través de una 'interfaz protegida' y obtenga una versión 'comprobable' de la clase en cuestión que luego puede ser instrumentada y probada.
En resumen, prefiero ver diseñado en puntos de prueba en lugar de una amistad general con una clase de prueba. Por supuesto, el primero es más difícil de hacer que el segundo, pero, en mi humilde opinión, los resultados en un mejor código Y mejores pruebas.
No estoy de acuerdo con 1. Todos los UT deben ejecutarse automáticamente durante la compilación nocturna, ya que generalmente toman mucho tiempo. Antes de cada check in debe ejecutar UT solo para su módulo. –
3. También es incorrecto: haga que las clases de UT sean amigos y lo verán todo –
m_pGladiator: "Un UT no es un UT por definición si se tarda más de 1/10 de segundo en ejecutarse", parafraseado de Working Effectively with Código heredado). Por lo tanto, estaría bien ejecutarlo automáticamente en cada commit. –