Как мне настроить unittest.mock.mock_open для обработки этого кода?
file: impexpdemo.py
def import_register(register_fn):
with open(register_fn) as f:
return [line for line in f]
Моя первая попытка попыталась read_data
.
class TestByteOrderMark1(unittest.TestCase):
REGISTER_FN = 'test_dummy_path'
TEST_TEXT = ['test text 1\n', 'test text 2\n']
def test_byte_order_mark_absent(self):
m = unittest.mock.mock_open(read_data=self.TEST_TEXT)
with unittest.mock.patch('builtins.open', m):
result = impexpdemo.import_register(self.REGISTER_FN)
self.assertEqual(result, self.TEST_TEXT)
Это не удалось, предположительно потому, что код не использует чтение, чтение или чтение. документация для unittest.mock.mock_open говорит:" read_data - это строка для методов read(), readline() и readlines() для дескриптора файла Вызов этих методов будет принимать данные из read_data до тех пор, пока он не будет исчерпан. Макет этих методов довольно упрощен. Если вам нужно больше контролировать данные, которые вы подаете на тестируемый код, вам нужно будет настроить этот макет для себя. По умолчанию read_data - это пустая строка.
Поскольку в документации не было намека на то, какая настройка потребуется, я попробовал return_value
и side_effect
. Ничего не работало.
class TestByteOrderMark2(unittest.TestCase):
REGISTER_FN = 'test_dummy_path'
TEST_TEXT = ['test text 1\n', 'test text 2\n']
def test_byte_order_mark_absent(self):
m = unittest.mock.mock_open()
m().side_effect = self.TEST_TEXT
with unittest.mock.patch('builtins.open', m):
result = impexpdemo.import_register(self.REGISTER_FN)
self.assertEqual(result, self.TEST_TEXT)