如何修补Python中初始化类的返回值?

问题描述 投票:0回答:1

我试图将初始化对象的值覆盖为单元测试的预设值。我长时间使用模拟库和 pytest。

这是演示问题的代码:

def function_to_test():
    new_object = Object(arg1, arg2, arg3)

    return func1(new_object)

对于这个函数,我想测试对象是否用

arg1
arg2
arg3
初始化,但我也想修补
new_object
的值,这样我就可以测试
func1
是使用特定参数进行调用。

我当前的测试是这样的:

def test_function_to_test(mocker):
    mocker.patch(Object.__init__, return_value=None)
    mocker.patch(func1)

    function_to_test()
    
    Object.__init__.assert_called_once_with(arg1, arg2, arg3)
    
    mock_object = "test"

    func1.assert_called_once_with(mock_object) # this line fails

对于要传递的最后一行,需要将 new_object 的值修补为预设值。我尝试更改

return_value
来修补初始化程序,但由于
__init__
函数不返回任何内容,因此出现错误。有没有办法让“Object”的初始化返回预定义的值?

python testing mocking pytest
1个回答
0
投票

不要设置返回值,只让它生成mock。然后在后续断言中使用返回值。它看起来像这样:

from mymod import function_to_test

def test_function_to_test(mocker):
    mock_Object = mocker.patch("mymod.Object")
    mock_func1 = mocker.patch("mymod.func1")
    function_to_test()
    mock_Object.assert_called_once_with(arg1, arg2, arg3)
    mock_func1.assert_called_once_with(mock_Object.return_value)
© www.soinside.com 2019 - 2024. All rights reserved.