Python 模拟对象的函数的模拟返回值

Python 模拟对象的函数的模拟返回值,python,Python,我正在编写单元测试。我想模拟对模拟对象调用的函数的结果 我有一个名为OwnerAnalyzer的类,它在构造函数中接受一个名为client的对象。使用此客户端,我可以获取所有者详细信息 在我的单元测试中,我希望通过此客户端的模拟,并通过其get\u owners方法获得模拟结果 以下是我到目前为止的情况: def test_get_owner_details(mock_datetime, monkeypatch): mock_datetime.now.return_value.isofo

我正在编写单元测试。我想模拟对模拟对象调用的函数的结果

我有一个名为
OwnerAnalyzer
的类,它在构造函数中接受一个名为
client
的对象。使用此客户端,我可以获取
所有者
详细信息

在我的单元测试中,我希望通过此客户端的模拟,并通过其
get\u owners
方法获得模拟结果

以下是我到目前为止的情况:

def test_get_owner_details(mock_datetime, monkeypatch):
    mock_datetime.now.return_value.isoformat.return_value = MOCK_NOW
    mock_client = mock.MagicMock()
    mock_client.return_value.get_owners.return_value = ListOwnerDetails(
        main_owner=OwnerDetails(name='test_owner', type='User'), secondary_owners=[])

    owner_analyzer = OwnerAnalyzer(OWNER_NAME, client=mock_client)
    owner_analyzer.analyze_owner(OWNER_NAME)
    assert classUnderTest.owner_name == 'test_owner'
我认为在
get\u owner
调用中没有返回模拟值,因为我得到了类似于
main\u owner

所有者是:

感谢@jornsharpe为我指明了正确的方向

通过将模拟设置更新为-

mock_client.get_owners.return_value = ListOwnerDetails(
        main_owner=OwnerDetails(name='test_owner', type='User'), secondary_owners=[])

您正在设置
mock().get_owners()
,而不是
mock.get_owners()
。抱歉,我没有听清楚。请查看您实际获得的mock的表示形式。将其与您设置的模拟进行比较。您希望OwnerAnalyzer调用客户端吗?OwnerAnalyzer中的方法
analyze\u owner
调用
client。使用OwnerAnalyzer的
self.client
获取所有者。这就是我想嘲笑的电话。对不起,我是Python新手,我通常用Java编写代码。是的,但您正在对
client()
的返回值设置模拟。再一次,看看输出告诉您什么,并思考被测代码将如何与您的测试加倍进行交互。