问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

在 Visual Studio 中编写 C/C++单元测试

创作时间:
作者:
@小白创作中心

在 Visual Studio 中编写 C/C++单元测试

引用
1
来源
1.
https://learn.microsoft.com/zh-cn/visualstudio/test/writing-unit-tests-for-c-cpp-with-the-microsoft-unit-testing-framework-for-cpp

在 Visual Studio 中编写 C/C++单元测试

可以使用测试资源管理器窗口编写和运行C++单元测试。 它的工作方式与其他语言的相同。 有关使用测试资源管理器的详细信息,请参阅使用测试资源管理器运行单元测试。

备注
C++不支持某些功能,例如 Live Unit Testing、编码的 UI 测试和 IntelliTest。

Visual Studio 包括以下C++测试框架,无需额外下载:

  • 适用于 C++ 的 Microsoft 单元测试框架
  • Google Test
  • Boost.Test
  • CTest

可以使用已安装的框架,或为要在 Visual Studio 中使用的任何框架编写自己的测试适配器。 测试适配器将单元测试与测试资源管理器窗口集成。Visual Studio Marketplace上提供了多个非Microsoft适配器。 有关详细信息,请参阅安装单元测试框架。

  • Visual Studio 2017 及更高版本(专业和企业版)
    C++单元测试项目支持CodeLens。
  • Visual Studio 2017 及更高版本(所有版本)
  • Visual Studio 的早期版本
    可以在 Visual Studio Marketplace 上下载 Google Test 适配器和 Boost.Test 适配器扩展。 在测试适配器中找到适用于 Boost.Test的设备,并在测试适配器中找到适用于 Google Test的设备。

提示
还可以使用 Copilot
/tests
斜杠命令从代码生成单元测试。 例如,可以键入
/tests using Boost framework
来生成 Boost.Test 测试。 有关详细信息,请参阅在 Copilot Chat 中使用斜杠命令。

基本测试工作流

以下部分演示了开始C++单元测试的基本步骤。 基本配置与 Microsoft 和 Google Test 框架类似。 Boost.Test 要求手动创建测试项目。

在 Visual Studio 2022 中创建测试项目

在一个或多个测试项目中定义和运行单元测试。 测试项目创建一个单独的应用,用于调用可执行文件中的代码并报告其行为。 在与要测试的代码相同的解决方案中创建测试项目。

若要向现有解决方案添加新的测试项目,请执行以下操作:
2. 右键单击解决方案资源管理器中的解决方案节点。
4. 在上下文菜单中,选择添加>新建项目
6. 将“语言”设置为“C++”并在搜索框中键入“测试”。 以下屏幕截图显示了安装C++ 桌面开发和安装UWP 开发工作负载时可用的测试项目:

在 Visual Studio 2019 中创建测试项目

在一个或多个测试项目中定义和运行测试。 在与要测试的代码相同的解决方案中创建项目。

若要向现有解决方案添加新的测试项目,请执行以下操作:
2. 右键单击解决方案资源管理器中的解决方案节点。
4. 在上下文菜单中,选择“添加>新建项目”
6. 将“语言”设置为“C++”并在搜索框中键入“测试”。 以下屏幕截图显示了安装C++桌面开发和UWP 开发工作负载时可用的测试项目:

在解决方案中创建对其他项目的引用

若要启用对所测试项目中函数的访问,请在测试项目中添加对项目的引用。 在解决方案资源管理器中,展开测试项目。 右键单击引用,然后选择添加>引用。 在“添加引用对话框中,选择要测试的项目。


将测试与对象或库文件相关联

如果测试代码未导出要测试的函数,请将输出
.obj

.lib
文件添加到测试项目的依赖项。 有关详细信息,请参阅将测试与对象或库文件相关联。 不包括具有
main
函数或其他标准入口点的对象文件,例如
wmain

WinMain

DllMain
。 向项目添加新的源文件时,更新测试项目依赖项以包含相应的对象文件。

为头文件添加 #include 指令

在单元测试
.cpp
文件中,为声明要测试的类型和函数的任何头文件添加
#include
指令。 键入
#include "
,随后 IntelliSense 会激活,以帮助进行选择。 对更多标题重复此操作。

提示
为了避免在源文件中的每个 include 语句中键入完整路径,请在Project>Properties>C/C++ 中添加所需的文件夹,>常规>其他包含目录

编写测试方法

备注
本部分介绍适用于 C/C++ 的 Microsoft 单元测试框架的语法。 有关详细信息,请参阅Microsoft.VisualStudio.TestTools.CppUnitTestFramework API 参考。
有关 Google Test 文档,请参阅Google Test 入门。 有关 Boost.Test,请参阅Boost Test 库:单元测试框架。

测试项目中的
.cpp
文件为您定义了一个存根类和方法。 它们演示了如何编写测试代码的示例。 签名使用TEST_CLASS和TEST_METHOD宏,使方法可从测试资源管理器窗口中发现。


TEST_CLASS和TEST_METHOD是Microsoft本机测试框架的一部分。测试资源管理器以类似的方式发现其他受支持框架中的测试方法。

TEST_METHOD 返回 void。 若要生成测试结果,请使用
Assert
类中的静态方法针对预期结果测试实际结果。 在下面的示例中,假定
MyClass
具有采用
std::string
的构造函数。 此示例演示如何测试构造函数是否按照预期方式初始化类:


TEST_METHOD(TestClassInit)
{
    std::string name = "Bill";
    MyClass mc(name);
    Assert::AreEqual(name, mc.GetName());
}

在前面的示例中,
Assert::AreEqual
调用的结果确定测试是通过还是失败。
Assert
类包含许多其他方法,用于将预期结果与实际结果进行比较。

可以将特征添加到测试方法中,以指定测试所有者、优先级和其他信息。 然后,可以使用这些值在测试资源管理器对测试进行排序和分组。 有关详细信息,请参阅使用测试资源管理器运行单元测试。

运行测试

  1. 测试菜单上,选择测试资源管理器。 下图显示了在运行测试之前的测试项目。

备注
CTest 与测试浏览器集成尚未可用。 从 CMake 主菜单运行 CTest 测试。

  1. 如果窗口中缺少任何测试,请在解决方案资源管理器中右键单击其节点并选择“生成”“重新生成”来生成测试项目。

  2. 测试资源管理器中,选择运行所有,或选择要运行的特定测试。 右键单击某个测试以查看更多选项,包括在启用断点的调试模式下运行该测试。 运行所有测试后,窗口会显示通过的测试以及失败的测试。

对于失败的测试,该消息显示有助于诊断原因的详细信息。 右键单击失败的测试,调出弹出菜单。 选择“调试”,以单步执行发生故障的函数。

有关使用测试资源管理器的详细信息,请参阅使用测试资源管理器运行单元测试。
有关单元测试的详细信息,请参阅单元测试基础知识。

使用 CodeLens

Visual Studio 2017 及更高版本(专业版和企业版)
CodeLens让你无需离开代码编辑器即可快速查看单元测试的状态。

使用以下任一方式初始化 C++ 单元测试项目的 CodeLens:

  • 编辑和生成测试项目或解决方案。
  • 重新生成项目或解决方案。
  • 测试资源管理器窗口中运行测试。

初始化 CodeLens 后,可以看到每个单元测试上方的测试状态图标。

选择图标了解详细信息,或运行或调试单元测试:


相关内容

  • 单元测试代码
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号