如何模拟对象方法返回值

2024-04-20 04:00:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在拥有的是:

def some_method():
    some_obj = some_other_method()
    # This is what I want to mock return value of:
    some_obj.some_obj_some_method()

@patch('some_package.some_other_method')
def test_some_stuff(some_other_method_patch):
    some_other_method_patch.return_value = SomeObject()

我怎么能做些什么呢_一些方法()返回值为False?在


Tags: oftoobjreturnisvaluedefsome
2条回答

您可以使用patch.object

import mock
import some_obj
@mock.patch.object(some_obj, "some_obj_some_method")
def test_some_stuff(mock_some_obj_some_method):
    mock_some_obj_some_method.return_value = False

patch('some_package.some_other_method')将用Mock替换函数some_other_method。现在需要替换这个mock的方法some_obj_some_method的返回值:

mock.return_value.some_obj_some_method.return_value = False

完整的例子:

^{pr2}$

测试:

from unittest.mock import patch
from some_package import SomeObject, some_method

@patch('some_package.some_other_method')
def test_some_stuff(function_mock):
    function_mock.return_value.some_obj_some_method.return_value = False
    assert not some_method()

测试将按原样通过,将在不修补的情况下引发RuntimeError,并且在没有function_mock.return_value.some_obj_some_method.return_value = False行的情况下使断言失败,因为some_method只返回一个从不FalseMock。在

相关问题 更多 >