首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模拟对象设置的最小夹具?

模拟对象设置的最小夹具?
EN

Stack Overflow用户
提问于 2020-10-08 07:08:45
回答 2查看 158关注 0票数 2

我使用的是pytest和5+测试,它们的前五行完全相同。是否可以为重复代码创建设置函数?

代码语言:javascript
运行
复制
@mock.patch('abcde.xyz')
def test_1(mocked_function):
    x_mock = mock.Mock(X)
    x_mock.producer = mock.Mock()
    x_mock.producer.func2 = lambda : None
    mocked_function.return_value = x_mock # xyz() returns x_mock
    ......

@mock.patch('abcde.xyz')
def test_2(mocked_function):
    x_mock = mock.Mock(X)
    x_mock.producer = mock.Mock()
    x_mock.producer.func2 = lambda : None
    mocked_function.return_value = x_mock
    ......

@mock..... # more
EN

回答 2

Stack Overflow用户

发布于 2020-10-08 07:57:01

您应该考虑使用fixture,因为它建议使用传统的设置/拆卸方法。

来自pytest documentation

虽然这些设置/拆卸方法对于那些来自单元测试或鼻部背景的人来说是简单和熟悉的,但您也可以考虑使用pytest的更强大的fixture机制,该机制利用了依赖注入的概念,允许使用更模块化和更具可扩展性的方法来管理测试状态,特别是对于大型项目和功能测试。

对于您的示例-考虑到mocked_function本身是一个fixture -它将是:

代码语言:javascript
运行
复制
@pytest.fixture()
def mock_abcde_xyz(mocker):
    mocker.patch("abcde.xyz")

@pytest.fixture()
@pytest.mark.usefixtures("mock_abcde_xyz")
def patched_mocked_function(mocker, mocked_function):
    x_mock = mocker.Mock(X)
    x_mock.producer = mocker.Mock()
    x_mock.producer.func2 = lambda : None
    mocked_function.return_value = x_mock
    return mocked_function   


def test_1(patched_mocked_function):
    ......

def test_2(patched_mocked_function):
    ......

请注意,我使用了pytest-mock而不是mock,这样您就可以使用'mocker‘fixture了。

如果您不需要pytest-mock,只需执行以下操作:

代码语言:javascript
运行
复制
@pytest.fixture()
@mock.patch('abcde.xyz')
def patched_mocked_function(mocked_function):
    x_mock = mock.Mock(X)
    x_mock.producer = mock.Mock()
    x_mock.producer.func2 = lambda : None
    mocked_function.return_value = x_mock
    return mocked_function   


def test_1(patched_mocked_function):
    ......

def test_2(patched_mocked_function):
    ......
票数 1
EN

Stack Overflow用户

发布于 2020-10-08 07:13:07

可以,您可以实现setUp() (或setUpClass())方法。

另一种方法是实现一个helper函数,就像在任何其他Python代码中一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64253531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档