[SoftwareTesting][UnitTest][初级]VC++ 2008 Google Test:gtest 测试项目与正式项目分离方案

1、VC++ 环境下测试项目与正式项目混杂的弊端

  • 测试项目和正式项目无法共存
  • 无法独立运行测试项目或者正式项目

[SoftwareTesting][UnitTest][初级]VC++ 2008 Google Test:gtest 测试项目与正式项目分离方案_第1张图片

  图 1 :测试与正式项目混杂


2、测试项目与正式项目分离方案

Visual Studio 集成环境并不像 Linux 下的构建方式那样来的方便, 可以直观的使用 Make 或 Auto Tool 构造自己需要的编译方式,让多个项目相互协作,互不干扰。但是, VS 中通过在各个配置界面中的配置,也是可以用简单且很不直观的方式实现测试项目与正式项目的分离。

初始的混杂方案如上图 1 所示,请参考:VC++ 2008 Google Test:gtest 安装与配置 进行项目的创建。接下来进行测试与正式项目的分离。

2.1、新建 gtest 测试项目

在解决方案中新建 Win32 控制台应用程序, 名称:gtest,解决方案:填入解决方案,不使用预编译头,空项目。

[SoftwareTesting][UnitTest][初级]VC++ 2008 Google Test:gtest 测试项目与正式项目分离方案_第2张图片

图 2:添加 gtest 项目后解决方案结构

[SoftwareTesting][UnitTest][初级]VC++ 2008 Google Test:gtest 测试项目与正式项目分离方案_第3张图片

图 3:gtestSample 解决方案目录结构

2.2、剪切测试相关文件到 gtest 项目

剪切 gtestSample 项目中的 sample1_unittest.cc、gtest_main.cc 到 gtest 项目源文件目录中,并将它们添加到 gtest 项目中。

 

图 4:添加测试相关文件到 gtest 项目

2.3、配置 gtest 项目

此时 gtest 项目还不能引用到 gtestSample 项目的头文件 “sample1.h”,右击 gtest 项目-> 属性-> 配置属性-> C/C++-> 常规-> 附加包含目录:../gtestSample。


                                            图 5:gtest 附加包含目录配置

此时生成解决方案,会出现大量的“error LNK2001: 无法解析的外部符号”连接错误,还需要将 gtestSample 项目中被引用到的文件添加到 gtest 项目中,即添加 “sample1.cc” 到 gtest 项目。

同时,要给 gtest 项目添加附加依赖项:gtestd.lib,因为现在是 gtest 项目执行测试。


      图 6:代码分离初步完成


此时生成解决方案还会有“项目: gtestSample:MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用”的链接错误。这是由于 gtestSample 为 "应用程序(.exe)"的配置,所以给 gtestSample 项目增加一个包含 main() 入口函数的 main.cc 文件。

#include <iostream>
#include "sample1.h"

int main(int argc, char * argv[])
{
    std::cout << "3 is prime ? " << IsPrime(3) << std::endl;
    std::cout << "4 is prime ? " << IsPrime(4) << std::endl;
    return 0;
};

此时方可编译成功,测试一下。

[SoftwareTesting][UnitTest][初级]VC++ 2008 Google Test:gtest 测试项目与正式项目分离方案_第4张图片

图 7:运行 gtest 项目结果


[SoftwareTesting][UnitTest][初级]VC++ 2008 Google Test:gtest 测试项目与正式项目分离方案_第5张图片

图 8:运行 gtestSample 项目结果


大公告成,正式项目与测试项目相辅相成,互不干扰~~

 

编辑记录:

V1.0 2011-9-15 22:27:05  初稿

V0.1 2011-9-14 22:18:53  完成混杂弊端说明,分离方案前述。


你可能感兴趣的:([SoftwareTesting][UnitTest][初级]VC++ 2008 Google Test:gtest 测试项目与正式项目分离方案)