Скажем, у меня есть метод, который пропускает некоторые пути, читает файлы по каждому из этих путей, затем возвращает словарь из имени файла в содержимое файла, например:
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
, то возвращаемый словарь содержит ключ 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
.