I integration stanno testando un sistema, utilizzando solo le API pubbliche. Ho un test che assomiglia a questo:
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...
Fondamentalmente, sto tentando di testare l'intero "flusso" di una singola transazione. Ogni fase del flusso dipende dal passaggio precedente. Poiché mi sto limitando all'API esterna, non posso limitarmi a inserire i valori nel database.
Quindi, o ho un metodo di test davvero lungo che fa 'A; affermare; B; affermare; C; assert ... ", o lo suddivido in metodi di test separati, in cui ogni metodo di test ha bisogno dei risultati del test precedente prima che possa fare la sua cosa:
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.
Penso che questo odori. C'è un modo migliore per scrivere questi test?