如何从Python3.7中的asyncio import BufferedProtocol模拟ImportError?

时间:2019-06-12 03:38:55

标签: python mocking python-asyncio python-unittest

我编写了兼容的代码,尝试导入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中通过一些模拟工作。

0 个答案:

没有答案