Un tema recurrente que encontré en mi carrera es ser el nuevo desarrollador en llegar a un equipo y tener rápidamente una desconfianza inherente de la unidad existente y las suites de pruebas de integración.
Durante la entrevista, la gerencia le dice que "apoyan firmemente las pruebas unitarias" y que lo alientan abiertamente. Lo hacen, pero todo lo relacionado con las pruebas en sí es simplemente incorrecto. Como el hecho de que reclaman una cobertura del 100% cuando hay una cobertura de prueba de integración del 100% pero menos del 10% de cobertura de prueba de unidad repetible. Algunos otros problemas que he encontrado:
No hay una indicación clara entre qué es una prueba unitaria y qué es una prueba de integración. Las pruebas unitarias y de integración se mezclan en la misma clase.
Pruebas de integración que tienen dependencias explícitas no declaradas de datos dinámicos muy específicos en la base de datos de un entorno específico.
Las pruebas de integración no transaccionales, básicamente pruebas que pueden o no molestarse en limpiar después de sí mismas, a veces requieren "depuración" manual de la base de datos para que la prueba sea repetible.
Sin burlarse en absoluto, y el código de la aplicación requiere una revisión importante solo para que la burla sea posible. En otras palabras, diseñe sin tener en cuenta las pruebas.
No hay convenciones de nomenclatura claras para ver rápidamente el nombre de una prueba y determinar aproximadamente qué pruebas se están realizando.
Todo esto no quiere decir que TODAS las pruebas sean inútiles o malas, muchas de ellas son bastante buenas y vale la pena mantenerlas, pero a veces parece una búsqueda de oro. A propósito, evitaría ejecutar pruebas solo porque tenía miedo de arruinar la base de datos para mis casos de prueba de caja negra.
Esto esencialmente me ha dado una desconfianza inherente a las pruebas de unidad e integración que no he escrito o revisado personalmente de alguna manera. En algún nivel, si no tiene fe en la calidad de su conjunto de pruebas, realmente no aporta ningún valor al equipo o al proyecto.
¿Qué haces cuando te encuentras en esta situación? ¿Cuál crees que sería el mejor plan de ataque para abordar algo como esto?
¿Deberían refactorizarse todas las pruebas en un esfuerzo monumental que abarque todas las versiones? ¿Debería abandonar la idea de que este proyecto heredado puede tener un día de cobertura de prueba de unidad sólida?