I'm having some trouble understanding why the following code does not pass:
test.py
import mock
import unittestfrom foo import Fooclass TestFoo(unittest.TestCase):@mock.patch('foo.Bar')def test_foo_add(self, Bar):foo = Foo()foo.add(2, 2)Bar.add.assert_called_with(2, 2)if __name__ == '__main__':unittest.main()
foo.py
from bar import Barclass Foo(object):def add(self, x, y):bar = Bar()return bar.add(x, y)
bar.py
class Bar(object):def add(self, x, y):print('b.Bar --> Adding {} + {}'.format(x, y))return x + y
In the code, Foo.add
creates an instance of Bar
and returns the result of Bar.add
when invoked. Why does testing assert_called_with
for Bar.add
fail? I believe I am mocking the Bar
in the correct place (I am mocking foo.Bar
because that is the namespace which it is being looked up, rather than bar.Bar
).
Traceback (most recent call last):File "/Users/iain/PycharmProjects/testing/venv/lib/python2.7/site-packages/mock.py", line 1201, in patchedreturn func(*args, **keywargs)File "test.py", line 12, in test_a_bfake_Bar.add.assert_called_with(2, 2)File "/Users/iain/PycharmProjects/testing/venv/lib/python2.7/site-packages/mock.py", line 831, in assert_called_withraise AssertionError('Expected call: %s\nNot called' % (expected,)) AssertionError: Expected call: add(2, 2) Not called