Я тестирую интеграционную систему, используя только общедоступные API. У меня есть тест, который выглядит примерно так:
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...
По сути, я пытаюсь проверить весь «поток» одной транзакции. Каждый шаг в потоке зависит от предыдущего успешного шага. Поскольку я ограничиваю себя внешним API, я не могу просто заносить значения в базу данных.
Итак, у меня есть один действительно длинный метод тестирования, который выполняет `A; утверждают; B; утверждают; C; assert ... ", или я делю его на отдельные методы тестирования, где каждому методу теста нужны результаты предыдущего теста, прежде чем он сможет выполнить свою задачу:
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.
Я думаю, что это пахнет. Есть ли лучший способ написать эти тесты?