Python unittest выполняет код для каждого набора/класса в иерархии?

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

Например, у меня есть такая иерархия тестовых случаев:

TreeBase 
  <- PineTests
  <- NeedleTests
  <- ConeTests

Все тесты семейства TreeBase используют дорогостоящую инициализацию. Однако это должно быть сделано для каждого производного класса отдельно (состояние уникально для наиболее производного TestCase). Итак, я хочу такой поток:

  1. Вызов PineTests::setup
  2. Вызов тестов PineTests
  3. Вызов PineTests::teardown
  4. Повторите для NeedleTests, ConeTests

person edA-qa mort-ora-y    schedule 24.02.2014    source источник
comment
можете поделиться своей рабочей настройкой?   -  person oz123    schedule 24.02.2014
comment
@Oz123, это помогает?   -  person edA-qa mort-ora-y    schedule 24.02.2014


Ответы (1)


Модули можно использовать в качестве тестовых наборов. Сгруппируйте тестовые функции в модули и используйте функции setUpModule и tearDownModule. Это не совсем та файловая структура, которую мне бы хотелось, но она работает.

Классы, производные от TestCase, все еще можно использовать в этой настройке, вам не нужно возвращаться к использованию простых функций. Однако лучше сохранить общую функциональность внутри глобального вспомогательного класса. Таким образом, вам не нужно слишком полагаться на unittest.

person edA-qa mort-ora-y    schedule 24.02.2014