Después de unos años más de codificación y trabajo en proyectos, responderé a mi propia pregunta.
Sí, deberías escribir pruebas unitarias. Las pruebas de extremo a extremo son más difíciles de escribir y frágiles, especialmente si se basan en componentes de la interfaz de usuario.
Si está utilizando un marco como Django o Rails (o sus propias clases personalizadas), debe tener una clase de formulario que se encargará de la validación del formulario. También tendrá clases de visualización que muestran plantillas renderizadas y el formulario y manejan solicitudes GET y POST.
En una prueba de extremo a extremo, usted:
- obtener la url
- rellena el formulario con datos válidos
- publicar el formulario en la url
- verifique que la base de datos se haya actualizado o que se haya ejecutado alguna acción como resultado del formulario válido
Está probando mucho código y su cobertura será bastante buena, pero solo está probando el camino feliz cuando todo sale bien. ¿Cómo se asegura de que el formulario tenga la validación correcta? ¿Qué pasa si ese formulario se usa en varias páginas? ¿Escribes otra prueba de punta a punta?
Intentemos esto nuevamente con pruebas unitarias:
- probar el método GET de vista
- prueba el método POST de vista con un formulario falso / simulado
- prueba el formulario con datos válidos
- prueba el formulario con datos no válidos
- probar los efectos secundarios del formulario
Al usar pruebas unitarias, está probando piezas de código más pequeñas y las pruebas son específicas y más fáciles de escribir. Cuando combina esto con TDD (Test Driven Development) obtiene un código de mayor calidad.
La facilidad de escribir pruebas unitarias no debe descartarse porque cuando está en un proyecto que no tiene pruebas automatizadas, debe comenzar en alguna parte. Comenzar con las pruebas unitarias es más fácil y rápido y le permite comenzar inmediatamente a probar errores en lugar de solo buscar el camino feliz.
was told by a co-worker that the reason for this is that we can rip out and change the underlying implementation at any point as long as the end-to-end tests pass.
- Eso también es cierto para las pruebas unitarias. Me parece que las pruebas de extremo a extremo se están utilizando como excusa para no escribir pruebas unitarias.