VSCode中Pipenv项目单元测试配置问题及测试文件验证
问题描述
我用unittest编写单元测试,测试代码如下:
import unittest import pdf_text_extract import re class TestPdf2TxtMethod(unittest.TestCase): def test_txtextract(self): test_pdf_file = "test.pdf" extraction_result = pdf_text_extract.txt_extract(test_pdf_file) #remove page number infos extraction_result = re.sub(r'--\d+/\d+--\n\n', '', extraction_result) with open("expected.txt", 'r') as f: expected_content = f.read() self.assertEqual(expected_content, extraction_result) if __name__ == '__main__': unittest.main()
其中txt_extract依赖多个第三方模块,我用Pipenv管理依赖。终端执行pipenv run python test.py可正常运行测试,但VSCode的测试功能会报ModuleNotFoundError,错误信息如下:
Failed to import test module: pdf_text_extract_test Traceback (most recent call last): File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/unittest/loader.py", line 436, in _find_test_path module = self._get_module_from_name(name) File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name __import__(name) File "pdf_text_extract_test.py", line 2, in <module> import pdf_text_extract File "pdf_text_extract.py", line 2, in <module> import fitz ModuleNotFoundError: No module named 'fitz'
我需要解决VSCode中依赖Pipenv项目的单元测试配置问题,同时确认测试文件是否存在问题,实现VSCode官方文档展示的测试结构效果。
解决方法
一、VSCode配置Pipenv虚拟环境
- 打开命令面板(快捷键:Mac用
Cmd+Shift+P,Windows/Linux用Ctrl+Shift+P),输入Python: Select Interpreter。 - 在列表中选择对应项目的Pipenv虚拟环境,格式一般为
Python 3.x.x ('项目名': pipenv);如果列表里没有,执行以下步骤:- 终端运行
pipenv --venv,获取虚拟环境的根路径,比如/Users/xxx/.local/share/virtualenvs/项目名-xxxxxx。 - 回到VSCode的解释器选择界面,点击
Enter interpreter path,找到上述路径下的bin/python(Mac/Linux)或Scripts/python.exe(Windows)并选中。
- 终端运行
- 配置测试框架:
- 打开命令面板,输入
Python: Configure Tests。 - 选择
unittest作为测试框架。 - 选择测试文件所在的目录(若测试文件和源码同目录,选当前项目根目录即可)。
- 选择测试文件命名模式,对应你的
pdf_text_extract_test.py,选*_test.py。
- 打开命令面板,输入
二、测试文件优化与问题确认
你的测试文件逻辑本身无错误,可做以下优化以符合规范:
- 测试方法名已遵循
test_xxx的标准格式,无需修改。 - 可添加
setUp方法复用初始化逻辑,避免重复代码:class TestPdf2TxtMethod(unittest.TestCase): def setUp(self): self.test_pdf_file = "test.pdf" with open("expected.txt", 'r') as f: self.expected_content = f.read() def test_txtextract(self): extraction_result = pdf_text_extract.txt_extract(self.test_pdf_file) extraction_result = re.sub(r'--\d+/\d+--\n\n', '', extraction_result) self.assertEqual(self.expected_content, extraction_result) - 确认
test.pdf和expected.txt的路径:VSCode默认工作目录是项目根目录,若文件不在根目录,需调整为相对根目录的路径。
三、验证配置
完成上述操作后,点击VSCode左侧的测试资源管理器图标,即可看到加载的测试用例。点击运行按钮,测试即可正常执行,不会再出现ModuleNotFoundError。
内容的提问来源于stack exchange,提问作者Jianing JIA
相关产品推荐
相关产品推荐

