Temat: Coś przystępnego o BDD
Wszelkiego rodzaju xDD będąc związane z ruchem Agile zakładają ścisłą kooperację pomiędzy klientem i programistą. Dlatego BDD dotyczy zarówno klienta jak i programisty.
W BDD chodzi bardziej o
testy funkcjonalne a w TDD bardziej o testy jednostkowe. Zresztą, samo TDD jako takie jest bardziej techniczną wersją BDD.
Zaś zachowanie, o którym rozmawiamy, jest określone w
acceptance criteria. Jeśli system spełnia wszystkie acceptance criteria, to zachowuje się poprawnie, jeśli nie spełnia choć jednego - system nie jest w porządku.
Tworzymy pewne szablony, aby opisać w nich acceptance criteria. Te szablony opierają się na zasadzie: G/W/T lub A/A/A (Given When Then lub Arrange Act Assert). Wszelkie inaczej napisane testy w zasadzie będą skutkowały tym, że czytający je nie będą wiedzieć:
1) o co chodzi w teście
2) jakie dane są używane do testów
3) co jest testowane
4) jaki skutek został stwierdzony
Wszystkie nazwy metod testujących powinny zaczynać się od
should i określać już w nazwie co powinno się stać.
Dla przykładu takie story w scenariuszu według schematy G/W/T :
TITLE: Klient chce wybrać gotówkę
GIVEN (kto jest bohaterem i jak się zaczyna historia, jakim wydarzeniem): Ja, jako klient podchodzę do bankomatu,
WHEN (czego bohater chce i w jakich okolicznościach): chcę wybrać gotówkę z bankomatu,
THEN (co skutkuje, dzięki czemu): dzięki czemu nie muszę czekać w kolejce w banku //opisujemy korzyść jaka zachodzi dla nas
Szablon taki pozwala podzielić story na trzy części i zautomatyzować je w teście.
Przykład dla A/A/A:
TITLE: Przyjmujący zamówienie wysyła e-mail o zamówieniu do sprzedawcy
ARRANGE (zrób coś takiego...): Przygotuj dane wejściowe do maila
ACT (ponieważ zachowanie takie ...): Ponieważ wysłanie maila z zamówieniem
ASSERT (powinno skutkować tak...): Powinno skutkować otrzymaniem od sprzedawcy e-maila (Assert if seller has received email)
Jak widać GWT i AAA są bardzo do siebie podobne. When i Act opisują zachowanie. Given i Arrange - określają początek historii i dane wejściowe, Assert określa wynik testu, Then opisuje osiągnięte korzyści.