BDD dodaje cykl wokół cyklu TDD.
Zaczynasz więc od zachowania i pozwól, aby kierowały nim testy, a następnie pozwól, by testy napędzały rozwój. Idealnie, BDD jest sterowany przez pewien rodzaj testu akceptacji, ale nie jest to w 100% konieczne. Tak długo, jak zdefiniujesz oczekiwane zachowanie, nic ci nie jest.
Powiedzmy, że piszesz stronę logowania.
Zacznij od szczęśliwej ścieżki:
Given that I am on the login page
When I enter valid details
Then I should be logged into the site
And shown my default page
Ta składnia „biorąc pod uwagę, kiedy i kiedy”, jest powszechna w rozwoju opartym na zachowaniu. Jedną z jego zalet jest to, że mogą być czytane (i ze szkoleniem, pisane) przez osoby, które nie są programistami - to znaczy, że interesariusze mogą przeglądać listę zachowań, które zdefiniowałeś dla pomyślnego ukończenia zadania i sprawdzić, czy to odpowiada ich oczekiwaniom na długo przed wydaniem niekompletnego produktu.
Istnieje język skryptowy, znany jako Korniszon, który wygląda podobnie do powyższego i umożliwia pisanie kodu testowego za klauzulami w tych zachowaniach. Powinieneś poszukać tłumacza opartego na korniszonie dla swojego zwykłego środowiska programistycznego. To nie wchodzi w zakres tej odpowiedzi.
W każdym razie wracając do zachowania. Twoja bieżąca aplikacja jeszcze tego nie robi (jeśli tak, to dlaczego ktoś prosi o zmianę?), Więc test kończy się niepowodzeniem, niezależnie od tego, czy używasz testera, czy po prostu testujesz ręcznie.
Teraz nadszedł czas, aby przejść do cyklu TDD, aby zapewnić tę funkcjonalność.
Niezależnie od tego, czy piszesz BDD, czy nie, twoje testy powinny mieć wspólną składnię. Jedną z najczęstszych jest opisana przez ciebie składnia „powinna”.
Napisz test: ShouldAcceptValidDetails. Przejdź przez cykl Red-Green-Refactor, aż będziesz z niego zadowolony. Czy teraz przechodzimy test zachowania? Jeśli nie, napisz kolejny test: ShouldRedirectToUserDefaultPage. Red-Green-Refactor, aż będziesz szczęśliwy. Umyj, spłucz, powtarzaj, aż spełnisz kryteria określone w zachowaniu.
Następnie przechodzimy do następnego zachowania.
Given that I am on the login page
When I enter an incorrect password
Then I should be returned to the login page
And shown the error "Incorrect Password"
Teraz nie powinieneś był uprzedzać tego, aby przekazać swoje wcześniejsze zachowanie. W tym momencie powinieneś zaliczyć ten test. Wróć więc do swojego cyklu TDD.
I tak dalej, aż będziesz mieć swoją stronę.
Gorąco polecam The Rspec Book, aby dowiedzieć się więcej o BDD i TDD, nawet jeśli nie jesteś programistą Ruby.