【发布时间】:2015-06-08 20:20:11
【问题描述】:
我无法理解为什么以下代码没有通过:
test.py
import mock
import unittest
from foo import Foo
class 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 Bar
class 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
在代码中,Foo.add 创建了一个Bar 的实例,并在调用时返回Bar.add 的结果。为什么为Bar.add 测试assert_called_with 会失败?我相信我在正确的地方嘲笑Bar(我在嘲笑foo.Bar,因为这是它正在查找的命名空间,而不是bar.Bar)。
Traceback(最近一次调用最后一次): 文件“/Users/iain/PycharmProjects/testing/venv/lib/python2.7/site-packages/mock.py”,第 1201 行,已修补 返回函数(*args,**keywargs) 文件“test.py”,第 12 行,在 test_a_b fake_Bar.add.assert_call_with(2, 2) 文件“/Users/iain/PycharmProjects/testing/venv/lib/python2.7/site-packages/mock.py”,第 831 行,在 assert_called_with raise AssertionError('预期调用: %s\n未调用' % (expected,)) AssertionError:预期调用:add(2, 2) 未调用
【问题讨论】:
标签: python unit-testing mocking