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

使用测试资源管理器运行 Visual Studio 或第三方单元测试项目的单元测试,将测试分类,筛选测试列表,以及创建、保存和运行测试的播放列表。您还可以调试测试并分析测试性能和代码覆盖率。

内容

单元测试框架和测试项目

在资源管理器中运行测试

查看测试结果

分组和筛选测试列表

创建自定义播放列表

调试和分析单元测试

外部资源

单元测试框架和测试项目

Visual Studio 包含托管代码和本机代码的 Microsoft 单元测试框架。但是,测试资源管理器还可以运行所有已实现测试资源管理器适配器的单元测试框架。有关安装第三方单元测试框架的详细信息,请参见 如何:安装第三方单元测试框架

测试资源管理器可运行来自一个解决方案中多个测试项目的测试和来自属于成品代码项目一部分的测试类的测试。测试项目可使用不同的单元测试框架。为 .NET Framework 编写受测代码时,将使用同样面向 .NET Framework 的任意语言编写测试项目,而不管目标代码的语言如何。本机 C/C++ 代码项目必须使用 C++ 单元测试框架进行测试。

Back to top内容

在资源管理器中运行测试

运行测试**|**每次生成后运行测试

生成测试项目时,测试将显示在测试资源管理器中。如果测试资源管理器不可见,则依次选择 Visual Studio 菜单上的“测试”、“Windows”和“测试资源管理器”。

Unit Test Explorer

当您运行、编写和重新运行测试时,测试资源管理器将在默认的“未通过的测试”、“已通过的测试”、“跳过的测试”和“未运行的测试”组中显示结果。您可更改测试资源管理器对测试进行分组的方式。

可以从测试资源管理器工具栏执行许多查找、组织和运行测试的工作。

Run tests from the Test Explorer toolbar

Back to top内容

运行测试

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

  • 若要运行某个解决方案中的所有测试,请选择“全部运行”。

  • 若要运行某个默认组中的所有测试,请选择“运行...”,然后在菜单上选择该组。

  • 选择要运行的各个测试,打开选定测试的上下文菜单,然后选择“运行选定的测试”。

测试运行时,将对“测试资源管理器”窗口顶部的“通过/未通过”栏进行动画处理。测试运行结束时,如果测试全部通过,则“通过/未通过”栏将变为绿色;如果有未通过的测试,则“通过/未通过”栏将变为红色。

Back to top内容

在每次生成后运行测试

警告说明警告

每次 Visual Studio 旗舰版和高级专业版支持生成后,运行单元测试。

Run after build

要在每个本地生成后运行单元测试,请选择标准菜单上的“测试”,然后在测试资源管理器工具栏上选择“生成后运行测试”。

Back to top内容

查看测试结果

查看测试详细信息**|**查看测试方法的源代码

当您运行、编写和重新运行测试时,测试资源管理器将在“未通过的测试”、“已通过的测试”、“跳过的测试”和“未运行的测试”组中显示结果。测试资源管理器底部的细节窗格将显示测试运行的摘要。

查看测试详细信息

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

Test execution details

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

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

  • 测试的状态。

  • 测试方法运行的时间。

如果该测试未通过,则细节窗格还会显示:

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

  • 测试未通过时的堆栈跟踪。

Back to top内容

查看测试方法的源代码

若要在 Visual Studio 编辑器中显示测试方法的源代码,请选择测试,然后选择上下文菜单上的“打开测试”(键盘:F12)。

Back to top内容

分组和筛选测试列表

分组测试列表**|按特征分组|**搜索和筛选测试列表

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

分组测试列表

要更改组织测试的方式,则选择“分组依据”按钮 Test Explorer group button 旁边的向下箭头,然后选择新的分组标准。

Group tests by category in Test Explorer

测试资源管理器组

组合

描述

持续时间

按执行时间分组测试:“快”、“中”和“慢”。

结果

按执行结果分组测试:“未通过测试”、“跳过测试”、“通过测试”。

特性

按定义的类别/值对分组测试。指定特征类别和值的语法由单元测试框架定义。

项目

按项目名称分组测试。

Back to top内容

按特征分组

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

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

在托管的应用程序的 Microsoft 单元测试框架中,您在 TestPropertyAttribute 属性中定义特征名称/值对。该测试框架还包含这些预定义的特征:

特征

描述

OwnerAttribute

所有者类别由单元测试框架定义,需要提供所有者的字符串值。

PriorityAttribute

优先级类别由单元测试框架定义,需要你提供优先级的整数值。

TestCategoryAttribute

TestCategory 特性让你可以提供不包含值的类别。TestCategory 特性定义的类别也可以是 TestProperty 特性的类别。

TestPropertyAttribute

TestProperty 特性让你可以定义特征类别/值对。

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

要定义特征,请使用 TEST_METHOD_ATTRIBUTE 宏。例如,若要定义名为 TEST_MY_TRAIT 的特征,操作如下:

#define TEST_MY_TRAIT(traitValue) TEST_METHOD_ATTRIBUTE(L"MyTrait", traitValue)

在你的单元测试中使用定义的特征:

BEGIN_TEST_METHOD_ATTRIBUTE(Method1)
    TEST_OWNER(L"OwnerName")
    TEST_PRIORITY(1)
    TEST_MY_TRAIT(L"thisTraitValue")
END_TEST_METHOD_ATTRIBUTE()

TEST_METHOD(Method1)
{   
    Logger::WriteMessage("In Method1");
    Assert::AreEqual(0, 0);
}

C++ 特征特性宏

描述

TEST_METHOD_ATTRIBUTE(attributeName, attributeValue)

使用 TEST_METHOD_ATTRIBUTE 宏定义特征。

TEST_OWNER(ownerAlias)

使用预定义的所有者特征指定测试方法的所有者。

TEST_PRIORITY(priority)

使用预定义的优先级特征向你的测试方法分配相对优先级。

Back to top内容

搜索和筛选测试列表

您可以使用测试资源管理器筛选器限制您查看并运行的项目中的测试方法。

当您在测试资源管理器搜索框中键入字符串并按 Enter 时,系统会筛选测试列表,只显示完全限定名包含该字符串的那些测试。

根据不同的条件筛选:

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

  2. 选择新条件。

  3. 在引号之间输入筛选器值。

Filter tests in Test Explorer

说明说明

搜索不区分大小写并将指定字符串与标准值的任意部分匹配。

限定符

描述

特征

搜索匹配的特征类别和值。指定特征类别和值的语法由单元测试框架定义。

项目

搜索匹配的测试项目名称。

错误消息

搜索由失败声明返回的匹配用户定义错误消息。

文件路径

搜索匹配的测试源文件的完全限定文件名称。

完全限定名

搜索匹配的测试命名空间、类和方法的完全限定文件名称。

Output

搜索由标准输出 (stdout) 或标准错误 (stderr) 编写的用户定义错误消息。指定输出消息的语法由单元测试框架定义。

结果

搜索匹配的测试资源管理器类别名称:“失败的测试”、“跳过的测试”、“通过的测试”。

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

FilterName:"Criteria" -FilterName:"SubsetCriteria"

例如,

FullName:"MyClass" - FullName:"PerfTest"

返回在其名称中包含“MyClass”的所有测试,名称还包括“PerfTest”的测试除外。

Back to top内容

创建自定义播放列表

您可以创建并保存要运行或分组查看的测试列表。当您选择某个播放列表时,列表中的测试就会显示在测试资源管理器中。您可以向多个播放列表添加测试,且当您选择默认的“所有测试”播放列表时,项目中的所有测试均可用。

Choose a playlist

要创建播放列表,则在测试资源管理器中选择一个或多个测试。在上下文菜单中,选择“添加到播放列表”、“NewPlaylist”。以您在“创建新播放列表”对话框中指定的名称和位置保存文件。

要向播放列表添加测试,则在测试资源管理器中选择一个或多个测试。在上下文菜单中,选择“添加到播放列表”,然后选择欲添加测试的播放列表。

要打开播放列表,请从 Visual Studio 菜单选择“测试”、“播放列表”,并从最近使用的播放列表的列表中选择,或选择“打开播放列表”以指定播放列表的名称和位置。

Back to top内容

调试和分析单元测试

调试单元测试**|诊断测试方法性能问题|**分析单元测试代码覆盖率

调试单元测试

可使用测试资源管理器为测试启动调试会话。使用 Visual Studio 调试器单步执行代码可使您在单元测试和受测项目之间无缝地切换。开始调试:

  1. 在 Visual Studio 编辑器中,在要调试的一个或多个测试方法中设置断点。

    说明说明

    由于测试方法可按任意顺序运行,因此可在您想调试的所有测试方法中设置断点。

  2. 在测试资源管理器中,选择测试方法,然后选择上下文菜单上的“调试选定的测试”。

有关调试器的详细信息,请参见 使用 Visual Studio 进行调试

Back to top内容

诊断测试方法性能问题

要诊断测试方法需要大量时间的原因,请在测试资源管理器中选择方法,然后在上下文菜单中选择配置文件。请参见 使用分析工具对应用程序性能进行分析

分析单元测试代码覆盖率

说明说明

单元测试代码覆盖率只在 Visual Studio 旗舰版和 Visual Studio 高级专业版中可用。

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

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

  1. 选择 Visual Studio 菜单上的“测试”,然后选择“分析代码覆盖率”。

  2. 从子菜单选择以下命令之一:

    • “选定的测试”运行在测试资源管理器中选择的测试方法。

    • “所有测试”在解决方式中运行所有测试方法。

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

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

Back to top内容

外部资源

指南

Testing for Continuous Delivery with Visual Studio 2012 – Chapter 2: Unit Testing: Testing the Inside(使用 Visual Studio 2012 对连续交付进行测试 — 第 2 章:单元测试:测试内部)

请参见

概念

使用单元测试验证代码

如何:作为 64 位进程运行单元测试