Entonces, tengo un módulo de autenticación que escribí hace algún tiempo. Ahora veo los errores de mi camino y escribo pruebas unitarias para ello. Mientras escribo las pruebas unitarias, me resulta difícil encontrar buenos nombres y buenas áreas para probar. Por ejemplo, tengo cosas como
- Requiere Login_should_redirect_when_not_logged_in
- Requiere inicio de sesión debe pasar a través de cuando se registra
- Login_should_work_when_given_proper_credentials
Personalmente, creo que es un poco feo, aunque parezca "correcto". También tengo problemas para diferenciar entre pruebas simplemente escaneando sobre ellas (tengo que leer el nombre del método al menos dos veces para saber qué acaba de fallar)
Entonces, pensé que tal vez en lugar de escribir pruebas que simplemente prueben la funcionalidad, tal vez escriba un conjunto de pruebas que cubran escenarios.
Por ejemplo, este es un trozo de prueba que se me ocurrió:
public class Authentication_Bill
{
public void Bill_has_no_account()
{ //assert username "bill" not in UserStore
}
public void Bill_attempts_to_post_comment_but_is_redirected_to_login()
{ //Calls RequiredLogin and should redirect to login page
}
public void Bill_creates_account()
{ //pretend the login page doubled as registration and he made an account. Add the account here
}
public void Bill_logs_in_with_new_account()
{ //Login("bill", "password"). Assert not redirected to login page
}
public void Bill_can_now_post_comment()
{ //Calls RequiredLogin, but should not kill request or redirect to login page
}
}
¿Es esto un patrón escuchado? He visto historias de aceptación y cosas así, pero esto es fundamentalmente diferente. La gran diferencia es que estoy ideando escenarios para "forzar" las pruebas. En lugar de intentar manualmente encontrar posibles interacciones que tendré que probar. Además, sé que esto fomenta las pruebas unitarias que no prueban exactamente un método y clase. Aunque creo que esto está bien. Además, soy consciente de que esto causará problemas al menos para algunos marcos de prueba, ya que generalmente asumen que las pruebas son independientes entre sí y el orden no importa (donde sería en este caso).
De todos modos, ¿es este un patrón aconsejable? ¿O sería esto un ajuste perfecto para las pruebas de integración de mi API en lugar de las pruebas de "unidad"? Esto es solo en un proyecto personal, así que estoy abierto a experimentos que pueden o no funcionar bien.
_test
anexo y uso los comentarios para anotar qué resultados espero. Si es un proyecto personal, encuentre un estilo con el que se sienta cómodo y manténgalo.