我在寻找如何使用pytest-mocker插件的会话范围的“会话-模拟”插件的示例。
很清楚如何修改文档提供的示例,以便在特定的测试中使用它:
def test_foo(session_mocker):
session_mocker.patch('os.remove')
etc...但是我很困惑这个全球性的装置应该在什么地方以及如何初始化。例如,假设我想在所有测试中模拟"os.remove“。我是否在confftest.py中设置了它,如果是的话,我该如何做?
发布于 2021-03-03 23:02:54
您可以在有会话范围的固定设备中使用它。最好的地方是conftest.py。这主要是为了让其他程序员清楚地看到这个固定设备的存在以及它可能在做什么。这一点很重要,因为这个夹具会影响其他测试,这些测试可能不一定知道这个夹具,甚至不想要它。
我不建议在会话期间嘲笑某事。测试,类甚至模块,是的。但不是会议。
例如,以下测试test_normal是否通过或失败取决于test_mocked是否在同一会话中运行。因为它们位于同一个“文件”中,所以发现问题要容易得多。但是,这些测试可以位于不同的测试文件中,这些文件并不是相关的,但是如果两个测试都在同一个会话中运行,那么问题就会发生。
import pytest
# could be in conftest.py
@pytest.fixture(scope='session')
def myfixture(session_mocker):
session_mocker.patch('sys.mymock', create=True)
def test_mocked(myfixture):
import sys
assert hasattr(sys, 'mymock')
def test_normal():
import sys
assert not hasattr(sys, 'mymock')相反,只需创建一个测试、类或模块的作用域,并将其直接包含在测试文件中即可。这样,行为就包含在需要它的一组测试中。模拟的创建成本很低,因此为每个测试重新创建模拟并不是什么大事。它甚至可能是有益的,因为模拟将被重置为每个测试。
为那些设置昂贵且没有状态,或者测试不改变其状态的事物保存会话夹具(例如。用作模板的数据库,用于创建每个测试将对其运行的新数据库)。
https://stackoverflow.com/questions/66465623
复制相似问题