Sto testando l' integrazione di un sistema, usando 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 provando a testare l'intero "flusso" di una singola transazione. Ogni passaggio nel flusso dipende dal passaggio precedente eseguito correttamente. Dal momento che mi sto limitando all'API esterna, non posso limitarmi a inserire valori nel database.
Quindi, o ho un metodo di prova davvero lungo che fa `A; asserire; B; asserire; C; assert ... ", oppure lo suddivido in metodi di test separati, in cui ciascun metodo di test necessita dei risultati del test precedente prima di poter eseguire le proprie operazioni:
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 abbia un odore. Esiste un modo migliore per scrivere questi test?