2 つのファイルを開き、それぞれに異なるデータを書き込むメソッドをテストする必要があります。ファイルがどの順序で書き込まれるかは問題ではありません。
モックを使用してopen
.
from io import BytesIO
import mock
class MemorisingBytesIO(BytesIO):
"""Like a BytesIO, but it remembers what its value was when it was closed."""
def close(self):
self.final_value = self.getvalue()
super(MemorisingBytesIO, self).close()
open_mock = mock.Mock()
open_mock.return_value = MemorisingBytesIO()
with mock.patch('__builtin__.open', open_mock):
write_to_the_file() # the function under test
open_mock.assert_called_once_with('the/file.name', 'wb')
assert open_mock.return_value.final_value == b'the data'
2 つのファイルに書き込むメソッドで動作するようにこのアプローチを変更するのに問題があります。side_effect
2 つの s を連続して返すためにを使用MemorisingBytesIO
し、それぞれに正しいデータが含まれていることを確認することを検討しましたが、その場合、テストは脆弱になります。メソッド内の呼び出しの順序が変更されると、テストは失敗します。
したがって、私が本当にやりたいことは、あるファイル名で呼び出されたときにopen_mock
1 つを返しMemorisingBytesIO
、別のファイル名で呼び出されたときに別のファイルを返すことです。私は他の言語のモッキングライブラリでこれを見てきました.サブクラス化せずにPythonで可能Mock
ですか?