Quindi, ho un modulo di autenticazione che ho scritto qualche tempo fa. Ora vedo gli errori nel mio modo e scrivo i test unitari. Durante la stesura dei test unitari, ho difficoltà a trovare nomi validi e buone aree da testare. Ad esempio, ho cose come
- RequiresLogin_should_redirect_when_not_logged_in
- RequiresLogin_should_pass_through_when_logged_in
- Login_should_work_when_given_proper_credentials
Personalmente, penso che sia un po 'brutto, anche se sembra "corretto". Ho anche difficoltà a distinguere tra i test semplicemente scansionandoli (devo leggere il nome del metodo almeno due volte per sapere cosa è appena fallito)
Quindi, ho pensato che forse invece di scrivere test che puramente testano la funzionalità, forse scrivere una serie di test che coprono gli scenari.
Ad esempio, questo è uno stub di prova che ho trovato:
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
}
}
Questo è sentito parlare di pattern? Ho visto storie di accettazione e simili, ma questo è fondamentalmente diverso. La grande differenza è che sto inventando scenari per "forzare" i test. Piuttosto che cercare manualmente di trovare possibili interazioni che dovrò testare. Inoltre, so che questo incoraggia i test unitari che non testano esattamente un metodo e una classe. Penso che questo sia OK però. Inoltre, sono consapevole che ciò causerà problemi per almeno alcuni framework di test, poiché di solito presuppongono che i test siano indipendenti l'uno dall'altro e che l'ordine non sia importante (dove sarebbe in questo caso).
Ad ogni modo, questo è uno schema consigliabile? O sarebbe perfetto per i test di integrazione della mia API piuttosto che come test "unitari"? Questo è solo un progetto personale, quindi sono aperto a esperimenti che possono o non possono andare bene.