Логика c, которую вы использовали в программе, верна, но проблема в том, что вы использовали неправильные идентификаторы в местах:
1) unittest
не имеет класса Test
, он имеет TestCase
2) Функция, которую вы хотите проверить, называется read_file()
, но при ее вызове вы вместо этого вызываете file_read()
3) Ключевым аргументом mock.mock_open()
является не data
, а read_data
.
. Вот код с предлагаемыми изменениями:
import unittest
import unittest.mock as mock
def read_file(file_name):
'''
returns: tuple(error_code, data)
error_code = 1: file found, data will be read and returned.
error_code = 2: file not found, data is None.
error_code = 3: file found by cannot read it.
'''
try:
with open(file_name) as fh:
data = fh.read()
return 1, data
except FileNotFoundError:
return 2, None
except PermissionError:
return 3, None
class TestReadFile(unittest.TestCase):
@mock.patch('builtins.open', mock.mock_open(read_data=''))
def test_file_permission(self):
err_code, data = read_file('file_name')
assertEqual(err_code, 3)