classification
Title: Mock.call_args and Mock.call_args_list not propagated to parent Mock
Type: Stage:
Components: Versions:
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: Caris Moses, pconnell, xtreak
Priority: normal Keywords:

Created on 2019-10-17 12:23 by Caris Moses, last changed 2019-10-28 20:47 by pconnell.

Messages (1)
msg354841 - (view) Author: Caris Moses (Caris Moses) Date: 2019-10-17 12:23
When I use some_mock.attach_mock(...) and make calls, the resulting some_mock.call_args is None while the some_mock.mock_calls list is not empty.

The code below shows this in Python 3.7.5:

from unittest import TestCase
from unittest.mock import patch, Mock

def foo(value):
    return value

class MyObjectTest(TestCase):

    @patch(f'{__name__}.foo')
    def test_do_something(self, mock_foo):
        manager = Mock()
        manager.attach_mock(mock_foo, 'foo_func')
        foo(3)
        print(manager.mock_calls)
        print(manager.call_args)
        print(manager.call_args_list)

if __name__ == "__main__":
    unittest.main()

The print statements return:
[call.foo_func(3)]
None
[]

While the code below (without attach_mock) works fine:

from unittest import TestCase
from unittest.mock import patch, Mock

def foo(value):
    return value

class MyObjectTest(TestCase):

    @patch(f'{__name__}.foo')
    def test_do_something(self, mock_foo):
        foo(3)
        print(mock_foo.mock_calls)
        print(mock_foo.call_args)
        print(mock_foo.call_args_list)

if __name__ == "__main__":
    unittest.main()

Print statements correctly return:
[call(3)]
call(3)
[call(3)]

I also tested in Python 3.8.0 and got the same result.
History
Date User Action Args
2019-10-28 20:47:49pconnellsetnosy: + pconnell
2019-10-17 12:32:28xtreaksetnosy: + xtreak
2019-10-17 12:24:48Caris Mosessettitle: Mock.call_args and Mock.call_args_list -> Mock.call_args and Mock.call_args_list not propagated to parent Mock
2019-10-17 12:23:54Caris Mosescreate