我有一个安装了可选库的包。当可选库不存在并且调用特定方法时,将引发一个自定义异常,说明在没有可选包安装的情况下未启用该功能。如果存在可选库,则可以使用该方法。
我想用pytest测试这两个案例。
我正在导入以下库:
try:
import derp
except ImportError:
pass
然后在函数中通过检查包是否在
sys.modules
中来检查库是否已安装。def my_feature_method():
if 'derp' not in sys.modules:
raise Exception('this feature requires the derp package to be installed')
# do some stuff ...
我希望能够测试在pytest中安装了包但没有安装包的情况。
编辑
目前我正在使用
with mock.patch.dict('sys.modules'):
del sys.modules['derp']
# run test
但这实际上并不能测试
ImportError
是否升高。我要这个是为了保险起见 最佳答案
好吧,我通过改变设置解决了这个问题:
def try_import(name, package=None):
try:
return importlib.import_module(name, package=package)
except ImportError:
pass
derp = try_import('derp')
if not globals()['derp']:
raise Exception('this feature requires the derp package to be installed')
这意味着两件事:
我可以单独测试
try_import
函数。我可以简单地修补名称,比如
mock.patch('__main__.derp', None)
关于python - Python如何在导入包时模拟ImportError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53239407/