如何使import pkg
在moduleA.py
中失败?如果从其中导入了某些内容,我可以修补pkg
失败,但是不能:
# test.py
import os
import moduleA
from unittest.mock import patch
from importlib import reload
@patch.dict('sys.modules', pkg=os)
def test_mock():
reload(moduleA)
# moduleA.py
import pkg # make this fail
from pkg import sum # this does fail
答案 0 :(得分:1)
这有点复杂。您必须确保重新加载失败-这可以通过添加实现find_spec
的类来完成。其次,您必须从sys.modules
中删除一个已加载的软件包-否则将在重新加载时使用:
import sys
from importlib import reload
import pytest
import moduleA
class ImportRaiser:
def find_spec(self, fullname, path, target=None):
if fullname == 'pkg':
# we get here if the module is not loaded and not in sys.modules
raise ImportError()
sys.meta_path.insert(0, ImportRaiser())
def test_import_error():
if 'pkg' in sys.modules:
del sys.modules['pkg']
with pytest.raises(ImportError):
reload(moduleA)