コレクション内の各アイテムに対して一連のメソッドを呼び出すコードが少しあり、各メソッドは成功 = True/失敗 = 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__()
メソッド呼び出しを確認しているため失敗します。
質問
ゼロ以外のメソッド呼び出しを追加するのはなぜですか?
明確化
Python 3.3 の時点で stdlib に含まれている mockを使用しています。