Пример
Допустим, у вас есть гипотетический API, подобный этому:
import foo
account_name = foo.register()
session = foo.login(account_name)
session.do_something()
Ключевым моментом является то, что для do_something()
вам необходимо зарегистрироваться и войти в систему.
Вот упрощенный, первый проход, набор модульных тестов, который можно написать:
# test_foo.py
import foo
def test_registration_should_succeed():
foo.register()
def test_login_should_succeed():
account_name = foo.register()
foo.login(account_name)
def test_do_something_should_succeed():
account_name = foo.register()
session = foo.login(account_name)
session.do_something()
Проблема
При сбое регистрации все тесты завершаются неудачно иэто делает не очевидным, где настоящая проблема.Похоже, что все сломано, но на самом деле сломана только одна важная вещь.Трудно найти эту некогда важную вещь, если вы не знакомы со всеми тестами.
Вопрос
Как вы структурируете свои модульные тесты, чтобы последующие тесты не выполнялись при включенной функциональности ядра?от чего они зависят?
Идеи
Вот возможные решения, о которых я подумал.
- Обнаружение ошибок в каждом тесте вручную и повышение SkipTest.- Работает, но много ручной, подверженной ошибкам работы.
- Использование генераторов, чтобы не давать последующие тесты, когда первичные проваливаются.- Не уверен, сработает ли это на самом деле (потому что, как я «узнаю», ранее полученный тест не удался).
- Группировка тестов в тестовые классы.Например, это все модульные тесты, которые требуют, чтобы вы вошли в систему. - Не уверен, что это действительно решает мою проблему.Разве не было бы столько же неудач?