Issue 47209: Documentation for asserting values of unittest.mock.Mock.call_args_list (original) (raw)

Created on 2022-04-04 03:24 by himkt, last changed 2022-04-11 14:59 by admin.

Messages (3)

msg416650 - (view)

Author: himkt (himkt)

Date: 2022-04-04 03:24

Currently documentation says we can check call_args_list by providing a list of tuples of arguments.

>>> expected = [(), ((3, 4),), ({'key': 'fish', 'next': 'w00t!'},)]
>>> mock.call_args_list == expected
True

(from https://docs.python.org/3.11/library/unittest.mock.html#unittest.mock.Mock.call_args_list)

However, I think we have to wrap all arguments with call. I'd happy to send a patch if it should be fixed.

Reproduce:

import time
from unittest.mock import call
from unittest.mock import patch


with patch("time.sleep") as mock_obj:
    time.sleep(1)
    time.sleep(2)

    print("mock_obj.call_args_list")
    print(mock_obj.call_args_list)

    print("mock_obj.call_args_list == [(1,), (2,)]")
    print(mock_obj.call_args_list == [(1,), (2,)])
    print("mock_obj.call_args_list == [call(1,), call(2,)]")
    print(mock_obj.call_args_list == [call(1,), call(2,)])
> python demo.py                                                                                                                                                             2022-04-04 12:03:18
mock_obj.call_args_list
[call(1), call(2)]
mock_obj.call_args_list == [(1,), (2,)]
False
mock_obj.call_args_list == [call(1,), call(2,)]
True

msg416652 - (view)

Author: himkt (himkt)

Date: 2022-04-04 03:43

So sorry, documentation is not wrong. It only need to wrap an argument when it is a singular value.

But I'm still wondering if we can unify documentation to wrap call (e.g. https://github.com/himkt/cpython/blob/main/Doc/library/unittest.mock-examples.rst#checking-multiple-calls-with-mock does it).

msg416653 - (view)

Author: himkt (himkt)

Date: 2022-04-04 05:58

It only need to wrap an argument when it is a singular value.

It is also wrong..., sorry. To compare a single value, I should have passed a tuple of tuples.

> python demo.py                                                                                                                                                             2022-04-04 14:56:41
mock_obj.call_args_list
[call(1), call(2)]
mock_obj.call_args_list == [(1,), (2,)]
False
mock_obj.call_args_list == [call(1,), call(2,)]
True
mock_obj.call_args_list == [((1,),), ((2,),)]
True