Testuję integrację systemu, używając tylko publicznych interfejsów API. Mam test, który wygląda mniej więcej tak:
def testAllTheThings():
email = create_random_email()
password = create_random_password()
ok = account_signup(email, password)
assert ok
url = wait_for_confirmation_email()
assert url
ok = account_verify(url)
assert ok
token = get_auth_token(email, password)
a = do_A(token)
assert a
b = do_B(token, a)
assert b
c = do_C(token, b)
# ...and so on...
Zasadniczo próbuję przetestować cały „przepływ” pojedynczej transakcji. Każdy krok w przepływie zależy od powodzenia poprzedniego kroku. Ponieważ ograniczam się do zewnętrznego interfejsu API, nie mogę po prostu wprowadzać wartości do bazy danych.
Tak więc albo mam jedną naprawdę długą metodę testową, która wykonuje `A; zapewniać; B; zapewniać; DO; asert ... ”, lub podzielę to na osobne metody testowe, gdzie każda metoda testowa potrzebuje wyników z poprzedniego testu, zanim będzie w stanie wykonać swoje zadanie:
def testAccountSignup():
# etc.
return email, password
def testAuthToken():
email, password = testAccountSignup()
token = get_auth_token(email, password)
assert token
return token
def testA():
token = testAuthToken()
a = do_A(token)
# etc.
Myślę, że to pachnie. Czy istnieje lepszy sposób na napisanie tych testów?