首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pytest-模拟assert_called_with类函数失败

pytest-模拟assert_called_with类函数失败
EN

Stack Overflow用户
提问于 2018-05-04 00:24:37
回答 1查看 10.3K关注 0票数 12

我计划使用pytest和pytest- code来验证Python代码。作为一个新手,编写了一个示例代码来验证类上的模拟并看到失败。我想知道哪里出了问题。

src/main.py

代码语言:javascript
复制
class Main(object):
    def __init__(self, my_var=None):
        self.var = my_var

    def internal_func(self, var=10):
        my_var = var + 20
        return my_var

    def test_func(self):
        val = self.internal_func(20)
        return val + 40

测试/test_main.py

代码语言:javascript
复制
    import pytest
    from pytest_mock import mocker
    from src.main import Main

    def new_func(cls, *args, **kwargs):
        return 2

    def test_main_mock(mocker):
        mocker.patch.object(Main, 'internal_func')
        val = Main().test_func()
        assert Main.internal_func.assert_called_with(20)

如果出现以下错误,它将失败

代码语言:javascript
复制
    ======================================================================================== FAILURES ========================================================================================
    _____________________________________________________________________________________ test_main_mock _____________________________________________________________________________________

    mocker = <pytest_mock.MockFixture object at 0x7f34f490d8d0>

        def test_main_mock(mocker):
            mocker.patch.object(Main, 'internal_func')
            main = Main()
            val = main.test_func()
        #    assert val == 80
    >       assert Main.internal_func.assert_called_with(20)
    E       AssertionError: assert None
    E        +  where None = <bound method MagicMock.wrap_assert_called_with of <MagicMock name='internal_func' id='139865418160784'>>(20)
    E        +    where <bound method MagicMock.wrap_assert_called_with of <MagicMock name='internal_func' id='139865418160784'>> = <MagicMock name='internal_func' id='139865418160784'>.assert_called_with
    E        +      where <MagicMock name='internal_func' id='139865418160784'> = Main.internal_func

    tests/test_main.py:13: AssertionError
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-04 03:25:02

必须在修补的功能生效之前设置return_value或side_effect。

代码语言:javascript
复制
def test_main_mock(mocker):
    # mock internal_func of class Main
    mocked_internal_func = mocker.patch.object(Main, 'internal_func')
    # assign return_value or side_effect
    mocked_internal_func.return_value = -10
    # class instance
    ma = Main()
    val = ma.test_func()

    assert ma.internal_func.assert_called_with(20)

纠正错误时,断言不应与assert_called_with一起使用,它们是独立的断言。

代码语言:javascript
复制
    assert val == 30
    mocked_internal_func.assert_called
    ma.internal_func.assert_called_with(20)
    mocked_internal_func.assert_called_with(20)
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50165477

复制
相关文章

相似问题

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