相关文章推荐
高大的拐杖  ·  wpf ...·  1 年前    · 
苦闷的领带  ·  maven-remote-resources ...·  2 年前    · 

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

  • Visual Studio 2017 及更高版本(专业和企业版)

    C++单元测试项目支持 CodeLens 。

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

    Google Test 适配器作为“使用 C++ 的桌面开发”工作负载的默认组件包含在内 。 它具有可添加到解决方案的项目模板。 右键单击 解决方案资源管理器 中的解决方案节点,然后选择快捷菜单上 添加 > 新建项目 以添加项目模板。 它还具有多个配置选项,可以通过 工具 > 选项 进行配置。 有关详细信息,请参阅 如何:在 Visual Studio 中使用 Google Test 。

    Boost.Test 作为“使用 C++ 的桌面开发”工作负载的默认组件包含在内 。 它与 测试资源管理器 集成,但当前没有项目模板。 必须手动配置它。 有关详细信息,请参阅 如何:在 Visual Studio 中使用 Boost.Test。

    CTest 支持包含在 C++ CMake 工具 组件中,该组件是具有C++ 工作负荷的 桌面开发的一部分。 有关详细信息,请参阅 如何:在 Visual Studio 中使用 CTest。

  • 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 中创建测试项目

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

    若要向现有解决方案添加新的测试项目,请执行以下操作:

  • 右键单击 解决方案资源管理器 中的解决方案节点。
  • 在上下文菜单中,选择 添加 > 新建项目 。
  • 将“语言”设置为“C++”并在搜索框中键入“测试” 。 以下屏幕截图显示了安装 C++ 桌面开发 和安装 UWP 开发 工作负载时可用的测试项目:
  • 如果测试代码未导出要测试的函数,请将输出 .obj 或 .lib 文件添加到测试项目的依赖项。 有关详细信息,请参阅 将测试与对象或库文件相关联 。 不包括具有 main 函数或其他标准入口点的对象文件,例如 wmain 、 WinMain 或 DllMain 。 向项目添加新的源文件时,更新测试项目依赖项以包含相应的对象文件。

    为头文件添加 #include 指令

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

    本部分介绍适用于 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 类包含许多其他方法,用于将预期结果与实际结果进行比较。

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

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

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

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

    有关单元测试的详细信息,请参阅 单元测试基础知识。

    使用 CodeLens

    Visual Studio 2017 及更高版本(专业版和企业版)

    CodeLens 让你无需离开代码编辑器即可快速查看单元测试的状态。

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

  • 编辑和生成测试项目或解决方案。
  • 重新生成项目或解决方案。
  • 从 测试资源管理器 窗口中运行测试。
  • 初始化 CodeLens 后,可以看到每个单元测试上方的测试状态图标。