Как правильно обеспечить изоляцию тестов с помощью модуля Python с отслеживанием состояния?

Проект, над которым я работаю, представляет собой программу для бизнес-логики, упакованную в пакет Python. Идея состоит в том, что различные сценарии или приложения будут импортировать его, инициализировать, а затем использовать.

В настоящее время он имеет метод init () верхнего уровня, который выполняет инициализацию и настраивает различные вещи, хорошим примером является то, что он настраивает SQLAlchemy с подключением к базе данных и сохраняет сеанс SA для последующего доступа. Он хранится в подпакете моего проекта (а именно myproj.model.Session, поэтому другой код может получить рабочий сеанс SA после импорта ''

Короче говоря, это делает мой пакет пакетом с отслеживанием состояния. Я пишу модульные тесты для проекта, и это стабильное поведение создает некоторые проблемы:

  1. тесты должны быть изолированы, но внутреннее состояние моего пакета нарушает эту изоляцию
  2. Я не могу протестировать основной метод init (), поскольку его поведение зависит от состояния
  3. будущие тесты необходимо будет запускать для (еще не написанной) части контроллера с хорошо известным состоянием модели (например, предварительно заполненный sqlite в памяти db )

Следует ли мне как-то реорганизовать мой пакет, потому что текущая структура не является наилучшей (возможной) практикой (tm)? :)

Должен ли я оставить все как есть и каждый раз настраивать / разбирать все? Если я собираюсь достичь полной изоляции, это будет означать полное стирание и повторное заполнение базы данных при каждом тесте, не так ли? Разве это излишество?

Этот вопрос действительно касается общей структуры кода и тестов, но для чего он стоит, я использую нос-1.0 для своих тестов. Я знаю, что плагин Isolate , вероятно, может мне помочь, но я бы хотел получить код прямо перед тем, как делать странные вещи в наборе тестов.

8
задан Luke404 15 April 2011 в 10:56
поделиться