单元测试是测试应用程序中其他代码单元的代码片段,通常是隔离的函数、类等。 当应用程序通过其所有单元测试时,可以确信至少低级别程序功能是正确的。
Python 在设计程序时广泛使用单元测试来验证方案。 Visual Studio 中的 Python 支持包括发现、执行和调试开发过程的上下文中的单元测试,而无需单独运行测试。
本文简要概述了使用 Python 的 Visual Studio 中的单元测试功能。 有关单元测试的详细信息,请参阅 单元测试代码。
先决条件
在 Windows 上安装的 Visual Studio 支持 Python 工作负载。 有关详细信息,请参阅 在 Visual Studio中安装 Python 支持。
不支持 Visual Studio for Mac。 Windows、Mac 和 Linux 上的 Visual Studio Code 通过可用扩展适用于 Python。
为 Python 项目选择测试框架
Visual Studio 支持两个适用于 Python、 unittest 和 pytest 的测试框架(在 Visual Studio 2019 版本 16.3 及更高版本中提供)。 默认情况下,创建 Python 项目时不会选择框架。
按照以下步骤为 Python 项目选择测试框架:
在 解决方案资源管理器中,右键单击项目名称并选择“ 属性”。
在“项目 属性 ”窗格中,选择“ 测试 ”选项卡,然后选择 测试框架 类型:
对于 unittest 框架,Visual Studio 为测试发现分配项目的根目录。 默认值为
.,但可以在配置项目设置时指定其他位置。 还可以为测试文件名 模式指定一个或多个字符串,例如test*.py, test_*.py。对于 pytest 框架,使用标准 pytest.ini 配置文件指定测试位置和文件名模式等测试选项。 默认情况下,工作区/项目文件夹用于位置。 默认文件名模式包括
test_*py和*_test.py。 有关详细信息,请参阅 pytest 参考文档。
注释
定义文件名模式时,请记住,下划线()等特殊字符与通配符(
_*)不匹配。 如果要在文件名中使用特殊字符,请在模式定义中指定这些字符,例如test_*.py。若要保存框架选择和设置,可以使用 Ctrl+S 键盘快捷方式。
配置框架后,Visual Studio 将启动测试发现并打开 测试资源管理器。
在没有项目的情况下为 Python 配置测试
Visual Studio 允许您通过打开包含 Python 代码的文件夹,在没有项目的情况下运行和测试现有的 Python 代码。 在此方案中,需要使用 PythonSettings.json 文件来配置测试。
通过使用 “打开本地文件夹”选项 来打开您的现有 Python 代码:
打开 Python 文件夹时,Visual Studio 会创建多个隐藏文件夹来管理与程序相关的设置。 若要查看解决方案资源管理器中的这些文件夹(以及任何其他隐藏文件和文件夹(如 .git 文件夹),请选择“显示所有文件”选项:
在 解决方案资源管理器中,展开 “本地设置” 文件夹,然后双击 PythonSettings.json 文件以在编辑器中打开该文件。
注释
大多数配置显示两个设置文件: PythonSettings.json 和 ProjectSettings.json。 在本练习中,需要修改 PythonSettings.json 文件。
如果在“本地设置”文件夹中看不到 PythonSettings.json 文件,可以手动创建该文件:
右键单击 “本地设置” 文件夹,然后选择“ 添加新>文件”。
将文件 命名为PythonSettings.json,然后选择 Enter 以保存更改。
Visual Studio 会自动在编辑器中打开新文件。
在 PythonSettings.json 文件中,添加以下代码以定义
TestFramework. 根据所需的测试框架,将框架值设置为 pytest 或 unittest :{ "TestFramework": "unittest", "UnitTestRootDirectory": "testing", "UnitTestPattern": "test_*.py" }对于 unittest 框架,如果未在
UnitTestRootDirectory文件中为UnitTestPattern和 设置定义特定值,Visual Studio 会自动添加这些字段,并分别赋予默认值.和test*.py。对于 pytest 框架,配置选项始终在 pytest.ini 配置文件中指定,而不是通过 Visual Studio 设置指定。
如果 Python 程序包含独立于包含测试的文件夹的 src 文件夹,请使用 PythonSettings.json 文件中的设置指定
SearchPaths文件夹的路径:"SearchPaths": [".\\src"]保存对 PythonSettings.json 文件的更改。
配置框架后,Visual Studio 将为指定的框架启动测试发现。 可以在 测试资源管理器中访问测试。
添加和探索测试
默认情况下,Visual Studio 将 unittest 和 pytest 测试标识为名称开头 test的方法。
若要查看 Visual Studio 如何启动测试发现,请执行以下步骤:
在 Visual Studio 中打开 Python 项目 。
设置项目的测试框架 属性 ,如 Python 项目的“选择测试框架”中所述。
在 解决方案资源管理器中,右键单击项目并选择“ 添加新>项”。
在“ 添加新项 ”对话框中,选择 Python 单元测试 文件类型。
输入满足为项目属性指定的模式定义的文件名。
选择 并添加。
Visual Studio 使用默认代码创建测试文件:
import unittest class Test_test1(unittest.TestCase): def test_A(self): self.fail("Not implemented") if __name__ == '__main__': unittest.main()此代码导入标准
unittest模块并从方法派生测试类unittest.TestCase。 直接运行脚本时,此代码还会调用函数unittest.main()。
添加新的测试文件时,Visual Studio 可在 测试资源管理器中使用它们。
使用测试资源管理器查看测试
配置测试框架和测试文件后,Visual Studio 会搜索测试并在 测试资源管理器中显示它们。
下面是使用 测试资源管理器的一些方法:
通过选择 “测试”> 打开 “测试资源管理器” 窗口。
当“测试资源管理器”窗口打开时,请使用键盘快捷方式 CTRL+R,A 触发测试发现。
在 测试资源管理器 中双击测试以在编辑器中打开相应的源文件:
使用工具栏上的“分组依据”选项组织测试视图:
通过在 “搜索” 字段中输入文本,按名称筛选测试:
运行测试 并查看测试运行的状态,如下一部分所述。
有关模块和编写测试的详细信息 unittest ,请参阅 Python 文档。
使用测试资源管理器运行测试
在 测试资源管理器中,可以通过多种方式运行测试:
- 选择全部运行(视图中测试),根据筛选器设置执行当前视图内显示的所有测试。
- 使用“运行”菜单上的命令以组的形式运行失败、通过或未运行的测试。
- 选择一个或多个测试,然后右键单击并选择“ 运行所选测试 ”选项。
Visual Studio 在后台运行测试。 测试资源管理器 在完成时更新每个测试的状态:
通过的 测试显示为绿色勾号以及完成测试运行的时间:
失败 的测试显示红色 X,并包含一个 输出 链接,该链接显示测试运行期间的控制台输出以及
unittest的输出。
用调试器进行测试检查
单元测试和其他代码一样,可能会有 bug,因此有时需要在调试器中运行。 在 Visual Studio 调试器中,可以设置断点、检查变量和单步执行代码。 Visual Studio 还提供用于单元测试的诊断工具。
查看以下有关使用 Visual Studio 调试器检查测试的要点:
默认情况下,测试调试使用 Visual Studio 2019 版本 16.5 及更高版本的 debugpy 调试器。 某些早期版本的 Visual Studio 使用 ptvsd 4 调试器。 如果使用的是早期版本的 Visual Studio,并且首选 ptvsd 3 调试器,请选择“工具>>>”下的“使用旧调试器”选项。
若要开始调试,请在代码中设置初始断点,然后在 测试资源管理器 中右键单击测试(或所选内容),然后选择 “调试所选测试”。 Visual Studio 启动 Python 调试器的方式与启动应用程序代码相同。
如果愿意,可以使用 分析所选测试的代码覆盖率。 有关详细信息,请参阅 使用代码覆盖率来确定测试的代码量。