у меня есть испытательную установку так:Выполнить несколько тестов, в одних и тех же менеджеров контекста
def test1():
with Manager1() as m1, m1.get_m2() as m2:
do_test1(m1, m2)
def test2():
with Manager1() as m1, m1.get_m2() as m2:
do_test2(m1, m2)
, который я бегу с nosetests
. Теперь выясняется, что от менеджеров контекста __enter__()
и __exit__()
методы являются дорогостоящими, поэтому я хотел бы изменить в настройках, как:
def test():
with Manager1() as m1, m1.get_m2() as m2:
do_test1(m1, m2)
do_test2(m1, m2)
, но я хотел бы нос по-прежнему сообщать отдельно для каждого теста. Я изучил методы модульного уровня и класса setup()
и teardown()
, но они, похоже, не дают одинаковых гарантий для очистки в случае исключений. Есть ли чистый способ получить nose
для совместной работы с менеджерами контекста?
Спасибо, это кажется точным прецедентом для 'ExitStack' (который находится в пакете contextlib2 для python2). Хорошо работает, чтобы гарантировать, что 'm1 .__ exit __()' все еще вызывается, если 'm1.get_m2()' вызывает исключение, сохраняя при этом все функции 'nosetests'. – Stefan