class MyTestCase(unittest.Testcase):
def setUp(self):
self.something = True
@pytest.fixture(autouse=True)
def MyTestMethod(self, frozentime):
fn(self.something) # self.something is NOT defined
Run Code Online (Sandbox Code Playgroud)
如果我使用,@pytest.fixture(autouse=True)我最终会从 PyTest 中得到一些奇怪的行为。setUpPyTest 没有在测试方法之前调用我的方法,而是跳过setUp和 调用MyTestMethod,就好像它是一个 PyTest MyTestFunction,这当然不能很好地工作。
如何MyTestMethod在frozentime不忽略setUp应该首先调用的方法的情况下使用夹具。
class MyTestCase(unittest.Testcase):
def setUp(self):
self.something = True
#@pytest.fixture(autouse=True)
def MyTestMethod(self, frozentime): # Fails on call, because it needs too many arguments.
fn(self.something)
Run Code Online (Sandbox Code Playgroud)
\n\n
这是因为自动使用装置是在setUp/tearDown方法之前执行的:
\n\n\n\n\n笔记
\n\n由于两个框架之间的架构差异,
\nunittest基于 的测试的设置和拆卸是在call测试阶段而不是在pytest\xe2\x80\x98s 标准setup和teardown阶段中执行的。在某些情况下,理解这一点可能很重要,特别是在推理错误时。例如,如果unittest基于 的套件在安装期间出现错误,pytest则在其阶段不会报告任何错误setup,而是会在 期间引发错误call。
您无法采取任何措施来解决此问题。您可以将与固定装置相关的代码移出setUp/tearDown方法,例如:如果self.flag在类范围的固定装置中使用,则可以替换
class Tests(unittest.TestCase):\n\n def setUp(self):\n self.flag = True\n\n def tearDown(self):\n self.flag = False\n\n @pytest.fixture(autouse=True)\n def myfixture(self):\n print(self.flag)\nRun Code Online (Sandbox Code Playgroud)\n\n和
\n\nclass Tests(unittest.TestCase):\n\n @pytest.fixture(autouse=True)\n def prepare_flag(self):\n self.flag = True\n yield\n self.flag = False\n\n @pytest.fixture(autouse=True)\n def myfixture(self, prepare_flag):\n print(self.flag)\nRun Code Online (Sandbox Code Playgroud)\n\n或者您可以从装置中移动所有setUp相关代码:
class Tests(unittest.TestCase):\n\n def setUp(self):\n self.flag = True\n\n @pytest.fixture(autouse=True)\n def myfixture(self, somearg):\n fn(self.flag, somearg)\nRun Code Online (Sandbox Code Playgroud)\n\n变成
\n\nclass Tests(unittest.TestCase):\n\n def setUp(self):\n self.flag = True\n fn(self.flag, self._somearg)\n\n @pytest.fixture(autouse=True)\n def assign_stuff(self, somearg):\n self._somearg = somearg\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2088 次 |
| 最近记录: |