Рассмотрим функцию в модуле.
async def _get_user_mapping():
async with aiofiles.open('/etc/subuid') as f:
async for line in f:
print(line)
И тестовый класс
from atestfile import _get_user_mapping
class TestFS(fake_filesystem_unittest.TestCase):
def setUp(self):
self.a_required_class_parameter = True
self.setUpPyfakefs()
for file_path in ['/etc/subuid']:
self.fs.create_file(file_path, contents = """testuser:100000:65536
testuser2:165536:65536""")
def test(self):
if self.a_required_class_parameter:
asyncio.get_event_loop().run_until_complete(_get_user_mapping())
В этом примере тестовая функция должна установить pyfakefs для предоставления поддельного файла. К сожалению, у aiofiles нет доступа к файлу, и печатный вывод является реальным файлом в системе.
Кто-нибудь знает, как я могу пропатчить цикл обработки событий aiofiles, чтобы использовать pyfakefs в качестве поддельной файловой системы? При тестировании я обнаружил следующий фрагмент с использованием библиотеки с именем pytest-aiofiles
(звучит как то, что мне нужно, верно?), Но пример, который они показывают:
@pytest.mark.asyncio
async def test_stuff(self):
filename = 'test'
etc.....
Если я добавлю декоратор mark.asyncio
в метод класса test
, импортированная функция не будет иметь доступа к сгенерированному поддельному файлу в методе setUp
.
Я предполагаю, что упускаю что-то простое, поэтому на самом деле все это можно разбить на простой вопрос: Как, черт возьми, я это проверяю?
Спасибо!