Notas preliminares
No voy a entrar en la distinción de los diferentes tipos de pruebas que hay, hay ya un par de preguntas sobre estos sitios con respecto a eso.
Tomaré lo que hay allí y eso dice: prueba de unidad en el sentido de "probar la unidad aislable más pequeña de una aplicación" de la cual esta pregunta realmente deriva
El problema de aislamiento
¿Cuál es la unidad aislable más pequeña de un programa? Bueno, como yo lo veo, ¿depende de qué idioma estás codificando?
Micheal Feathers habla sobre el concepto de costura : [WEwLC, p31]
Una costura es un lugar donde puede alterar el comportamiento en su programa sin editar en ese lugar.
Y sin entrar en detalles, entiendo que una costura, en el contexto de las pruebas unitarias, es un lugar en un programa donde su "prueba" puede interactuar con su "unidad".
Ejemplos
La prueba de unidad, especialmente en C ++, requiere del código bajo prueba para agregar más costuras que se requerirían estrictamente para un problema determinado.
Ejemplo:
- Agregar una interfaz virtual donde la implementación no virtual hubiera sido suficiente
- División - generalización (?) - una clase (más pequeña) más "justa" para facilitar la adición de una prueba.
- Dividir un proyecto ejecutable único en bibliotecas aparentemente "independientes", "solo" para facilitar su compilación independiente para las pruebas.
La pregunta
Probaré algunas versiones que con suerte preguntarán sobre el mismo punto:
- Es la forma en que las Pruebas unitarias requieren que uno estructura el código de una aplicación "solo" beneficioso para las pruebas unitarias o es realmente beneficioso para la estructura de las aplicaciones.
- ¿La generalización del código que se necesita para que sea comprobable por unidad es útil para cualquier cosa que no sean las pruebas unitarias?
- ¿Agregar pruebas unitarias obliga a uno a generalizar innecesariamente?
- ¿La unidad de forma prueba la fuerza en el código "siempre" también es una buena forma para el código en general como se ve desde el dominio del problema?
Recuerdo una regla general que decía que no generalices hasta que necesites / hasta que haya un segundo lugar que use el código. Con las pruebas unitarias, siempre hay un segundo lugar que usa el código, es decir, la prueba unitaria. Entonces, ¿es esta razón suficiente para generalizar?