Tiendo a estar del lado de tus colegas, pero solo hasta cierto punto.
El problema con las pruebas unitarias es que se escriben con frecuencia y sin pensar en casos triviales donde la investigación superficial del código revela que funcionará sin importar qué. Por ejemplo:
def add(x, y)
x + y
end
Junto con una docena de pruebas para asegurarse de que la adición realmente funcione para casos de uso elegidos arbitrariamente. Duh ...
La premisa general detrás de las pruebas unitarias es: si su código no contiene errores, es porque no ha probado lo suficiente. Ahora, cuándo escribir pruebas unitarias adecuadas. Respuestas:
- Cuando estas probando
- Cuando estás depurando
- A medida que desarrollas cosas realmente difíciles
Repasemos cada uno, suponiendo que esté desarrollando algún tipo de aplicación web.
Escribe algo de código en la nueva funcionalidad, y ya debería funcionar razonablemente bien. Luego buscas tu navegador y verificas que funciona haciendo pruebas más intensas, ¿verdad? Bzzzt! ... Respuesta incorrecta. Escribes una prueba unitaria. Si no lo hace ahora, probablemente nunca lo hará. Y este es uno de los lugares donde las pruebas unitarias funcionan muy bien: para probar la funcionalidad de alto nivel.
Entonces descubres un error (¿quién nunca pierde ninguno?). Esto nos lleva al punto dos. Vuelve al código y comienza a seguir los pasos. Mientras lo hace, escriba las pruebas unitarias en los puntos clave de interrupción donde tener datos consistentes y correctos es crucial.
El último punto es al revés. Estás diseñando una funcionalidad complicada que implica un montón de metaprogramación. Rápidamente genera un árbol de decisión con miles de escenarios potenciales, y debe asegurarse de que todos y cada uno de ellos funcionen. Al escribir tales cosas, un cambio de aspecto simple aquí o allá puede tener consecuencias inimaginables más abajo en la cadena alimentaria. Supongamos que está diseñando una implementación MPTT utilizando disparadores SQL, para que pueda funcionar con declaraciones de varias filas.
En este tipo de entorno espinoso, generalmente querrás automatizar altamente tus pruebas. Entonces, escribe scripts para automatizar la generación de datos de prueba y ejecuta una gran cantidad de pruebas unitarias en estos datos de prueba. Una cosa crucial para no perder de vista al hacer esto, es que también necesita escribir pruebas unitarias para su generador de pruebas unitarias.
En pocas palabras: pruebas unitarias, definitivamente sí. Pero evite las funcionalidades básicas, hasta que realmente las necesite para la depuración o para asegurarse de que algunas funcionalidades meticulosas funcionen correctamente (incluidas, en este último caso, las pruebas mismas).