Я інтегрую тестування системи, використовуючи лише загальнодоступні 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; стверджувати; Б; стверджувати; C; стверджувати ... ", або я розбиваю його на окремі методи випробувань, де кожному методу тестування потрібні результати попереднього тесту, перш ніж він може зробити своє:
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.
Я думаю, це пахне. Чи є кращий спосіб написати ці тести?