1

私のクラスの 1 つはリストに値を蓄積し、そのリストを別のオブジェクトのメソッドへの引数として使用し、このリストの値の一部を削除します。何かのようなもの

element = element_source.get()
self.elements.append(element)
element_destination.send(elements)
self.remove_outdated_elements()

しかし、この動作をテストしようとしたときに、モックが引数をコピーしないことがわかりました。

>>> from unittest.mock import Mock
>>> m = Mock()
>>> a = [1]
>>> m(a)
<Mock name='mock()' id='139717658759824'>
>>> m.call_args
call([1])
>>> a.pop()
1
>>> m.assert_called_once_with([1])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.3/unittest/mock.py", line 737, in assert_called_once_with
    return self.assert_called_with(*args, **kwargs)
  File "/usr/lib/python3.3/unittest/mock.py", line 726, in assert_called_with
    raise AssertionError(msg)
AssertionError: Expected call: mock([1])
Actual call: mock([])

モックに呼び出し引数をコピーさせる方法はありますか? そうでない場合、この種の動作をテストする最良の方法は何ですか?

4

1 に答える 1