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.