GoogleTest(gtest)是一套便捷的测试工具,适合测试算法、类(如构造过程)、功能模块等。15~30min完成入门
1 快速安装Gtest:
Ubuntu打开terminal
#Download Source
cd googletest-release-1.7.0
cmake -DBUILD_SHARED_LIBS=ON.
make
(参考来源 http://blog.csdn.net/jcjc918/article/details/52029455)
2 下面例子简单说明gtest的用法
我们以测试一个阶乘函数为例,首先准备待测试源码,然后构建gtest程序
在新的terminal
#回到当前的用户根目录
cd
#新建文件夹 demo_test
mkdir demo_test
cd demo_test
#新建空白源文件
touch frac.h frac.cpp test_main.cpp CMakeLists.txt
Copy 到对应文件
- frac.hpp中code
#ifndef FRAC_H
#define FRAC_H
int frac(int nInput);
#endif
- frac.cpp中code
#include<stdio.h>
#include"frac.h"
int frac(int x)
{
if(x < 0)
{
printf("Error Input. \n");
return 0;
}
int f = 1;
for(int i = 1; i <= x; i++)
{
f *= i;
}
return f;
}
- test_main.cpp的code
#include "frac.h"
#include <gtest/gtest.h>
//TEST 是 gtest的宏
TEST(Frac_test, input_negative){
EXPECT_EQ(0, frac(-1));
EXPECT_EQ(0, frac(-2));
EXPECT_EQ(0, frac(-5));
}
TEST(Frac_test, input_zero){
EXPECT_EQ(1, frac(0));
}
TEST(Frac_test, input_positive){
EXPECT_EQ(1, frac(1));
EXPECT_EQ(2, frac(2));
EXPECT_EQ(6, frac(3));
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
CMakeLists.txt的内容
cmake_minimum_version_required(2.8.3)
project(test_pro)
set(SRC_LIST test_main.cpp frac.cpp)
add_definition(-std = C++11)
set(CMAKE_CXX_STANDARD 11)
add_executable(test_exe SRC_LIST)
include_directories(/home/NAME/exercise/gtest_demo
/home/NAME/googletest-release-1.7.0/include)
target_link_libraries(test_exe
/home/NAME/googletest-release-1.7.0/libgtest_main.so
/home/NAME/googletest-release-1.7.0/libgtest.so)
然后,进入demo_test文件夹下,
mkdir build
cd build
cmake ..
make
./test_exe
(参考源自:https://github.com/google/googletest/blob/master/googletest/docs/Primer.md)
常见用法解释,Gtest 利用预设的宏,设置了一套模板用于测试,如开头所述,算法、类的问题、模块功能测试,十分方便
TEST()与TEST_F()可分别用于测试函数、类。
//构建TEST_NAME下的第一个测试sort1
TEST(<TEST_NAME> , <sort1>)
{
// For fatal or key thing, if error break
ASSERT_*(<expected_value>, actual_value);
//If error, continue
EXPECT_*(<e_v>, a_v);
}
//*是待填的,常用:EQ(equal)NQ(not equal) LT(less than) GT(great than) LE(less than or equal) ....
TEST(<TEST_NAME> , <sort2>)
TEST_F(FIXTURE)需要定义测试类
它要继承自::testing::test, 在类中放置一些要测试的类的实例,然后完成TEST_F。
在测试工程文件中
int main(int argc, char ** argv)
{
::testing::initGoogleTest(argc, argv);
//此宏将调用上面所有的TEST TEST_F
return RUN_ALL_TESTS();
}
- ASSERT或EXPECT判断条件针对binary结果
- 还有单独测试string变量的,高级用法参考gtest doc中的google prime
- 另外,比较大小是有精度限制的,如果要精确比较浮点数大小,ASSERT可以选择NEAR
- 可以设置跳过一些TEST, 在TEST_NAME前加DISABLE_
- 在执行测试的command后面可加参数<–gtest-repeat=1000>即1000次测试,<–gtest-output=“xml”:>即生成xml报告。
(参考来源:
https://www.ibm.com/developerworks/cn/aix/library/au-googletestingframework.html)