Visual Studio 使用教程:在Visual Studio中编写C / C ++的单元测试

您可以使用“ 测试资源管理器”窗口来编写和运行C ++单元测试。它的工作方式与其他语言一样。

Visual Studio 是功能完备的 IDE,可用于编码、调试、测试和部署到任何平台,Visual Studio使用 .NET 开发 iOS、Android 和 Web 应用和游戏。

Visual Studio正式版


您可以使用“ 测试资源管理器”窗口来编写和运行C ++单元测试。它的工作方式与其他语言一样。

注意:C ++不支持某些功能,例如实时单元测试,编码的UI测试和IntelliTest。

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

  • Microsoft C ++单元测试框架
  • 谷歌测试
  • 增强测试
  • 测试

除了使用已安装的框架外,您还可以为要在Visual Studio中使用的任何框架编写自己的测试适配器。测试适配器可以将单元测试与“ 测试资源管理器”窗口集成在一起。在Visual Studio Marketplace上可以使用几个第三方适配器。

Visual Studio 2017及更高版本(专业版和企业版)。C ++单元测试项目支持CodeLens。

Visual Studio 2017及更高版本(所有版本

  • Google Test Adapter是带有C ++工作负载的桌面开发的默认组件。它具有一个项目模板,您可以将其添加到解决方案中。使用解决方案资源管理器中解决方案节点上的“ 添加新项目”右键菜单来添加它。它还具有可以通过“ 工具” >“ 选项”配置的选项。
  • Boost.Test是包含C ++工作负载的桌面开发的默认组件。它与Test Explorer集成在一起,但是目前没有项目模板。必须手动配置。
  • CTest支持包含在C ++ CMake工具组件中,该组件是使用C ++工作负载进行桌面开发的一部分。有关更多信息,请参见如何:在Visual Studio中使用CTest。

基本测试流程

以下各节显示了入门C ++单元测试的基本步骤。Microsoft和Google Test框架的基本配置都相似。Boost.Test要求您手动创建一个测试项目。

在Visual Studio 2019中创建测试项目

您可以在一个或多个测试项目中定义和运行测试。您可以使用与要测试的代码相同的解决方案来创建项目。要将新的测试项目添加到现有解决方案中,请在解决方案资源管理器中右键单击解决方案节点。在弹出菜单中,选择“ 添加” >“ 新建项目”。将语言设置为C ++,然后在搜索框中输入“ test”。下图显示了安装带有C ++的桌面开发和UWP Development工作负载时可用的测试项目:

VIsual Studio 2019中的C ++测试项目

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

要允许访问被测项目中的功能,请在测试项目中添加对该项目的引用。在解决方案资源管理器中的测试项目节点上单击鼠标右键,以弹出菜单。选择添加 > 参考。

添加参考

链接到对象或库文件

如果测试代码没有导出要测试的功能,则可以将输出.obj或.lib文件添加到测试项目的依赖项中。

为头文件添加#include指令

接下来,在单元测试.cpp文件中,#include为任何标头文件添加一个指令,该标头文件声明要测试的类型和功能。键入#include “,然后IntelliSense将激活以帮助您选择。对其他标题重复上述步骤。

添加包含指令

为了避免在源文件的每个include语句中键入完整路径,可以在Project > Properties > C / C ++ > General > Additional Include Directories中添加所需的文件夹。

编写测试方法

注意:本节显示了用于C / C ++的Microsoft单元测试框架的语法。

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

添加包含指令

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

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类包含许多其他方法,用于比较预期结果与实际结果。

您可以向测试方法添加特征以指定测试所有者,优先级和其他信息。然后,您可以在Test Explorer中使用这些值对测试进行排序和分组。

运行测试
在“ 测试”菜单上,选择“ Windows” >“ 测试资源管理器”。下图显示了尚未运行测试的测试项目。

运行测试之前,请先测试浏览器

注意:CTest与Test Explorer的集成尚不可用。从CMake主菜单运行CTest测试。

如果在窗口中看不到所有测试,请通过在解决方案资源管理器中右键单击其节点并选择Build或Rebuild来构建测试项目。

在“ 测试资源管理器”中,选择“全部运行”,或选择要运行的特定测试。右键单击测试以获取其他选项,包括在启用断点的调试模式下运行。运行所有测试后,该窗口显示哪些测试通过和哪些测试失败:

测试运行后的测试资源管理器

对于失败的测试,该消息提供了有助于诊断原因的详细信息。右键单击失败的测试以弹出菜单。选择“ 调试选定的测试”以逐步执行发生故障的功能。

使用CodeLens(Visual Studio 2017及更高版本(专业版和企业版))
使用CodeLens,您可以快速查看单元测试的状态,而无需离开代码编辑器。您可以通过以下任何一种方式为C ++单元测试项目初始化CodeLens:

  • 编辑并构建您的测试项目或解决方案。
  • 重建您的项目或解决方案。
  • 从“ 测试资源管理器”窗口中运行测试。

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

C ++ CodeLens图标

单击该图标以获取更多信息,或者运行或调试单元测试:

Visual Studio 使用教程:在Visual Studio中编写C / C ++的单元测试

本次内容到此就结束了,喜欢该产品的朋友可以点击下载Visual Studio试用版免费体验~


想要购买Visual Studio正版授权,或了解更多产品信息请点击【咨询在线客服】

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年1月17日
下一篇 2020年1月17日

相关推荐

发表回复

登录后才能评论