Mardoxx <mard...@gmail.com> added the comment:
This is surprising behaviour, Python 3.8.9: factory = unittest.mock.Mock() ### test example foo_obj = factory.create("foo"),do_thing() # !! MUST BE CALLED AFTER .create("foo") !! bar_obj = factory.create("bar").do_thing() ### # I set any_order to false because these should be called in order. factory.create.assert_has_calls([ unittest.mock.call("foo"), unittest.mock.call("bar") ], any_order = False) # OOPS!! this fails # mock_calls == [call('foo'), call().do_thing(), call('bar'), call().do_thing()] # I can however check this with... # assert factory.create.call_args_list == [ # unittest.mock.call("foo"), # unittest.mock.call("bar") # ] Am I fundamentally misunderstanding something here? This appears to be different behaviour from assert_has_awaits, which adds to the confusion. assert_has_calls checks mock_calls, I'd have thought it should check call_args_list. Another method assert_mock_calls should check mock_calls for consistency? Or have I missed something here? Perhaps an additional flag of in_sequence would be nice, defaulted to False to keep the existing unusual behaviour. When False, calls must be in exactly the order they are described. When True, calls must be in sequence (with anything in-between each call). any_order=True overrides this and allows them to be in any order anywhere in the mock_calls list. ---------- nosy: +mardoxx versions: +Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue43371> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com