maddie
maddie

Reputation: 629

Mock return values of a function of mock object

I am writing unit tests. I would like to mock the result of a function called on a mock object.

I have a class called OwnerAnalyzer which accepts an object called client in its constructor. Using this client, I can get owner details.

In my unit test, I want to pass a mock for this client and mock results from its get_owners method.

Here is what I have so far:

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'

I don't think the mock value is being returned in the get_owners call because I get something like for main_owner owner is : <MagicMock name='mock.get_owners().main_owner' id='140420863948896'>.

Upvotes: 0

Views: 408

Answers (1)

maddie
maddie

Reputation: 629

Thanks to @jonrsharpe for pointing me in the right direction.

I was able to get this working by updating my mock setup to -

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

Upvotes: 1

Related Questions