el punto de pruebas unitarias es probar unidades de código aisladas.
Martin Fowler en Prueba de unidad
La prueba de unidad a menudo se habla en el desarrollo de software, y es un término con el que he estado familiarizado durante todo el tiempo que escribo programas. Sin embargo, como la mayoría de la terminología de desarrollo de software, está muy mal definida, y veo que la confusión a menudo puede ocurrir cuando la gente piensa que está más definida de lo que realmente está.
Lo que escribió Kent Beck en Test Driven Development, By Example
Los llamo "pruebas unitarias", pero no coinciden muy bien con la definición aceptada de pruebas unitarias
Cualquier reclamo dado de "el punto de las pruebas unitarias es" dependerá en gran medida de la definición de "prueba unitaria" que se esté considerando.
Si su perspectiva es que su programa se compone de muchas unidades pequeñas que dependen unas de otras, y si se restringe a un estilo que prueba cada unidad de forma aislada, entonces una gran cantidad de test doubles es una conclusión inevitable.
El consejo conflictivo que ve proviene de personas que operan bajo un conjunto diferente de supuestos.
Por ejemplo, si está escribiendo pruebas para apoyar a los desarrolladores durante el proceso de refactorización, y dividir una unidad en dos es una refactorización que debería admitirse, entonces es necesario dar algo. Tal vez este tipo de prueba necesita un nombre diferente? O tal vez necesitamos una comprensión diferente de "unidad".
Es posible que desee comparar:
¿Una prueba que prueba el método de cálculo de la persona sin burlarse de la dependencia de la Calculadora (dado que la Calculadora es una clase liviana que no accede al "mundo exterior") puede considerarse una prueba unitaria?
Creo que esa es la pregunta incorrecta; Es nuevamente un argumento sobre etiquetas , cuando creo que lo que realmente nos importa son propiedades .
Cuando estoy introduciendo cambios en el código, no me importa el aislamiento de las pruebas; ya sé que "el error" se encuentra en algún lugar de mi pila actual de ediciones no verificadas. Si ejecuto las pruebas con frecuencia, entonces limito la profundidad de esa pila, y encontrar el error es trivial (en el caso extremo, las pruebas se ejecutan después de cada edición, la profundidad máxima de la pila es una). Pero ejecutar las pruebas no es el objetivo, es una interrupción, por lo que es valioso reducir el impacto de la interrupción. Una forma de reducir la interrupción es asegurarse de que las pruebas sean rápidas ( Gary Bernhardt sugiere 300ms , pero no he descubierto cómo hacerlo en mis circunstancias).
Si invocar Calculator::add
no aumenta significativamente el tiempo requerido para ejecutar la prueba (o cualquiera de las otras propiedades importantes para este caso de uso), entonces no me molestaría en usar una prueba doble, no lo hace. Proporcionar beneficios que superen los costos.
Observe las dos suposiciones aquí: un ser humano como parte de la evaluación de costos y la pequeña cantidad de cambios no verificados en la evaluación de beneficios. En circunstancias en las que esas condiciones no se cumplen, el valor de "aislamiento" cambia bastante.
Vea también Hot Lava , por Harry Percival.