¿Hasta qué punto prueba los componentes internos / privados de una clase / módulo / paquete / etc.? ¿Los prueba en absoluto o simplemente prueba la interfaz con el mundo exterior? Un ejemplo de estos métodos internos es privado.
Como ejemplo, imagine un analizador de descenso recursivo , que tiene varios procedimientos internos (funciones / métodos) llamados desde un procedimiento central. La única interfaz con el mundo exterior es el procedimiento central, que toma una cadena y devuelve la información analizada. Los otros procedimientos analizan diferentes partes de la cadena, y se llaman desde el procedimiento central u otros procedimientos.
Naturalmente, debe probar la interfaz externa llamándola con cadenas de muestra y comparándola con la salida analizada a mano. ¿Pero qué hay de los otros procedimientos? ¿Los probaría individualmente para verificar que analizan sus subcadenas correctamente?
Puedo pensar en algunos argumentos:
Pros :
- Más pruebas siempre es mejor, y esto puede ayudar a aumentar la cobertura del código
- Algunos componentes internos pueden ser difíciles de dar entradas específicas (casos extremos, por ejemplo) al dar entrada a la interfaz externa
- Pruebas más claras. Si un componente interno tiene un error (fijo), un caso de prueba para ese componente deja en claro que el error estaba en ese componente específico
Contras :
- La refactorización se vuelve demasiado dolorosa y lleva mucho tiempo. Para cambiar cualquier cosa, debe volver a escribir las pruebas unitarias, incluso si los usuarios de la interfaz externa no se ven afectados
- Algunos lenguajes y marcos de prueba no lo permiten
Cuales son tus opiniones