単体テストしたい次のコードブロックがあります。
@staticmethod
def _read_from_zip(pkg_zip_path):
"""
Return a |BlobCollection| instance loaded from *pkg_zip_path*.
"""
blobs = BlobCollection()
zipf = ZipFile(pkg_zip_path)
for name in zipf.namelist():
blobs[name] = zipf.read(name)
zipf.close()
root_uri = os.path.splitext(pkg_zip_path)[0]
return PhysPkg(blobs, root_uri)
ライブラリ/サードパーティのパッケージである ZipFile を呼び出すため、ZipFile をモックするのではなく、ZipFile と統合するテストを作成したいと考えています (サードパーティのコード ルールをモックしないでください)。
これが私がこれまでに行ったテストです。クラスinitializer_mock()
のメソッドにパッチを適用するヘルパー関数です。この場合は次のとおりです。__init__()
PhysPkg
from opcdiag.phys_pkg import PhysPkg
MINI_PKG_PATH = 'test_files/mini_pkg.zip'
@pytest.fixture
def init(self, request):
return initializer_mock(PhysPkg, request)
def it_can_construct_from_a_zip_package(self, init):
PhysPkg._read_from_zip(MINI_PKG_PATH)
expected_blobs = {'uri_1': b'blob_1\n', 'uri_2': b'blob_2\n'}
init.assert_called_once_with(expected_blobs, ROOT_URI)
close()
問題は、私は ZipFile をモックしていないため、メソッドが呼び出されることをテストする方法がわからないことです。
多分私は2つのテストを書くべきですか?これは結果をテストすることで ZipFile との適切な統合を保証するもので、もう 1 つは ZipFile をモックして確実close()
に呼び出されるようにするものですか?