Seguro. Algunas personas dicen que "cualquier prueba es mejor que ninguna prueba". Estoy totalmente en desacuerdo: las pruebas mal escritas atascan su tiempo de desarrollo y terminan perdiendo días arreglando pruebas "rotas" porque, en primer lugar, no eran buenas pruebas unitarias. Para mí en este momento, las dos cosas en las que me estoy enfocando para hacer que mis pruebas sean valiosas, en lugar de una carga, son:
Mantenibilidad
Debe probar el resultado ( lo que sucede), no el método ( cómo sucede). Su configuración para la prueba debe estar tan desacoplada de la implementación como sea posible: solo configure los resultados para llamadas de servicio, etc., que sean absolutamente necesarios.
- Use un marco burlón para asegurarse de que sus pruebas no dependan de nada externo
- Favorece los trozos sobre los simulacros (si su marco los distingue) siempre que sea posible
- No hay lógica en las pruebas! Los ifs, interruptores, para cada uno, casos, try-catches, etc. son todos grandes no-nos, ya que pueden introducir errores en el código de prueba en sí
Legibilidad
Está bien permitir un poco más de repetición en sus pruebas, lo que normalmente no permitiría en su código de producción, si las hace más legibles. Simplemente equilibre esto con las cosas de mantenimiento anteriores. ¡Sea explícito en lo que está haciendo la prueba!
- Trate de mantener un estilo de "organizar, actuar, afirmar" para sus pruebas. Esto separa su configuración y expectativas del escenario, de la acción que se realiza y del resultado que se afirma.
- Mantenga una afirmación lógica por prueba (si el nombre de su prueba contiene "y", es posible que deba dividirla en varias pruebas)
En conclusión, debe estar muy preocupado con las pruebas "malolientes": pueden terminar siendo una pérdida de tiempo, sin proporcionar ningún valor.
Usted ha dicho:
Las pruebas unitarias generalmente requieren varios "trucos malolientes", como las funciones de troquelado.
Parece que definitivamente podría hacer con la lectura de algunas técnicas de Prueba de Unidad, como el uso de un marco de Mocking, para hacer que su vida sea mucho más fácil. Recomiendo encarecidamente The Art of Unit Testing , que cubre lo anterior y mucho más. Lo encontré esclarecedor después de luchar con pruebas mal escritas, imposibles de mantener y "malolientes" durante mucho tiempo. ¡Es una de las mejores inversiones de tiempo que he hecho este año!