Quindi, ho un modulo di autenticazione che ho scritto qualche tempo fa. Ora sto vedendo gli errori sulla mia strada e sto scrivendo test unitari per questo. Mentre scrivo unit test, faccio fatica a trovare buoni nomi 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 problemi a distinguere tra i test semplicemente scansionandoli (devo leggere il nome del metodo almeno due volte per sapere cosa è fallito)
Quindi, ho pensato che forse invece di scrivere test che puramente testassero la funzionalità, forse scrivere una serie di test che coprono scenari.
Ad esempio, questo è uno stub di prova che ho ideato:
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 un sentito parlare di modello? Ho visto storie di accettazione e simili, ma questo è fondamentalmente diverso. La grande differenza è che sto inventando scenari per "forzare" i test. Invece di provare manualmente a inventare possibili interazioni che dovrò testare. Inoltre, so che questo incoraggia i test unitari che non testano esattamente un metodo e una classe. Penso che sia OK però. Inoltre, sono consapevole che ciò provocherà problemi per almeno alcuni framework di test, in quanto di solito presuppongono che i test siano indipendenti l'uno dall'altro e l'ordine non importa (dove in questo caso sarebbe).
Ad ogni modo, questo è uno schema consigliabile a tutti? Oppure sarebbe perfetto per i test di integrazione della mia API piuttosto che come test "unitari"? Questo è solo in un progetto personale, quindi sono aperto a esperimenti che possono o non possono andare bene.
_test
testerò con allegato e uso i commenti per notare quali risultati mi aspetto. Se è un progetto personale, trova un certo stile con cui ti senti a tuo agio e atteniti a quello.