GoogleTest 使用Cmake实现gtest

来源:互联网 发布:网络聊天话题 编辑:程序博客网 时间:2024/05/18 03:26

GoogleTest(gtest)用于开发测试。

***

快速流程:

Ubuntu打开terminal

$ wget https://github.com/google/googletest/archive/release-1.7.0.tar.gz

$cd googletest-release-1.7.0

$cmake-DBUILD_SHARED_LIBS=ON.

$make

***

(设置参考 http://blog.csdn.net/jcjc918/article/details/52029455)

下面例子简单说明gtest的用法

在新的terminal

$ cd

$ mkdir demo_test

$ cd demo_test

$ touch frac.h frac.cpp test_main.cpp CMakeLists.txt

注释:

frac.h中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)

INCLUDE_DIRECTORIES(/home/NAME/exercise/gtest_demo /home/NAME/googletest-release-1.7.0/include)

ADD_EXECUTABLE(test_exe SRC_LIST)

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

TEST()与TEST_F()可分别用于测试函数、类。

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的参考google prime, 另外,相对大小是有精度限制的,如果要精确比较浮点数,ASSERT可以选择NEAR;

可以设置跳过一些TEST, 在TEST_NAME前加DISABLE_, 

在执行测试的command后面可加参数< --gtest-repeat=1000>即1000次测试,<--gtest-output="xml":<filepath>>即生成xml报告

https://www.ibm.com/developerworks/cn/aix/library/au-googletestingframework.html


原创粉丝点击