用测试资源管理器对现有的 C++ 应用程序进行单元测试

建议,更改现有应用程序之前,您,以确保具有单元测试的一种好测试复盖率缺口。 这使您可以confidence您的更改未引入bug。 如果应用程序没有单元测试,则可添加自己使用本主题演示的方法。 本主题介绍如何将单元测试在 Microsoft Visual Studio 2012的现有Visual C++代码中,从决定如何开始测试您的代码,然后创建,编写,最后,运行测试。

决定如何测试代码

打开现有C++项目,并检查它确定要添加该单元测试。 您可能希望使用一些建模工具,帮助您发现代码中的依赖关系,并帮助您理解部件的交互方式。 有关更多信息,请参见 可视化和了解代码

建议您将更改为小型任务。 在每个少量更改之前,编写单元测试都保持相同行为方面。 在您进行了该更改后,这些测试将继续。 例如,因此,如果想将一个排序函数,以便按姓排序方列表而不是按名称,则可以编写验证的单元测试都输入名称出现在输出。 在您进行了该更改后,您可能希望添加新的单元测试新的行为。

如果是可行的,许多或您的所有单元测试应使用导出可用的功能。 但是,如果您更改整个应用程序的一小部分,则可能希望使用不导出函数。 例如,您可能希望测试调用的内部函数,或者测试设置和获取内部变量的值。

可通过多种方式测试产品代码,根据是否显示要测试的接口。 选择下列方法之一:

  • 该单元测试将使用从代码导出测试中可用的功能:
    添加单独的测试项目。 在测试项目中,添加对该项目中。

    进入程序 创建引用代码项目的测试项目。

  • 测试代码编译为.exe文件签名:
    添加单独的测试项目。 与输出对象文件链接到。

    进入程序 创建引用代码对象文件的测试项目。

  • 该单元测试必须使用私有函数和数据,并且,测试代码可以生成为静态库:
    更改项目测试,以便将它编译为一个.lib文件。 添加单独测试引用项下测试的测试项目。

    此方法在单独的项目具有您允许的优点测试使用私有成员,但是,仍可以将测试。 但是,可能不适用于您必须具有动态链接库的某些应用程序(.dll)。

    进入程序 若要更改代码测向静态库。

  • 该单元测试必须使用私有函数和数据,因此,必须生成代码作为动态链接库(DLL):
    添加单元测试在项目和产品代码相同。

    进入程序 若要添加单元在同一项目测试。

创建测试

若要更改代码测向静态库

  • 如果您必须使用不受项目导出下的成员,测试,该测试项目编译为动态库,请考虑将其转换为静态库。

    1. 在解决方案资源管理器中,在项目的快捷菜单中选择该测试,属性。 打开项目属性窗口。

    2. 选择 *** 配置属性 ***常规

    3. 设置 *** 配置类型 ****** 静态库(.lib) ***

继续该程序 若要创建测试的导出函数项目。

若要引用从测试项目导出的函数

  • 如果项目测试导出要测试的功能,则可以添加对代码项目从测试项目。

    1. 创建c. C++测试项目。

      • *** 文件 *** 菜单中,选择 新建项目*** Visual C++,***测试*** C++单元测试项目 ***
    2. 在解决方案资源管理器中,在测试项目的快捷菜单上,选择 *** 引用 ***。 打开项目属性窗口。

    3. 选择 *** 公共属性 ****** 结构和引用 ***,然后选择 *** 添加新引用 *** 按钮。

    4. 选择 ***** 项目 *****然后将测试的项目中。

      选择**“添加”**按钮。

    5. 在测试项目的属性,请添加项的位置下测试对于包含内容。

      选择 *** 配置属性 ****** VC++目录 ****** 包含目录 ***

      选择 *** 编辑 ***,然后将该项目添加的标头目录中。

转到 编写了单元测试。

将测试链接到对象或库文件

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

    1. 创建c. C++测试项目。

      • *** 文件 *** 菜单中,选择 新建项目*** Visual C++,***测试*** C++单元测试项目 ***
    2. 在解决方案资源管理器中,在测试项目的快捷菜单上,选择 属性。 打开项目属性窗口。

    3. 选择 *** 配置属性 ****** 链接器 ****** 输入 ****** 附加依赖项 ***

      选择 *** 编辑 ***,并添加 .obj.lib 文件的名称。 不要使用完整路径名。

    4. 选择 *** 配置属性 ****** 链接器 ***常规*** 其他库内容 ***

      选择 *** 编辑 ***,并添加 .obj.lib 文件的目录路径。 路径位于项目的生成文件夹中下(通常为测试。

    5. 选择 *** 配置属性 ****** VC++目录 ****** 包含目录 ***

      选择 *** 编辑 ***,然后将该项目添加的标头目录中。

转到 编写了单元测试。

若要添加单元在同一项目测试

  1. 修改产品代码项目属性包括有关单元测试所需的标头和库文件。

    1. 在解决方案资源管理器中,在项目的快捷菜单中选择该测试,属性。 打开项目属性窗口。

    2. 选择 *** 配置属性 ****** VC++目录 ***

    3. 编辑器和库内容:

      包含目录

      $(VCInstallDir)UnitTest\include;$(IncludePath)

      库目录

      $(VCInstallDir)UnitTest\lib;$(LibraryPath)

  2. 添加c. C++单元测试文件:

    • 在解决方案资源管理器中,在项目的快捷菜单上,选择 *** 添加 ****** 新项目 ***,然后选择 *** C++单元测试 ***

转到 编写了单元测试。

编写了单元测试

  1. 在每个单元测试代码文件中,添加项的标头的一个 #include 语句中。

  2. 添加测试选件类,并为单位的测试方法代码文件。 例如:

    #include "stdafx.h"
    #include "CppUnitTest.h"
    #include "MyProjectUnderTest.h"
    using namespace Microsoft::VisualStudio::CppUnitTestFramework;
    namespace MyTest
    {
      TEST_CLASS(MyTests)
      {
      public:
          TEST_METHOD(MyTestMethod)
          {
              Assert::AreEqual(MyProject::Multiply(2,3), 6);
          }
      };
    }
    

有关更多信息,请参见 用测试资源管理器对本机代码进行单元测试

运行测试

  1. *** 视图 *** 菜单中,选择 *** 其他Windows ****** 测试资源管理器 ***

  2. 在测试资源管理器中,选择 *** 运行任何 ***

有关更多信息,请参见 快速入门:通过测试资源管理器进行由测试驱动的开发