Gtest 快速入门

#GoogleTest(gtest)是一套便捷的测试工具,适合测试算法、类(如构造过程)、功能模块等。以Ubuntu为例简介安装与使用例程。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
#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   
//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( , )
{
   // For fatal or key thing, if error break
    ASSERT_*(, actual_value);
   //If error, continue
   EXPECT_*(, a_v);
}
//*是待填的,常用:EQ(equal)NQ(not equal) LT(less than) GT(great than) LE(less than or equal) ....

TEST( , )

TEST_F(FIXTURE)需要定义测试类
它要继承自::testing::test, 在类中放置一些要测试的类的实例,然后完成TEST_F。

在测试工程文件中

int main(int argc, char ** argv)
{
::testing::initGoogleTest(argc, argv);
//此宏将调用上面所有的TEST TEST_F
return RUN_ALL_TESTS();
}
  1. ASSERT或EXPECT判断条件针对binary结果
  2. 还有单独测试string变量的,高级用法参考gtest doc中的google prime
  3. 另外,比较大小是有精度限制的,如果要精确比较浮点数大小,ASSERT可以选择NEAR
  4. 可以设置跳过一些TEST, 在TEST_NAME前加DISABLE_
  5. 在执行测试的command后面可加参数<–gtest-repeat=1000>即1000次测试,<–gtest-output=“xml”:>即生成xml报告。
    (参考来源:
    https://www.ibm.com/developerworks/cn/aix/library/au-googletestingframework.html)

你可能感兴趣的:(C++,gtest,工具类,Linux,cmake)