from unittest import mock, TestCase, TextTestRunner, TestLoader
class CallDiffingMock(mock.Mock):
def assert_called_with(self, *args, **kwargs):
self.assert_called()
test = TestCase()
test.assertTupleEqual(args, self.call_args.args)
test.assertDictEqual(kwargs, self.call_args.kwargs)
class Test(TestCase):
def test_call(self):
f = CallDiffingMock()
f(a=1, b=2)
f.assert_called_with(a=1, b=2, c=3)
TextTestRunner().run(TestLoader().loadTestsFromTestCase(Test))
ZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaywgVGVzdENhc2UsIFRleHRUZXN0UnVubmVyLCBUZXN0TG9hZGVyCgpjbGFzcyBDYWxsRGlmZmluZ01vY2sobW9jay5Nb2NrKToKICAgIGRlZiBhc3NlcnRfY2FsbGVkX3dpdGgoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzZWxmLmFzc2VydF9jYWxsZWQoKQogICAgICAgIHRlc3QgPSBUZXN0Q2FzZSgpCiAgICAgICAgdGVzdC5hc3NlcnRUdXBsZUVxdWFsKGFyZ3MsIHNlbGYuY2FsbF9hcmdzLmFyZ3MpCiAgICAgICAgdGVzdC5hc3NlcnREaWN0RXF1YWwoa3dhcmdzLCBzZWxmLmNhbGxfYXJncy5rd2FyZ3MpCgpjbGFzcyBUZXN0KFRlc3RDYXNlKToKICAgIGRlZiB0ZXN0X2NhbGwoc2VsZik6CiAgICAgICAgZiA9IENhbGxEaWZmaW5nTW9jaygpCiAgICAgICAgZihhPTEsIGI9MikKICAgICAgICBmLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MiwgYz0zKQoKVGV4dFRlc3RSdW5uZXIoKS5ydW4oVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0KSk=
F
======================================================================
FAIL: test_call (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./prog.py", line 14, in test_call
File "./prog.py", line 8, in assert_called_with
AssertionError: {'a': 1, 'b': 2, 'c': 3} != {'a': 1, 'b': 2}
- {'a': 1, 'b': 2, 'c': 3}
? --------
+ {'a': 1, 'b': 2}
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)