• 认真地记录技术中遇到的坑!

Visual Studio 2015 C++ 单元测试方法

C/C++ 悠悠 2年前 (2017-12-25) 915次浏览 0个评论

Visual Studio 2015 C++ 单元测试方法

确定测试的方法

测试产品代码有多种方式,具体视其是否显示要测试的接口而定。 选择以下方式之一:

  • 单元测试将仅使用从受测试代码导出的函数
    • 添加单独的测试项目。 在测试项目中,添加对所测试项目的引用
  • 受测试的代码生成为一个 .exe 文件
    • 添加单独的测试项目。 将其与输出对象文件关联起来
  • 单元测试必须使用私有函数和数据,并且所测试代码可以生成为静态库
    • 更改所测试的项目,以将其编译为 .lib 文件。 添加引用所测试项目的单独测试项目
    • 此方法的好处是,允许测试使用私有成员,但测试仍保留在单独的项目中。
    • 然而,对于必须有动态链接库 (.dll) 的某些应用程序,可能不适用
  • 单元测试必须使用私有函数和数据,并且所测试代码可以生成为动态链接库 (DLL)
    • 在产品代码所在项目中添加单元测试

一般常用的是添加单独的测试项目,下面详细介绍添加单元测试的步骤。

创建测试项目

在当前解决方案内添加测试项目

这种方式适用于小型项目,只需要在当前解决方案中添加单元测试项目即可。

  • 对于已经存在的项目,在“解决方案资源管理器”窗口中,右键解决方案(在项目的上一级)
  • 在弹出的选择窗口中依次选择“添加”、“新建项目”
  • 在添加新项目窗口中,依次选择“Visual C++”、“测试”、“本机单元测试项目”,修改项目名称,然后点击确定

[Visual Studio 2015 C++ 单元测试方法](http://uusama.com/wp-content/

创建完测试项目之后,还需要关联测试与对象或库文件

关联测试与对象或库文件

如果所测试代码不导出要测试的函数,可以将输出的 .obj 或 .lib 文件添加到测试项目的依赖项中。

  • 如果已经有测试项目,可以忽略这一步。在“文件”菜单中,依次选择“新建”、“项目”、“Visual C++”、“测试”、“C++ 单元测试项目”,创建 C++ 测试项目。
  • 在“解决方案资源管理器”中,从测试项目的快捷菜单上选择“属性”。 此时将打开项目属性窗口。
  • 依次选择“配置属性”、“链接器”、“输入”、“附加依赖项”。
    选择“编辑”,并添加 .obj 或 .lib 文件的名称。 请不要使用全路径名。如:../project_name/Debug/String.obj
  • 依次选择“配置属性”、“链接器”、“常规”、“附加库目录”。
    选择“编辑”,并添加 .obj 或 .lib 文件的目录路径。 该路径一般位于所测试项目的生成文件夹中。
  • 依次选择“配置属性”、“VC++ 目录”、“包含目录”。
    选择“编辑”,然后添加所测试项目的标头目录。

Visual Studio 2015 C++ 单元测试方法

Visual Studio 2015 C++ 单元测试方法

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

如果所测试项目将导出你要测试的函数,则可添加对测试项目中该代码项目的引用

  • 在“文件”菜单中,依次选择“新建”、“项目”、“Visual C++”、“测试”、“C++ 单元测试项目”。创建 C++ 测试项目
  • 在“解决方案资源管理器”中,从测试项目的快捷菜单上选择“引用”。 此时将打开项目属性窗口
  • 依次选择“通用属性”、“框架和引用”,然后选择“添加新引用”按钮
  • 选择“项目”,然后选择要测试的项目。选择“添加”按钮。
  • 在测试项目的属性中,将所测试项目的位置添加到“包含目录”中。
    依次选择“配置属性”、“VC++ 目录”、“包含目录”。
    选择“编辑”,然后添加所测试项目的标头目录。

Visual Studio 2015 C++ 单元测试方法

在同一项目中添加单元测试

另外还可以不通过创建单元测试项目,而是在当前项目中添加单元测试。首先修改产品代码项目属性,以包含单元测试所需的标头和库文件。

  • 在“解决方案资源管理器”中,从所测试项目的快捷菜单上选择“属性”。 此时将打开项目属性窗口。
  • 依次选择“配置属性”、“VC++ 目录”。
  • 编辑“包含目录”和“库目录”:
    • 包含目录 : $(VCInstallDir)UnitTest\include;$(IncludePath
    • 库目录 : $(VCInstallDir)UnitTest\lib;$(LibraryPath)

然后添加 C++ 单元测试文件,在“解决方案资源管理器”中,从项目的快捷菜单依次选择“添加”、“新建项”,然后选择“C++ 单元测试”。

创建单元测试文件

可以在创建的单元测试项目中新建测试文件,如 StringTest.cpp,需要注意在测试文件中只能包含头文件,否则会出错,比如下面只能包含StringCode.h,不能包含StringCode.cpp,记得引入头文件。

#include "stdafx.h"
#include "CppUnitTest.h"
#include "../LeetCode/StringCode.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace LeetCodeTest
{       
    TEST_CLASS(UnitTest1)
    {
    public:

        TEST_METHOD(TestMethod1)
        {
            Assert::AreEqual(1, 1);
        }
    };
}
  • 每个测试都使用 TEST_METHOD(YourTestName){…}来定义,你不必编写常规函数签名。 签名由宏 TEST_METHOD 来创建。 该宏将生成一个返回 void 的实例函数。 它还将生成返回有关测试方法的信息的静态函数。 此信息允许测试资源管理器查找方法。
  • 使用 TEST_CLASS(YourClassName){…}将测试方法分组为各个类。当测试运行时,将为每个测试类创建一个实例。 测试方法以未指定的顺序进行调用。 可以定义在每个模块、类或方法之前和之后调用的特殊方法。

在“测试” 菜单中,选择“运行” ->“全部测试” ,将生成并运行测试。此时将显示测试资源管理器。测试显示在“通过的测试” 下方。

微软官方文档可以参考这儿还有这儿


喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址