¿Por qué las pruebas funcionales no son suficientes? ¿Qué ofrecen las pruebas unitarias?

Acabo de tener una conversación con mi desarrollador principal que no estuvo de acuerdo en que las pruebas de unidad son tan necesarias o importantes. En su opinión, las pruebas funcionales con una cobertura de código suficientemente alta deberían ser suficientes, ya que cualquier refactorización interna (cambios en la interfaz, etc.) no llevará a que las pruebas sean necesarias para ser reescritas o revisadas nuevamente.

Intenté explicarlo, pero no llegué muy lejos, y pensé que podrían hacerlo mejor. ;-) Asi que...

¿Cuáles son algunas buenas razones para unificar el código de prueba que las pruebas funcionales no ofrecen? ¿Qué peligros hay si todo lo que tienes son pruebas funcionales?

Editar # 1 Gracias por todas las grandes respuestas. Quería agregar que con pruebas funcionales no me refiero solo a las pruebas en todo el producto, sino también a las pruebas en módulos dentro del producto, pero no en el nivel bajo de una prueba unitaria con burla si es necesario, etc. Tenga en cuenta que Nuestras pruebas funcionales son automáticas y se ejecutan continuamente, pero solo llevan más tiempo que las pruebas unitarias (que es una de las grandes ventajas de las pruebas unitarias).

Me gusta el ejemplo de ladrillo contra casa. Supongo que lo que dice mi desarrollador principal es que probar las paredes de la casa es suficiente, no es necesario probar los ladrillos individuales ... :-)

Respuestas a la pregunta(8)

Su respuesta a la pregunta