假设我有一个方法可以传递一些路径,读取每个路径中的文件,然后返回从文件名到文件内容的字典,如下所示:
from contextlib import ExitStack
from pathlib import Path
class ClassToTest:
def method_to_test(self, *paths: Path):
with ExitStack() as stack:
files = [stack.enter_context(path.open(mode='r')) for path in paths]
return {f.name: f.read() for f in files}
现在说我想测试如果我传入例如C:\wherever\file_name.xyz
返回的字典是否包含 key file_name.xyz
。由于我的测试方法是打开和读取文件,我想模拟出 Path 对象。我想我可以做类似的事情:
from unittest.mock import Mock, mock_open
class Tests:
def test(self):
mock_path = Mock(spec=Path)
mock_path.open = mock_open()
# ???
files = ClassToTest().method_to_test(mock_path)
assert 'file_name.xyz' in files
但我不知道如何让f.name
(即mock_path.open().name
)返回file_name.xyz
。