Ich habe also ein Authentifizierungsmodul, das ich vor einiger Zeit geschrieben habe. Jetzt sehe ich die Fehler auf meinem Weg und schreibe Unit-Tests dafür. Während ich Unit-Tests schreibe, fällt es mir schwer, gute Namen und gute Testbereiche zu finden. Zum Beispiel habe ich Dinge wie
- RequiresLogin_should_redirect_when_not_logged_in
- RequiresLogin_should_pass_through_when_logged_in
- Login_soll_arbeiten_wenn_proper_credentials_gegeben werden
Persönlich finde ich es ein bisschen hässlich, obwohl es "richtig" zu sein scheint. Ich habe auch Probleme, zwischen Tests zu unterscheiden, indem ich sie nur scanne (ich muss den Methodennamen mindestens zweimal lesen, um zu wissen, was gerade fehlgeschlagen ist).
Also dachte ich mir, anstatt Tests zu schreiben, die nur die Funktionalität testen, schreiben wir vielleicht eine Reihe von Tests, die Szenarien abdecken.
Dies ist zum Beispiel ein Teststub, den ich mir ausgedacht habe:
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
}
}
Ist das ein gehörtes Muster? Ich habe Akzeptanzgeschichten und ähnliches gesehen, aber das ist grundlegend anders. Der große Unterschied besteht darin, dass ich mir Szenarien überlege, um die Tests zu "erzwingen". Anstatt manuell zu versuchen, mögliche Interaktionen zu finden, die ich testen muss. Ich weiß auch, dass dies Unit-Tests fördert, die nicht genau eine Methode und Klasse testen. Ich finde das aber OK. Ich bin mir auch bewusst, dass dies zumindest für einige Test-Frameworks Probleme verursachen wird, da diese normalerweise davon ausgehen, dass die Tests unabhängig voneinander sind und die Reihenfolge keine Rolle spielt (wo dies in diesem Fall der Fall wäre).
Wie auch immer, ist das überhaupt ein ratsames Muster? Oder wäre dies eine perfekte Lösung für Integrationstests meiner API und nicht für "Unit" -Tests? Dies ist nur ein persönliches Projekt, daher bin ich offen für Experimente, die gut oder schlecht laufen können.
_test
angehängten und benutze Kommentare, um zu notieren, welche Ergebnisse ich erwarte. Wenn es sich um ein persönliches Projekt handelt, finden Sie einen Stil, mit dem Sie sich wohl fühlen, und bleiben Sie dabei.