Save&Load

Save The World, Load The Game

0%

Xcode 5集成GoogleTest Frame

由于工作的需要,要测试一下C++的代码,研究了一下发现GoogleTest是个不错的选择,类xUnit的测试框架,正好之前用JUnit也算熟,上手比较容易一些。既然是在Mac系统下(10.9),IDE用Xcode是不二的选择了。下面就开始吧,

Build gtest Framework

  • 下载gtest,直接命令行 svn checkout http://googletest.googlecode.com/svn/trunk/ googletest-read-only
  • 去下载的目录, googletest-read-only/xcode/ 找到 gtest.xcodeproj 打开
  • 这一步很重要,记得要在Deployment Target -> OS X Deployment Target中选择10.9,这是因为OS X 10.9默认使用的C++ Library是libc++,而OS X 10.8及以前默认使用的是libstdc++。如果这里不选择10.9的话,后面编译的时候就会出现连接错误(我就被这个坑折磨了一下午啊。。。)

select_10.9

  • 然后点击右上角的run就会进行build,如果成功的话,会显示Build Successed。然后展开Products,找到gtest.framework,右键选择Show in Folder,把gtest.framework移到一个你能够方便访问的地方。

show in folder
接下来我们就可以引用gtest.framework来写unit test了。

Use gtest.framework

  • 首先我们要用Xcode创建一个项目,选择OS X -> Application -> Command Line Tool,然后简单输入一下项目名等就创建好了一个项目
  • 接下来,在项目的Build Phases -> Link Binary With Libraries选项中,点击添加,选择之前生成的gtest.framework

gtest.framework

  • 之后我们就可以写unit test的了,下面是一个例子。
    #include "gtest/gtest.h"
    
    

int Factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}

return result;
}

TEST(FactorialTest, Negative) {
// This test is named “Negative”, and belongs to the “FactorialTest”
// test case.
EXPECT_EQ(1, Factorial(-5));
EXPECT_EQ(1, Factorial(-1));
EXPECT_GT(Factorial(-10), 0);
}

int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
写好之后就可以直接Run了,当然在命令行看结果比较好一些。结果如下:

gtest_result

好了,现在环境已经搭建好了,剩下的就是码代码了。。。