Это потому, что автоматические осветительные приборы выполняются до setUp
/ tearDown
методов:
Примечание
Из-за архитектурных различий между двумя платформами, настройки и демонтажа дляunittest
тесты проводятся на этапе call
тестирования вместо стандартных setup
и teardown
этапов pytest
.Это может быть важно понять в некоторых ситуациях, особенно при рассуждении об ошибках.Например, если пакет на основе unittest
выдает ошибки во время установки, pytest
не сообщит об ошибках во время фазы setup
и вместо этого выдаст ошибку во время call
.
Источник
Вы ничего не можете сделать, чтобы обойти это поведение.Вы можете переместить соответствующий код прибора из методов setUp
/ tearDown
, например: если self.flag
используется в приборах с классовой областью, вы можете заменить
class Tests(unittest.TestCase):
def setUp(self):
self.flag = True
def tearDown(self):
self.flag = False
@pytest.fixture(autouse=True)
def myfixture(self):
print(self.flag)
на
class Tests(unittest.TestCase):
@pytest.fixture(autouse=True)
def prepare_flag(self):
self.flag = True
yield
self.flag = False
@pytest.fixture(autouse=True)
def myfixture(self, prepare_flag):
print(self.flag)
Или вы можете переместить весь setUp
соответствующий код из приборов:
class Tests(unittest.TestCase):
def setUp(self):
self.flag = True
@pytest.fixture(autouse=True)
def myfixture(self, somearg):
fn(self.flag, somearg)
становится
class Tests(unittest.TestCase):
def setUp(self):
self.flag = True
fn(self.flag, self._somearg)
@pytest.fixture(autouse=True)
def assign_stuff(self, somearg):
self._somearg = somearg