Как смоделировать ImportError для импорта из Asyncio BufferedProtocol в Python3.7? - PullRequest
0 голосов
/ 12 июня 2019

Я написал совместимые коды, пытаясь импортировать 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 с какой-то насмешливой работой.

...