Testy akceptacyjne: jak robicie setup?

0

Piszemy test akceptacyjny, powiedzmy, przelew między dwoma kontami. Zanim przetestujemy sam przelew, musimy doprowadzić system do odpowiedniego stanu:

  • muszą być (co najmniej) dwa konta,
  • (przynajmniej) jedno z kont musi mieć dodatnie saldo - trzeba np. zasymulować wpłatę gotówki

Mamy już napisane i zielone testy na zakładanie konta i odnotowanie wpłaty gotówki. W jaki sposób doprowadzacie system do odpowiedniego stanu przez przetestowaniem przelewu? Na potrzeby dyskusji przyjmijmy, że komunikacja z systemem odbywa się przez HTTP.

a) 2x POST na /account, POST na /deposit, czyli tak, jak robiłby to użytkownik
b) używacie jawnie modułu accounts do stworzenia kont i zasilenia jednego z nich - ale sam przelew to już POST na /transfer. Czyli zamiast symulowania requestów HTTP, zwyczajne wywołanie import accounts; accounts.create_account(name: "account-1")
c) inaczej?

Zakładam, że testy odpalają serwer HTTP i na nim działają. Widziałem testy akceptacyjne, które kompilują binarkę, odpalają ją w osobnym procesie i testują faktycznie uruchomiony program, ale wtedy jest dużo mniejsze pole do popisu + wg mnie to overkill.

2

To zależy :-)

Jak mam kilka testów do zrobienia i całość e2e działa dość szybko to robię testy na poziomie HTTP. Jawne wywołanie modułu tylko to ustawienia stanu początkowego i czasem asercji.

Jak mam mnóstwo scenariuszy to są one jednak głównie robione w warstje logiki, ze względu na czas i wygodę pisania, a tylko kilka testów e2e sprawdza czy wszystkie warstwy działają.

Mam też przypadki, że kompiluje i uruchamian binarkę -> bo ważne jest przetestowanie systemu z różnymi konfiguracjami - parametrami wywołania.

Generalnie jest cała długa lista zależy.

1

Każde z tych podejść ma swoje wady i zalety, i musisz dobrać odpowiednie do tego co akurat robisz.

0
jarekr000000 napisał(a):

Jak mam mnóstwo scenariuszy to są one jednak głównie robione w warstje logiki, ze względu na czas i wygodę pisania

Używasz wtedy test doubles np. do zastąpienia I/O, żeby testy były szybkie, czy działasz na "prawdziwej" infrastrukturze?

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