Я написал совместимые коды, пытаясь импортировать BufferedProtocol, и вместо этого использую Protocol, когда поднял ImportError, но когда я пишу тесты для них, у меня возникают проблемы.
Я пытался использовать фиктивный патч asyncio, но он не работает должным образом. Если я смоделирую asyncio в sys.modules как None, он не сможет обнаружить используемый класс протокола или нет, поскольку asyncio не является модулем в контексте mock.
Я попробовал importlib, но, похоже, эта задача мне не по силам.
mymodule.py
try:
from asyncio import BufferedProtocol
class MyProtocol(BufferedProtocol):
pass
except ImportError:
from asyncio import Protocol
class MyProtocol(Protocol):
pass
test.py
def test_BufferedProtocol_not_exist(self):
with self.assertRaises(ImportError):
from asyncio import BufferedProtocol
with self.assertRaises(ImportError):
from asyncio import BufferedProtocol
import asyncio
self.assertFalse(hasattr(asyncio, 'BufferedProtocol'))
import asyncio.protocols
self.assertFalse(hasattr(asyncio.protocols, 'BufferedProtocol'))
from mymodule import MyProtocol
self.assertTrue(issubclass(MyProtocol, asyncio.Protocol))
Я ожидаю, что предыдущий тест пройдет в Python3.7 с какой-то насмешливой работой.