1、VC++ 环境下测试项目与正式项目混杂的弊端
图 1 :测试与正式项目混杂
2、测试项目与正式项目分离方案
Visual Studio 集成环境并不像 Linux 下的构建方式那样来的方便, 可以直观的使用 Make 或 Auto Tool 构造自己需要的编译方式,让多个项目相互协作,互不干扰。但是, VS 中通过在各个配置界面中的配置,也是可以用简单且很不直观的方式实现测试项目与正式项目的分离。
初始的混杂方案如上图 1 所示,请参考:VC++ 2008 Google Test:gtest 安装与配置 进行项目的创建。接下来进行测试与正式项目的分离。
2.1、新建 gtest 测试项目
在解决方案中新建 Win32 控制台应用程序, 名称:gtest,解决方案:填入解决方案,不使用预编译头,空项目。
图 2:添加 gtest 项目后解决方案结构
图 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; };
图 7:运行 gtest 项目结果
图 8:运行 gtestSample 项目结果
大公告成,正式项目与测试项目相辅相成,互不干扰~~
编辑记录:
V1.0 2011-9-15 22:27:05 初稿
V0.1 2011-9-14 22:18:53 完成混杂弊端说明,分离方案前述。