我正在使用 pytest。我有一个测试,其中涉及检查在发生某些事情时是否未进行导入。这很容易制作,但是当测试在 pytest 中运行时,它会在与许多其他测试相同的进程中运行,这些测试可能会预先导入那个东西。
是否有某种方法可以将测试标记为在其自己的进程中运行?理想情况下会有某种装饰器,比如
@pytest.mark.run_in_isolation
def test_import_not_made():
....
但我还没有找到类似的东西。
最佳答案
我不知道允许将测试标记为在其自己的进程中运行的 pytest 插件。我要检查的两个是 pytest-xdist
和 ptyest-xprocess
(这里是 a list of pytest plugins ),尽管它们看起来不像你想要的那样。
我会选择不同的解决方案。我假设您检查模块是否被导入的方式是它是否在 sys.modules
中。因此,我会确保 sys.modules
在测试运行之前不包含您感兴趣的模块。
这样的事情将确保 sys.modules
在测试运行之前处于干净状态。
import sys
@pytest.fixture
def clean_sys_modules():
try:
del sys.modules['yourmodule']
except KeyError:
pass
assert 'yourmodule' not in sys.modules # Sanity check.
@pytest.mark.usefixtures('clean_sys_modules')
def test_foo():
# Do the thing you want NOT to do the import.
assert 'yourmodule' not in sys.modules
关于python - 将测试标记为在独立进程中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45462374/