Las mejores prácticas siempre tienen un propósito, una razón detrás de ellas. Siempre es una buena idea considerar estas razones en su diseño, especialmente cuando está tratando de decidir cómo y qué tan difícil es seguir estas mejores prácticas.
En este caso, el principal razonamiento detrás de hacer que cada prueba de prueba sea una sola cosa es que si la primera falla, la segunda no se probará. Dado que muchos creadores de opinión parecen encontrar mérito al dividir todo en los pedazos más pequeños posibles y envolver cada bit en la mayor hinchazón posible, esto dio a luz a la idea de que cada prueba debe contener una sola afirmación.
No sigas esto a ciegas. Incluso si cada prueba prueba una cosa, aún debe pensar en decidir qué tan grande o pequeña debe ser cada "cosa", y para hacerlo debe tener en cuenta por qué desea que cada prueba pruebe una cosa: para asegurarse un error en la primera cosa no deja la segunda cosa sin probar.
Entonces, debe preguntarse: "¿Realmente necesito esta garantía aquí?"
Digamos que hay un error en el primer caso de prueba: el código de respuesta HTTP no lo es 200
. Entonces comienza a piratear el código, descubre por qué no obtuvo el código de respuesta que debería tener y soluciona el problema. ¿Y ahora qué?
- Si vuelve a ejecutar manualmente la prueba, para verificar que su solución solucionó el problema, debe encontrarse con cualquier otro problema oculto por el primer error.
- Si no lo ejecuta manualmente (¿tal vez porque toma demasiado tiempo?), Y simplemente empuja su solución esperando que el servidor de pruebas automatizadas ejecute todo, entonces es posible que desee colocar diferentes afirmaciones en diferentes pruebas. Los ciclos en este caso son muy largos, por lo que vale la pena hacer el esfuerzo de descubrir tantos errores en cada ciclo.
Hay algunas cosas más a tener en cuenta:
Afirmaciones de dependencias
Sé que las pruebas que describió son solo un ejemplo, y sus pruebas reales probablemente sean más complicadas, por lo que lo que voy a decir puede no ser válido con tanta fuerza en las pruebas reales, pero aún puede ser algo efectivo para que usted puede querer considerarlo.
Si tiene un servicio REST (o cualquier otro protocolo HTTP) que devuelve respuestas en formato JSON, generalmente escribe una clase de cliente simple que le permite usar los métodos REST como métodos regulares que devuelven objetos regulares. Suponiendo que el cliente tiene pruebas separadas para asegurarse de que funciona, ¡habría abandonado las primeras 3 afirmaciones y me quedaría solo 4!
¿Por qué?
- La primera afirmación es redundante: la clase de cliente debería generar una excepción si el código de respuesta HTTP no es 200.
- La segunda afirmación es redundante: si la respuesta está vacía, el objeto resultante será nulo o alguna otra representación de un objeto vacío, y no tendrá que colocar ninguna clave X.
- La tercera afirmación es redundante: si el JSON no es válido, obtendrá una excepción cuando intente analizarlo.
Por lo tanto, no necesita ejecutar todas estas pruebas: solo ejecute la cuarta prueba, y si alguno de los errores que intentan detectar los primeros tres, la prueba fallará con una excepción adecuada antes de que obtenga la afirmación real.
¿Cómo quieres recibir los informes?
Supongamos que no recibe correos electrónicos de un servidor de prueba, sino que el departamento de control de calidad ejecuta las pruebas y le notifica las pruebas fallidas.
Jack de QA llama a tu puerta. Él dice que el primer método de prueba falló, y el método REST devolvió un código de respuesta erróneo. Le agradeces y comienzas a buscar la causa raíz.
Luego viene Jen de QA y dice que el tercer método de prueba falló: el método REST no devolvió un JSON válido en el cuerpo de la respuesta. Le dice que ya está viendo ese método, y cree que lo mismo que provocó que devolviera un código de salida incorrecto también provocó que devolviera algo que no es un JSON válido, y se parece más a un seguimiento de pila de excepción.
Vuelve a trabajar, pero luego llega Jim de QA, diciendo que el cuarto método de prueba falló y que no hay una tecla X en la respuesta ...
Ni siquiera puede buscar la razón porque es difícil ver el código cuando no tiene una pantalla de computadora. Si Jim fuera lo suficientemente rápido, podría haberlo esquivado a tiempo ...
Los correos electrónicos del servidor de prueba son más fáciles de descartar, pero aún así, ¿no preferiría que se le notifique UNA VEZ que algo está mal con el método de prueba y que usted mismo revise los registros de prueba relevantes?