我正在编写一个模块,它可以将
pandas
作为可选包。 my_submodule.py
文件顶部的导入语句如下所示。
try:
import pandas as pd
except (ImportError, ModuleNotFoundError):
pd = None
现在我想测试
pandas
没有安装并且ImportError
或ModuleNotFoundError
被提出。
如何做到这一点?
目前我的测试文件是这样的:
from unittest import TestCase
from unittest.mock import patch
def test_no_pandas_import():
with patch('sys.path', []):
from my_module import my_submodule
assert my_submodule.pd is None
但是断言不是真的,导入了 pandas 并且没有检查错误。
在我的系统中,我创建了您的文件
my_submodule.py
,在模块my_module
.
我已经将你的测试函数
test_no_pandas_import()
引入到后面的测试类中(在文件test_pandas_exception.py
中):
class MyTestCase(TestCase)
所以测试代码变成如下:
from unittest import TestCase, main
from unittest.mock import patch
class MyTestCase(TestCase):
def test_no_pandas_import(self):
with patch('sys.path', []):
# ---------> Note the followed instruction <---------------
with self.assertRaises(ModuleNotFoundError):
from my_module import my_submodule
assert my_submodule.pd is None
if __name__ == '__main__':
main()
我的测试代码和你的测试代码的主要区别在于我添加了指令:
with self.assertRaises(ModuleNotFoundError):
如果我在我的系统中执行测试方法
test_no_pandas_import()
,它会通过,但是如果我删除你的指令:
with patch('sys.path', []):
测试失败,输出如下:
F
======================================================================
FAIL: test_no_pandas_import (__main__.MyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/path/to/stack_overflow/test_pandas_exception.py", line 10, in test_no_pandas_import
assert my_submodule.pd is None
AssertionError: ModuleNotFoundError not raised
----------------------------------------------------------------------
Ran 1 test in 0.002s
FAILED (failures=1)
希望这个回答对你有用