¿Hasta qué punto prueba por unidad los componentes internos / privados de una clase / módulo / paquete / etc? ¿Los prueba o 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 uno 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é pasa con los otros procedimientos? ¿Los probarías individualmente para comprobar que analizan sus subcadenas correctamente?
Puedo pensar en algunos argumentos:
Pros :
- Más pruebas siempre son mejores, y esto puede ayudar a aumentar la cobertura del código
- Algunos componentes internos pueden ser difíciles de dar entradas específicas (por ejemplo, casos de borde) 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 lenta. Para cambiar cualquier cosa, debe volver a escribir las pruebas de unidad, incluso si los usuarios de la interfaz externa no están afectados
- Algunos lenguajes y marcos de prueba no lo permiten
¿Cuáles son tus opiniones?