2009-05-28 11 views
21

Mam zamiar używać BDD (Behavior Driven Design) po raz pierwszy i staram się przyzwyczaić do tego innego sposobu podejścia do problemu.Jak pisać historie/scenariusze w BDD (Behavior Driven Design)

Czy możesz podać jakieś historie/scenariusze, które napiszesz, powiedzmy prostą aplikację do logowania przy użyciu BDD?

Na przykład, z tego co czytałem, to wydaje się, że jest dobry:

Gdy użytkownik wprowadzi nieprawidłową userid/hasło, a następnie wyświetli komunikat o błędzie .

W przeciwieństwie do:

sprawdzania poprawności identyfikatora i hasła wyszukując pasujący rekord w bazie .

Odpowiedz

14

Dan North ma doskonałe rady dotyczące pisania opowiadań. "Dan North- What's in a Story?"

Chciałbym również rzucić okiem na niektóre prace wykonane wokół Cucumber, ponieważ spędzili dużo czasu, myśląc o tym, jak napisać te historie w zrozumiały i wykonywalny sposób.

7

Artykuł Dana Northa, o którym wspomniał Kiewin, jest świetny.

Pamiętaj jednak, że istnieją "historie użytkowników", które w rzeczywistości powinny być napisane lub przynajmniej zebrane od klienta/użytkowników. Są to bardziej "historie typu" jako, chcę, więc ".

Następnie są kryteria akceptacji, które określają, w jaki sposób i kiedy opowieść użytkownika zostanie uznana za spełnioną. To jest tak, jak napisałeś w swoim poście: "Kiedy x, powinno y."

Istnieje wiele pokryć się z tym, co nazywam "historiami systemowymi" w moim systemie zarządzania projektami i "specyfikacjami" w moich testach, które określają zachowania, których użytkownik może nie znać, ale opisują interakcję między twoimi klasami. Historia systemu: "Kiedy LoginHandler otrzyma login i hasło, powinien zweryfikować dane za pomocą LoginValidator." Specyfikacja:

[TestFixture] 
public class When_the_login_handler_is_given_a_login_and_password 
{ 
    constant string login = "jdoe"; 
    constant string password = "password"; 
    static LoginValidator loginValidator; 

    context c =() => loginValidator = an<ILoginValidator>; 

    because b =() => sut.Validate(login, password); 

    it should_validate_the_data_with_a_LoginValidator = 
    () => loginValidator.was_told_to(x => x.DoValidation(login, password)); 
} 

Nevermind składnia badania, można zobaczyć, że sam tekst specyfikacja zawarta jest w nazwie klasy testy i nazwy metody. Co więcej, test/spec testuje zachowanie klas. Kiedy takie testy przechodzą na proste historie użytkowników, spełnione są kryteria akceptacji.