En nuestro grupo de productos, apuntamos a un 50-70% de cobertura de código de pruebas unitarias y un 90% + de cobertura de pruebas unitarias y automatización de pruebas combinadas. El tiempo típico presupuestado en las pruebas de unidades de escritura es de aproximadamente 1 día por cada función que demore entre 3 y 4 días en codificar los encabezados. Pero eso puede variar con muchos factores.
La cobertura del código del 99% es excelente. Las pruebas unitarias son geniales. ¿Pero el 99% de cobertura de código solo de pruebas unitarias? Me resulta difícil creer que pueda obtener tanta cobertura solo con las pruebas unitarias .
Para el caso en el que pasó 3 días escribiendo pruebas para una clase que, de lo contrario, tomó 1 día para implementar. No especificó por qué tardó tanto o compartió ningún código. Por especulaciones, supongo que en realidad no estaba escribiendo una verdadera prueba de unidad para su clase, sino que en realidad estaba escribiendo la automatización de la prueba . Y en realidad no hay nada de malo en eso, siempre y cuando reconozca la diferencia entre los dos tipos diferentes de pruebas.
Pero dijiste que los tres días de redacción de exámenes eran solo para una sola clase. Quizás la clase en sí no fue diseñada para pruebas unitarias. ¿La clase implementa la interfaz de usuario? ¿Redes? Archivo de E / S? Si es así, es posible que haya terminado escribiendo más código para probar el tiempo de ejecución de Java que su lógica empresarial que interactúa con el tiempo de ejecución.
TDD te hace pensar en términos de interfaces e interfaces para dependencias. Esa clase única que implementa la interfaz de usuario, la red y el archivo / io para una sola característica podría ser mejor dividida en varias clases: una para la red, otra para el archivo / io y la interfaz de usuario dividida en un diseño de modelo-visor-controlador. Luego puede implementar pruebas apropiadas para cada uno con objetos simulados simples para las dependencias. Por supuesto, todo esto lleva más tiempo. Entonces, en lugar de 1 día para codificar y 3 días para escribir pruebas, este tipo de diseño puede requerir 3 días de codificación y 1 día de pruebas de escritura. Pero el código será mucho más fácil de mantener y reutilizar.