Definitivamente. Algunas personas dicen que "cualquier prueba es mejor que ninguna prueba". Estoy totalmente en desacuerdo: las pruebas mal escritas atascan tu tiempo de desarrollo y terminas perdiendo días reparando pruebas "rotas" porque no eran buenas pruebas de unidad en primer lugar. Para mí en este momento, las dos cosas en las que me estoy enfocando para que mis exámenes sean valiosos, en lugar de una carga, son:
Capacidad de mantenimiento
Debería probar el resultado ( qué sucede), no el método ( cómo sucede). Su configuración para la prueba debe ser lo más desconectada posible de la implementación: solo configure los resultados de las llamadas de servicio, etc. que sean absolutamente necesarios.
- Use un marco de burla para asegurarse de que sus pruebas no dependan de nada externo
- Favorece los stubs sobre los simulacros (si tu marco los distingue entre ellos) siempre que sea posible
- No hay lógica en las pruebas! Los ifs, switches, for-eaches, casos, try-catches, etc. son todos grandes "no-nos", ya que pueden introducir errores en el propio código de prueba.
Legibilidad
Está bien permitir un poco más de repetición en tus pruebas, lo que normalmente no permitirías en tu código de producción, si las hace más legibles. Solo equilibra esto con las cosas de mantenimiento arriba. ¡Sea explícito en lo que está haciendo la prueba!
- Intente mantener un estilo de "organizar, actuar, afirmar" para sus pruebas. Esto separa su configuración y las expectativas del escenario, de la acción que se realiza y el resultado que se afirma.
- Mantenga una aseveración lógica por prueba (si el nombre de su prueba tiene "y" en ella, es posible que tenga que dividirla en varias pruebas)
En conclusión, deberías estar muy preocupado con las pruebas "malolientes": pueden acabar siendo una pérdida de tiempo, sin ningún valor.
Has dicho:
La prueba de la unidad por lo general requiere varios "hacks malolientes", como funciones de aplastamiento.
Parece que definitivamente podrías hacerlo leyendo algunas técnicas de Pruebas unitarias, como el uso de un marco de Mocking, para que tu 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 haber luchado con pruebas mal escritas, que no se pueden mantener, "malolientes" durante mucho tiempo. ¡Es una de las mejores inversiones de tiempo que he hecho este año!