Acabo de tener una conversación con mi desarrollador principal que no estuvo de acuerdo con que las pruebas unitarias sean todas las necesarias o importantes. Desde su punto de vista, las pruebas funcionales con una cobertura de código lo suficientemente alta deberían ser suficientes, ya que cualquier refactorización interna (cambios de interfaz, etc.) no provocará que las pruebas sean reescritas o examinadas nuevamente.¿Por qué las pruebas funcionales no son suficientes? ¿Qué ofrecen las pruebas unitarias?
Intenté explicar pero no llegué muy lejos, y pensé que ustedes podrían hacerlo mejor. ;-) Entonces ...
¿Cuáles son algunas buenas razones para el código de prueba unitaria que las pruebas funcionales no ofrecen? ¿Qué peligros hay si todo lo que tienes son pruebas funcionales?
Edit # 1 Gracias por todas las buenas respuestas. Quería agregar que mediante pruebas funcionales no me refiero solo a pruebas en todo el producto, sino que también a pruebas en módulos dentro del producto, pero no en el bajo nivel de una prueba unitaria con burla si es necesario, etc. Tenga en cuenta también que nuestras pruebas funcionales son automáticas y se ejecutan continuamente, pero solo demoran más que las pruebas unitarias (que es una de las grandes ventajas de las pruebas unitarias).
Me gusta el ejemplo de brick vs. house. Creo que lo que me está diciendo desarrollador principal está poniendo a prueba las paredes de la casa es suficiente, no es necesario para poner a prueba los ladrillos individuales ... :-)
En cuanto al ejemplo de ladrillo: los ladrillos se producen en serie, son todos iguales, lo que es diferente de las funciones o unidades. – philant
Buen punto @filante. No estoy seguro Estoy de acuerdo con su desarrollador principal. Como se menciona en el comentario, las unidades/módulos de software no son todos iguales y, por todas las razones mencionadas en las diversas respuestas, es importante y útil tener pruebas unitarias por separado. – Sid