Testy opowiadające o biznesie – jak to jest z tym odchudzonym BDD?

Testing

Biblioteki BDD, takie jak Spock i jGiven pomagają tworzyć deskryptywne testy bez obciążenia jakim jest Gherkin. Tyle, że jeśli chcemy zachować choć szczątki koncepcji BDD powinniśmy je pisać językiem… biznesowym. W tym artykule pokażemy jak łatwo z tym popłynąć i jak sobie z tym poradziliśmy.

Bebechy na wierzchu

Za przykład posłuży nam domena usługowa, którą wykorzystujemy na wystąpieniach JUG-owych (więcej w tym poście). Wyobraźmy sobie, że tworzymy test dla use case’a wyceniającego usługi. Jeśli używamy komend i handlerów pierwsze bezwysiłkowe podejście może wyglądać tak:

Niby cacy – w given ustawiamy, jaką komendę wykonamy, w when ją wykonujemy, w then sprawdzamy niezmienniki. A gdzie język biznesu? Gdzieś tam się przebija,  ale nie ma rewelacji… Komendy i handlery to za wiele dla większości „ludzi biznesu”.

Jak wykorzystać Fixture

Więc jak schować to co nieprzyjemne… Wspomóż się Fixture! Dobrze użyte fixture jest w stanie pięknie przypilnować odpowiedniego poziomu abstrakcji. Każda interakcja z nim powinna odbywać się tylko z wykorzystaniem słownictwa biznesowego. Końcowy efekt może być taki:

W tym przypadku wykorzystujemy wbudowany w Spock’a koncept Fixture, który rozumie przez niego klasę całego testu rozszerzającą Specification. Jeśli więc przypilnujemy SRP możemy śmiało użyć pól klasy jako domknięcia przypadku testowego i wypełnić je wszystkie w sekcji given. Wtedy w sekcji when wołamy  metodę  serviceIsFinished()  bez parametrów. Jej implementacja wygląda tak:

Proste? Proste. Wysiłek jest minimalny a efektem jest test, który można pokazać biznesowi. W następnym poście pokażemy jak zrobić podobną rzecz w C# z wykorzystaniem biblioteki naszego autorstwa, gdzie ponadto mamy możliwość konwersji testów na tekst (po to, żeby stały się jeszcze bardziej przystępne dla biznesu).

Podsumowanie

Czy podobnie jak my uważasz, że tego typu refaktoryzacja jest wartościowa? A może było dla Ciebie oczywiste, że tak się robi? Zapraszamy do komentowania i dzielenia się przemyśleniami.


Szymon Janikowski

Zdjęcie Szymon Janikowski
Trener
Deweloper i lider o szerokich horyzontach. Wywodzi się ze środowiska Java ale w życiu robił też Front-end, był Scrum Masterem i pełnił obowiązki Project Manager’a. Interesuje się komunikacją IT z biznesem, architekturą oraz wszelkimi aspektami pracy zespołowej.

Ilość komentarzy: 1

Kamil napisał(a):

W Spock można dodatkowo dodać komentarz do każdej z sekcji.
Ja np. używam ich czasem i mieszam z podejściem jakim pokazałeś tutaj.
Faktycznie język biznesowy jest bardzo ważny w takich testach, ale czasami, to co piszemy jest mocno związane z domeną stricte techniczną i ciężko uniknąć niektórych słów czy zwrotów.

Przykład:
https://github.com/KamilJedrzejuk/weatherinformer/blob/master/src/integrationTest/groovy/com/twitter/kamilyedrzejuq/web/WeatherInfoEndpointTest.groovy

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *