使用测试资源管理器运行单元测试

使用测试资源管理器从 Visual Studio 或第三方单元测试项目运行单元测试。 还可以使用测试资源管理器将测试分组到不同类别、筛选测试列表以及创建、保存和运行测试播放列表。 还可以使用测试资源管理器来调试单元测试,并在 Visual Studio Enterprise 中分析代码覆盖率

测试资源管理器可从解决方案的多个测试项目以及生产代码项目包含的测试类中运行测试。 测试项目可以使用不同的单元测试框架。 如果待测试的代码是为 .NET 编写的,则可以面向 .NET 的任何语言编写测试项目,而不考虑目标代码的语言。 本机 C/C++ 代码项目必须使用 C++ 单元测试框架进行测试。

生成测试项目

如果还没有在 Visual Studio 解决方案中设置测试项目,则必须首先创建并生成测试项目。

Visual Studio 包含适用于托管和本机代码的 Microsoft 单元测试框架。 但是,测试资源管理器还可以运行任何单元测试框架,只要该框架实现了测试资源管理器适配器。 若要详细了解如何安装第三方单元测试框架,请参阅安装第三方单元测试框架

在测试资源管理器中运行测试

在生成测试项目时,测试将出现在“测试资源管理器”中。 如果“测试资源管理器”不可见,请选择 Visual Studio 菜单上的“测试”,然后选择“测试资源管理器”(或按 Ctrl + E,T)

Test Explorer

Test Explorer

当你运行、编写以及重新运行测试时,测试资源管理器将在“项目”、“命名空间”和“类”默认分组中显示结果 。 你可以更改测试资源管理器对测试进行分组的方式。

可从测试资源管理器的工具栏执行查找、组织和运行测试等大部分工作。

Run tests from the Test Explorer toolbar

Run tests from the Test Explorer toolbar

运行测试

你可以运行解决方案中的所有测试、组中的所有测试或你选择的一组测试。 执行下列操作之一:

  • 若要运行解决方案中的所有测试,请选择“全部运行”图标(或按 Ctrl + R、V)。

  • 若要运行默认组中的所有测试,请选择“运行”图标,然后选择菜单上的组。

  • 选择要运行的各个测试,打开选定测试的右键单击菜单,然后选择“运行选定测试”(或按 Ctrl + R、T)。

  • 如果各个测试没有阻止其以任何顺序运行的依赖项,则可以在工具栏的设置菜单中启用并行测试执行。 这可以显著降低运行所有测试所需的时间。

每次生成后运行测试

若要在每个本地生成后运行单元测试,请在“测试资源管理器”工具栏中打开设置图标并选择“生成后运行测试”。

查看测试结果

当你运行、编写以及重新运行测试时,测试资源管理器将在 “失败的测试”“通过的测试”“跳过的测试”“未运行的测试” 组中显示结果。 测试运行的摘要显示在测试资源管理器底部或侧面的细节窗格中。

查看测试详细信息

若要查看单个测试的详细信息,请选择该测试。

Test execution details

Test execution details

测试细节窗格中显示以下信息:

  • 源文件名和测试方法的行号。

  • 测试的状态。

  • 运行测试方法所花的时间。

如果测试失败,细节窗格中还将显示:

  • 测试的单元测试框架返回的消息。

  • 测试失败时的堆栈跟踪。

查看测试方法的源代码

若要在 Visual Studio 编辑器中显示测试方法的源代码,请依次选择测试和右键单击菜单中的“打开测试”(或按 F12 )。

分组和筛选测试列表

通过测试资源管理器,可以将测试分组到预定义类别中。 在测试资源管理器中运行的大多数单元测试框架允许你定义自己的类别和类别/值对,以便对测试进行分组。 此外还可以通过匹配字符串和测试属性来筛选测试列表。

在测试列表中的测试进行分组

通过测试资源管理器,可以将测试分组到层次结构中。 默认层次结构分组包括“项目”、“命名空间”和“类” 。 若要更改测试的组织方式,请依次选择“分组依据”按钮Test Explorer group button和新分组条件。

Group tests by category in Test Explorer

你可以定义自己的层次结构级别,然后通过按喜欢的顺序选择“分组依据”选项来依次按“状态”和“类”进行分组 。

Screenshot of the Visual Studio Test Explorer showing a test hierarchy in one pane and the Group By menu in the other with the Class and State options checked.

通过测试资源管理器,可以将测试分组到层次结构中。 默认层次结构分组包括“项目”、“命名空间”和“类” 。 若要更改测试的组织方式,请依次选择“分组依据”按钮Test Explorer group button和新分组条件。

Group tests by category in Test Explorer

你可以定义自己的层次结构级别,然后通过按喜欢的顺序选择“分组依据”选项来依次按“状态”和“类”进行分组 。

Screenshot of the Visual Studio Test Explorer showing a test hierarchy in one pane and the Group By menu in the other with the Class and State options checked.

测试资源管理器组

Group 描述
持续时间 按执行时间对测试进行分组:快速、中等和慢速 。
状态 按执行结果对测试进行分组:失败的测试、跳过的测试、通过的测试和未运行的测试
目标框架 按项目目标框架对测试进行分组
命名空间 按包含命名空间对测试进行分组。
Project 按包含项目对测试进行分组。
按包含类对测试进行分组。

Traits

特征通常是类别名称/值对,但也可以是单个类别。 特性可以分配给由单元测试框架标识为测试方法的方法。 单元测试框架可以定义特征类别。 你可以向特征类别添加值,以便定义自己的类别名称/值对。 用于指定特征类别和值的语法由单元测试框架定义。

适用于托管代码的 Microsoft 单元测试框架中的特征

在适用于托管应用的 Microsoft 单元测试框架中,在 TestPropertyAttribute 属性中定义特征名称/值对。 测试框架还包括以下预定义特征:

特征 描述
OwnerAttribute “所有者”类别由单元测试框架定义,并要求你提供所有者的字符串值。
PriorityAttribute “优先级”类别由单元测试框架定义,并要求你提供优先级的整数值。
TestCategoryAttribute 可以通过 TestCategory 属性指定单元测试的类别。
TestPropertyAttribute 你可以通过 TestProperty 属性定义特征类别/值对。

适用于 C++ 的 Microsoft 单元测试框架中的特征

请参阅如何使用适用于 C++ 的 Microsoft 单元测试框架

创建自定义播放列表

你可以创建和保存想要作为组运行或查看的测试列表。 选择播放列表时,列表中的测试将显示在新的“测试资源管理器”选项卡中。可以将一个测试添加到多个播放列表中。

若要创建播放列表,请在测试资源管理器中选择一个或多个测试。 在右键单击菜单中,依次选择“添加到播放列表”>“新建播放列表” 。

Create a playlist

此时将在新的“测试资源管理器”选项卡中打开播放列表。可以使用此播放列表一次,然后将其丢弃,也可以单击播放列表窗口工具栏中的“保存”按钮,然后选择要保存播放列表的名称和位置。

Playlist opens in separate test explorer tab

若要创建播放列表,请在测试资源管理器中选择一个或多个测试。 右键单击并选择“添加到播放列表”>“新建播放列表” 。

若要打开播放列表,请选择 Visual Studio 工具栏中的播放列表图标,然后从菜单中选择以前保存的播放列表文件。

若要编辑播放列表,可以右键单击任何测试,然后使用菜单选项将它添加到播放列表中或从中删除它。

从 Visual Studio 2019 版本 16.7 开始,可以在工具栏中选择“编辑”按钮。 测试旁边将出现复选框,显示播放列表中包括和排除的测试。 根据需要编辑组。

Edit Playlist button

还可以选中或取消选中层次结构中父组的复选框。 此操作将创建一个动态播放列表,会始终基于该组中的测试更新播放列表。 例如,如果你在某一类旁边放置一个复选标记,那么从该类添加的任何测试都将成为此播放列表的一部分。 如果从该类中删除某个测试,该测试则会从播放列表中删除。 通过使用工具栏中的“保存”按钮保存播放列表,并打开在磁盘上创建的 .playlist 文件,可了解有关这些规则的更多信息。 此文件列出了构成播放列表的所有规则和各个测试。

Playlist xml file

若要生成特征的播放列表,请为 MSTest 使用以下格式。

<Playlist Version="2.0">
	<Rule Name="Includes" Match="Any">
		<Property Name="Trait" Value="SchemaUpdateBasic" />
	</Rule>
</Playlist>

对 xUnit 使用以下格式。 请确保 TestCategory 名称和 [Value] 之间存在空格。

<Playlist Version="2.0">
  <Rule Name="Includes" Match="Any">
    <Rule Match="All">
      <Property Name="Solution" />
        <Rule Match="Any">
            <Property Name="Trait" Value="TestCategory [Value]" />
	    </Rule>
	</Rule>
  </Rule>
</Playlist>

你可以创建和保存想要作为组运行或查看的测试列表。 选择播放列表时,列表中的测试将显示在新的“测试资源管理器”选项卡中。可以将一个测试添加到多个播放列表中。

若要创建播放列表,请在测试资源管理器中选择一个或多个测试。 在右键单击菜单中,依次选择“添加到播放列表”>“新建播放列表” 。

Create a playlist

此时将在新的“测试资源管理器”选项卡中打开播放列表。可以使用此播放列表一次,然后将其丢弃,也可以单击播放列表窗口工具栏中的“保存”按钮,然后选择要保存播放列表的名称和位置。

Playlist opens in separate test explorer tab

若要创建播放列表,请在测试资源管理器中选择一个或多个测试。 右键单击并选择“添加到播放列表”>“新建播放列表” 。

若要打开播放列表,请选择 Visual Studio 工具栏中的播放列表图标,然后从菜单中选择以前保存的播放列表文件。

若要编辑播放列表,可以右键单击任何测试,然后使用菜单选项将它添加到播放列表中或从中删除它。

从 Visual Studio 2019 版本 16.7 开始,可以在工具栏中选择“编辑”按钮。 测试旁边将出现复选框,显示播放列表中包括和排除的测试。 根据需要编辑组。

Edit Playlist button

还可以选中或取消选中层次结构中父组的复选框。 此操作将创建一个动态播放列表,会始终基于该组中的测试更新播放列表。 例如,如果你在某一类旁边放置一个复选标记,那么从该类添加的任何测试都将成为此播放列表的一部分。 如果从该类中删除某个测试,该测试则会从播放列表中删除。 通过使用工具栏中的“保存”按钮保存播放列表,并打开在磁盘上创建的 .playlist 文件,可了解有关这些规则的更多信息。 此文件列出了构成播放列表的所有规则和各个测试。

Playlist xml file

若要生成特征的播放列表,请为 MSTest 使用以下格式。

<Playlist Version="2.0">
	<Rule Name="Includes" Match="Any">
		<Property Name="Trait" Value="SchemaUpdateBasic" />
	</Rule>
</Playlist>

对 xUnit 使用以下格式。 请确保 TestCategory 名称和 [Value] 之间存在空格。

<Playlist Version="2.0">
  <Rule Name="Includes" Match="Any">
    <Rule Match="All">
      <Property Name="Solution" />
        <Rule Match="Any">
            <Property Name="Trait" Value="TestCategory [Value]" />
	    </Rule>
	</Rule>
  </Rule>
</Playlist>

测试资源管理器列

除了特征、堆栈跟踪、错误消息和完全限定名以外,也可用作测试资源管理器中的列。 默认情况下,大多数列不可见,你可以自定义要显示的列及其显示顺序。

Screenshot of the Visual Studio Test Explorer showing a menu with Columns selected and a sub-menu with Duration, Traits, and Error Message selected.

对测试列进行筛选、排序和重新排列

可以对列进行筛选、排序和重新排列。

  • 若要筛选到特定特征,请单击“特征”列顶部的“筛选器”图标。

    Column filter

  • 若要更改列的顺序,请单击列标题并将其向左或向右拖动。

  • 若要对列进行排序,请单击列标题。 并非所有列都可以进行排序。 还可通过按住 Shift 并单击其他列标头来按辅助列进行排序。

    Column sort

测试资源管理器列

除了特征、堆栈跟踪、错误消息和完全限定名以外,也可用作测试资源管理器中的列。 默认情况下,大多数列不可见,你可以自定义要显示的列及其显示顺序。

Screenshot of the Visual Studio Test Explorer showing a menu with Columns selected and a sub-menu with Duration, Traits, and Error Message selected.

对测试列进行筛选、排序和重新排列

可以对列进行筛选、排序和重新排列。

  • 若要筛选到特定特征,请单击“特征”列顶部的“筛选器”图标。

    Column filter

  • 若要更改列的顺序,请单击列标题并将其向左或向右拖动。

  • 若要对列进行排序,请单击列标题。 并非所有列都可以进行排序。 还可通过按住 Shift 并单击其他列标头来按辅助列进行排序。

    Column sort

搜索和筛选测试列表

你还可以使用测试资源管理器搜索筛选器来限制你所查看和运行项目中的测试方法。

在测试资源管理器的搜索框中键入字符串并选择 Enter 时,测试列表将筛选为仅显示包含该字符串的完全限定名的测试 。

按其他条件进行筛选:

  1. 打开搜索框右侧的下拉列表。

  2. 选择新条件。

  3. 在引号中输入筛选值。 如果要在字符串上搜索完全匹配,而不是包含匹配,请使用等于号 (=) 而不是冒号 (:)。

Filter tests in Test Explorer

Filter tests in Test Explorer

注意

搜索不区分大小,并将指定字符串与条件值的任何部分匹配。

限定符 描述
状态 搜索“测试资源管理器”类别名中的匹配项:失败的测试、跳过的测试和通过的测试 。
特征 搜索特征类别和值的匹配项。 用于指定特征类别和值的语法由单元测试框架定义。
完全限定名 搜索测试命名空间、类和方法的完全限定名的匹配项。
Project 搜索测试项目名称的匹配项。
目标框架 在测试框架中搜索匹配项。
命名空间 搜索测试命名空间的匹配项。
搜索测试类名的匹配项。

若要排除筛选结果的一个子集,请使用以下语法:

FilterName:"Criteria" -FilterName:"SubsetCriteria"

例如,FullName:"MyClass" - FullName:"PerfTest" 返回名称中包含“MyClass”的所有测试,名称中包含“PerfTest”的测试除外。

分析单元测试代码覆盖率

可以使用 Visual Studio Enterprise 版本中提供的 Visual Studio 代码覆盖率工具确定你的单元测试实际测试的产品代码量。 你可以在选定的测试上或解决方案中的所有测试上运行代码覆盖率。

在解决方案中为测试方法运行代码覆盖率:

  • 在测试资源管理器中单击鼠标右键,然后选择“分析所选测试的代码覆盖率”

“代码覆盖率结果”窗口显示行、函数、类、命名空间和模块执行的产品代码块的百分比。

有关详细信息,请参阅使用代码覆盖率确定正在测试的代码数量

测试快捷方式

可以从“测试资源管理器”运行测试,方法是:在代码编辑器中右键单击测试,并选择“运行测试”,或者在 Visual Studio 中使用默认的测试资源管理器快捷方式。 一些快捷方式是基于上下文的。 这意味着它们根据光标在代码编辑器中的位置来运行、调试分析测试。 如果光标位于某一测试方法内,则运行该测试方法。 如果光标位于类级别,则运行该类中的所有测试。 如果光标位于命名空间级别,则运行该命名空间级别中的所有测试。

常见命令 键盘快捷键
测试资源管理器.调试上下文中的所有测试 Ctrl+R、Ctrl+T
测试资源管理器.运行上下文中的所有测试 Ctrl+R、T
测试资源管理器.运行所有测试 Ctrl+R、A
测试资源管理器.重复上次运行 Ctrl+R、L

注意

无法运行抽象类中的测试,因为仅在抽象类中定义测试,但未实例化。 若要运行抽象类中的测试,请创建派生自该抽象类的类。

测试音频提示

测试资源管理器可以在测试运行完成时播放声音。 有两种声音:一种声音表示测试运行成功,所有测试都通过;另一种声音表示测试运行已完成,但至少有一个测试失败。 可以在默认的 Windows 11 声音对话框中设置这些声音。 此功能从 Visual Studio 2019 更新 16.9 预览版 3 开始提供。

  1. 打开默认的 Windows 11 声音对话框。
  2. 导航到“声音”选项卡。
  3. 找到“Microsoft Visual Studio”类别。 选择“测试运行成功”或“测试运行失败”声音,以选择预设声音或浏览到自己的音频文件 。
    Windows 11 sound dialog