gpt4 book ai didi

python - pytest-mock assert_called_with 类函数失败

转载 作者:太空狗 更新时间:2023-10-30 02:53:18 25 4
gpt4 key购买 nike

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

源代码/main.py

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

    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)

失败并出现以下错误

    ======================================================================================== 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

最佳答案

return_value 或 side_effect 必须在补丁函数生效前设置

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)

Correction of mistake, the assert should not be used together with assert_called_with, they are independent assert.

    assert val == 30
mocked_internal_func.assert_called
ma.internal_func.assert_called_with(20)
mocked_internal_func.assert_called_with(20)

关于python - pytest-mock assert_called_with 类函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50165477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com