GTest 是基本 xUnit 架构开发用来进行 C++ 代码测试的框架;它可以跨平台实现自动化测试;
首先创建或选择一个需要测试的工程,这里我们举例创建一个名为CalcSample的工程,工程添加以下文件和内容:
// CalcSample.h
#include "stdafx.h"
double cubic(double d);
// CalcSample.cpp
#include "stdafx.h"
#include <cmath>
#include "CalcSample.h"
double cubic(double d)
{
return pow(d, 3);
}
// main.cpp
#include "stdafx.h"
#include "CalcSample.h"
int _tmain(int argc, _TCHAR* argv[])
{
cubic(10);
return 0;
}
然后,从 gtest-1.7.0-rc1.zip 下载 gtest 的源码并解压到当前解决方案目录下:
在解决方案中添加一个 WIN32 工程,项目类型选择 StaticLibrary,名称为 GTestStaticLib,创建一个空白的项目,修改项目属性,将 gtest 的根目录和 include 的目录添加到包含文件夹中;
并将 src 文件夹下的 gtest_main.cc 和 gtest-all.cc 添加到项目中,运行编译:
如果是在 VS2012 中可能会提示:VC++ 2012 does not (and will never) support variadic templates; consequently, its standard library implementation attempts to fake them using preprocessor-generated overloads and specializations. The number of faux variadic template parameters defaults to 5 - the problem is that gtest is trying to instantiate std::tuple<> with as many as 10 template arguments.
原因是 gtest 中使用到模板类参数个数大于 5 的模板,要解决此问题需要给项目添加一个预编译宏 _VARIADIC_MAX=10 将上限修改为 10
编译成功,我们就得到了 gtest 的静态库文件了;
再添加一个 win console 工程,命名为 unittest_CalcSample 同样修改项目属性,将 gtest 的根目录和 include 的目录添加到包含文件夹中;将上面的两个工程引用进来:
在工程中添加 CalcSample.cpp ,并添加以下文件及内容:
// main.cpp
#include "stdafx.h"
#include "gtest/gtest.h"
#include "CalcSample.h"
TEST(testMath, myCubeTest)
{
EXPECT_EQ(1000, cubic(10)); // 判断 cubic(10) 的返回值是否是 1000
}
int _tmain(int argc, _TCHAR* argv[])
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
运行程序,将得到以下输出:
Linux 下生成 gtest 静态库
安装 gtest 开发包:
sudo apt-get install libgtest-dev
以上操作将在本地 /user/src/ 下生成一个 gtest 文件夹:
完成以下操作:
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
如果就得到了 libgtest.a 和 libgtest_main.a 两个静态库文件;