我编写了兼容的代码,尝试导入BufferedProtocol,并在ImportError引发时改用Protocol,但是当我为这些编写测试时,却遇到了问题。
我尝试使用模拟补丁asyncio,但是无法正常工作。如果我将sys.modules中的asyncio模拟为None,则它将无法检测是否使用了Protocol类,因为asyncio在模拟上下文中不是模块。
我尝试了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中通过一些模拟工作。