Kompozycja akceptacyjnych testów CRUD-owych operacji

0

Czy moglibyście się podzielić doświadczeniami w zakresie technik BDD w kontekście testów funkcjonalnych/akceptacyjnych?
Biorąc na tapetę taki pakiet:

*AddNewBook.feature
*UpdateBookDescription.feature
*RemoveBook.feature

Ficzery 2 i 3 są zależne od wykonania ficzera nr 1. Powstaje problem, w jaki sposób to uniezależnić.
Dodatkowo, częstym wymaganiem przed dodaniem książki, jest stworzenie kategorii.

Do tej pory używałem kilku ścieżek, ale wszystkie miały spore minusy.

#0 Update bazy danych przed uruchomieniem testów. Mam wtedy pewność, że testy są niezależne.
Wady:
Duża komplikacja skryptów uzupełniających bazę. Czasochłonne. Jeżeli testuję aplikację podniesioną na mikroserwisach, z których każdy ma jedną lub więcej baz, poziom komplikacji rośnie.

#1 Przed rozpoczęciem testu, uzupełniam bazę danych korzystając z usług HTTP/SOAP/REST, zależnie od rodzaju aplikacji.
Wady:
Czasochłonność. Samo pisanie testów back-end to kupa kodu.

#2 Porządkuję (komponuje) zależne od siebie operacje w jeden ficzer, w którym scenariusze są od siebie zależne.
Wady:
Zaburzenie dobrych paktyk BDD.
Co wtedy z dodaniem kategorii przed dodaniem książki?

#3 Miks powyższych.

2

1.1. Uzasadnienie:
Given mając książkę ;-) ... czyli musisz ją mieć. Możesz zrobić sobie bazę (może być sql lite w pamięci) na starcie testów i zainicjować ją testowymi danymi dla wszystkich testów od razu, ale to nie jest dobre rozwiązanie (między innymi dlatego, że możesz chcieć mieć pusta bazę na początku jakiegoś testu, a poza tym utrzymanie tego później będzie koszmarem bo się zależności porobią). Lepiej, żeby baza tworzyła się pusta (sql lite lub inna w pamięci, takie testy na prawdziwej bazie będą baaardzo powolne) i przed każdym testem była czyszczona. W samym teście sobie dodasz taką książkę i zapiszesz do bazy (nie musi być przez api/rest, możesz stworzyć obiekt i zapisać np normalnie przez ORM czy jak tam u siebie bazę obsługujesz), to powinna być prosta operacja.
Do każdego testu, który najpierw wymaga istniejących obiektów tworzysz je jako kontekst do wykonania się danego testu.

1

1.1 z wykorzystaniem odpowiedniego mechanizmu, który będzie potrafił uzupełnić te dane za nas w wielu testach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1