У меня есть этот код, который я хочу протестировать в отдельности в some_module.py
import tarfile
def function_to_test(path_to_tar):
tar_file = tarfile.open(path_to_tar)
for tar_info in tar_file.getmembers():
#some logic to test
pass
И я не могу эффективно смоделировать методы tarfile, чтобы я мог имитировать файл tar без необходимости читать из фактическогофайл, моя текущая попытка выглядит следующим образом
from unittest.mock import patch, Mock
def test_DeepLabModel_unexistent_error():
tar_path = "/path/to/nowhere"
import tarfile
with patch.object(tarfile, 'open', autospec=True) as open_mock:
open_mock.getmembers = Mock()
open_mock.getmembers.return_value = ['a','b']
from some_module import function_to_test
function_to_test(tar_path)
pass
Это не работает, вызов метода getmembers в методе test просто возвращает другой объект MagicMock, а не список строк, которые я предоставляю, таким образомне повторять как следует.Я достиг своей цели, используя подобное поведение в прошлом, но я не могу понять, почему это не работает здесь.