google的开源测试框架gtest在C++Builder(xe5)下怎么玩呢? 网上大多数都是在Visual studio下运行,C++Builder(xe5)下涉及很少,今天我们就来详细说说。
就目前来说,gtest的最新版本是:gtest-1.7.0 不过很可惜我在xe5下未能编译成功,也暂时未能找到原因,但gtest-1.6.0是可以的,下面进行详谈。
首先去官网(https://code.google.com/p/googletest/)下载,也可以在这里下载: http://download.csdn.net/detail/johnnyhu90/8053765 ,解压之后,可以看到一个codegear的文件夹,这里面就是gtest用于C++ builder(xe5)的一些工程文件, 在编译器中打开这些工程文件如下:
1、 编译生成gtest.lib、gtest_main.lib两个文件
File->Open Project->gtest.groupproj->"打开"如下:
有三个工程文件gtest.lib、gtest_main.lib、gtest_unittest.exe三个工程文件,分别右击选中gtest.lib->build就可以编译成gtest.lib,同理编译gtest_main.lib。生成的gtest.lib、gtest_main.lib就是我们所需要的。
2 在Test工程中添加gTest相关文件:
File->New->Other->选中Console Application->OK->Target FrameWork中选中"visual component library"则我们创建了带有C++builder(xe5)可视化组件库的控制台工程,那么接下来就添加gTest相关的文件了,在解压的gtest-1.6.0中选中include文件夹,src文件夹将其添加到当前工程中,再新建文件夹lib,将生成的gtest.lib、gtest_main.lib两个文件添加到其中,在将codegear中的gtest_all.cc和gtest_link.cc添加到当前文件中,结构如下:
3. 添加相应的路径和源文件:
假设我们创建了一个叫myGoogleTest的工程文件,那么我们在myGoogleTest工程文件中要用到相应的gtest框架中的的相关函数,那么就要正确的添加其路径,好让程序的在build的时候能够链接的到;
(1)添加源文件:gtest_all.cc和gtest_link.cc
单击project->Add to Project->选中gtest_all.cc和gtest_link.cc->"打开“将他们添加到现有工程中;
(2)添加include路径:
单击Project->Option->include path 添加include文件夹路径;
(3)添加lib文件及路径:
a、单击project->Add to Project->lib文件夹->选中gtest.lib、gtest_main.lib->"打开“将他们添加到现有工程中;
注:gtest_main.lib可选,如果创建的是控制台工程(Console Application)不带有可视化控件(visual component library)。我们可以不用写main函数,简化步骤,这里由于创建的是可视化控件库的工程,所以gtest_main.lib用不到
b、单击Project->Option->Library path 添加lib夹路径文件夹路径;
注:src文件夹直接在源文件中引用如:”#include "src/gtest-all.cc"“不需要手动添加。
接下来,我们在带有main函数是文件中添加如下代码:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <vcl.h>
#include <windows.h> #pragma hdrstop #pragma argsused #include <tchar.h> #include <stdio.h> #include "gtest/gtest.h" // 简单测试用例1 int Foo( int a, int b) { if (a == 0 || b == 0) { throw "don't do that"; } int c = a % b; if (c == 0) return b; return Foo(b, c); } TEST(FooTest, HandleNoneZeroInput) { EXPECT_EQ( 2, Foo( 4, 10)); EXPECT_EQ( 6, Foo( 30, 18)); } // 简单测试用例2 AnsiString getName() { return "HaHa"; } TEST(getName, HandleNoneZeroInput) { EXPECT_EQ( "HaHa", getName()); EXPECT_EQ( "HaHA", getName()); } int _tmain( int argc, _TCHAR* argv[]) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } |
至此,本例简单测试用例完成!
注:本测试用例基于C++builder(xe5), 测试用例及gtest-1.6.0、gtest-1.7.0见链接:http://download.csdn.net/detail/johnnyhu90/8053765