A menos que escriba un código sin probarlo, siempre incurrirá en el costo de la prueba.
La diferencia entre tener pruebas unitarias y no tenerlas es la diferencia entre el costo de escribir la prueba y el costo de ejecutarla en comparación con el costo de la prueba a mano.
Si el costo de escribir una prueba unitaria es de 2 minutos y el costo de la ejecución de la prueba unitaria es prácticamente 0, pero el costo de la prueba manual del código es de 1 minuto, entonces usted gana el equilibrio cuando ha ejecutado la prueba dos veces.
Durante muchos años tuve la mala interpretación de que no tenía tiempo suficiente para escribir pruebas unitarias para mi código. Cuando escribí las pruebas, estaban hinchadas, cosas pesadas que solo me animaban a pensar que solo debería escribir pruebas de unidad cuando sabía que eran necesarias.
Recientemente me animaron a usar Development Driven Development y me pareció una revelación completa. Ahora estoy firmemente convencido de que no tengo el tiempo not para escribir pruebas unitarias.
En mi experiencia, al desarrollar teniendo en cuenta las pruebas, terminas con interfaces más limpias, clases más centradas y amp; módulos y en general más SOLID , código verificable.
Cada vez que trabajo con un código heredado que no tiene pruebas de unidad y tengo que probar algo manualmente, sigo pensando que "esto sería mucho más rápido si este código ya tuviera pruebas de unidad". Cada vez que tengo que intentar agregar una funcionalidad de prueba unitaria a un código con alto acoplamiento, sigo pensando que "esto sería mucho más fácil si se hubiera escrito de una manera desacoplada".
Comparando y contrastando las dos estaciones experimentales que apoyo. Uno ha existido por un tiempo y tiene una gran cantidad de códigos heredados, mientras que el otro es relativamente nuevo.
Al agregar funcionalidad al antiguo laboratorio, a menudo se trata de ir al laboratorio y pasar muchas horas trabajando en las implicaciones de la funcionalidad que necesitan y cómo puedo agregar esa funcionalidad sin afectar ninguna de las otras funciones. El código simplemente no está configurado para permitir pruebas fuera de línea, por lo que prácticamente todo tiene que desarrollarse en línea. Si intentara desarrollar fuera de línea, terminaría con más objetos simulados de lo que sería razonable.
En el laboratorio más nuevo, por lo general puedo agregar funcionalidad al desarrollarlo fuera de línea en mi escritorio, burlándome solo de las cosas que se requieren de inmediato, y luego pasar solo un corto tiempo en el laboratorio, resolviendo los problemas pendientes, no recogido fuera de línea.
TL; DR versión:
Escriba una prueba cuando el costo de escribir la prueba, más el costo de ejecutarla tantas veces como sea necesario, es probable que sea menor que el costo de realizar la prueba manualmente tantas veces como sea necesario.
Sin embargo, recuerde que si usa TDD, es probable que el costo de escribir las pruebas disminuya a medida que mejore, y a menos que el código sea absolutamente trivial, es probable que termine ejecutando las pruebas con más frecuencia de la que espera.