我有一些代码调用集合中每个项目的一系列方法,每个方法返回一个布尔值,指示成功 = True/failure = False。
def monkey(some_collection, arg1, arg2):
for item in some_collection:
if not item.foo(arg1, arg2):
continue
if not item.bar(arg1, arg2):
continue
if not item.baz(arg1, arg2):
continue
而且,这是我的单元测试示例:
import mock
def TestFoo(unittest.TestCase):
def test_monkey(self):
item = MagicMock()
some_collection = [item]
collection_calls = []
foo_call = mock.call().foo(some_collection, 1, 2)
bar_call = mock.call().bar(some_collection, 1, 2)
baz_call = mock.call().baz(some_collection, 1, 2)
collection_calls = [foo_call, bar_call, baz_call]
my_module.monkey(some_collection, 1, 2)
item.assert_has_calls(collection_calls) # requires the correct call order/sequence
实际通话
call().foo(<MagicMock id='12345'>, 1, 2)
call().foo.__nonzero__()
...
注意:此单元测试失败,因为它看到了__nonzero__()
方法调用。
问题
为什么要添加非零方法调用?
澄清
我正在使用mock,它从 python 3.3 开始包含在 stdlib 中。