gtest使用方法

单元测试gtest的安装与使用方法【结合官网的sample】 gtest单元测试是Google的一套用于编写C++测试的框架,可以运行在很多平台上(包括Linux、Mac OS X、Windows、Cygwin等等)。基于xUnit架构。支持很多好用的特性,包括自动识别测试、丰富的断言、断言自定义、死亡测试、非终止的失败、生成XML报告等等,本文对gtest的安装以及基本使用方法进行细致说明,希望对您有所帮助。 阅读详情

(0)gtest是什么
gtest是一个跨平台的C++测试框架,google作品。
它支持自动发现测试,断言集,用户定义的断言,death测试,致命与非致命的失败,类型参数化测试,各类运行测试的选项和XML的测试报告。

(1)下载gtest
地址:
http://code.google.com/p/googletest/downloads/list
笔者下载的版本是1.6.0
http://googletest.googlecode.com/files/gtest-1.6.0.zip

(2)安装gtest

?
1
2
3
4
unzip gtest-1.6.0.zip
cd gtest-1.6.0
. /configure
make

确认lib目录下生成了libgtest.a和libgtest_main.a,
这两个库是后续测试程序需要链接的库。

(3)测试gtest
不妨设我们需要测试foo.h中的一个max函数(求两个数中较大的一个)
foo.h文件内如如下:

?
1
2
3
4
5
6
7
#ifndef __FOO_H__
#define __FOO_H__
int max( int a, int b)
{
return a>b?a:b;
}
#endif

撰写测试程序foo_test.cpp来对foo进行测试:
foo_test.cpp文件内如如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "gtest/gtest.h"
#include "foo.h"
 
TEST(foo, max)
{
EXPECT_EQ(2, max(2,-1));
EXPECT_EQ(3, max(2,3));
}
 
int main( int argc, char ** argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

编译foo_test.cpp,编译命令如下:

?
1
2
3
g++ -g foo_test.cpp -o foo_test \
-I. /gtest-1 .6.0 /include \
-L. /gtest-1 .6.0 /lib -lgtest -lgtest_main -lpthread

需要注意的是,要链接pthread这个库。

执行结果如下:
[==========] Running 1 test from 1 test case.
[==========] Global test environment set-up.
[==========] 1 test from foo
[ RUN       ] foo.max
[             OK ] foo.max (0 ms)
[==========] 1 test from foo (0 ms total)

[==========] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[ PASSED ] 1 test.

(4)简要说明

?
1
2
3
4
TEST(name1, name2)
{
EXPECT_EQ(value1, value2);
}

这是要执行的测试用例,后面是执行内容
name1:测试用例名称
name2:测试名称
这两个参数都只起到提示作用,我们也可以这么使用
name1:类名
name2:方法名
或者
name1:文件名
name2:函数名

EXPECT_EQ(value1, value2);
用例执行成功时,期望value1和value2是相等的,相等才算通过测试,如上例中的:
EXPECT_EQ(2, max(2,-1));
max(2, -1)的执行结果值期望是2如果不等,则用例运行失败。

?
1
2
3
4
5
int main( int argc, char ** argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

这个是main函数,InitGoogleTest会初始化一些环境变量,RUN_ALL_TESTS()会调用所有的TEST(name1, name2)

(6)结束语
想了解更详细的关于gtest的信息,见官网:
http://code.google.com/p/googletest/


编写测试用例
本例中要测试的是一个求阶乘的函数

函数头文件:func.H

  1. #ifndef FUNC_H  
  2. #define FUNC_H  
  3. int fac(int nInput);  
  4. #endif  

函数实现文件:func.C

  1. #include "func.H"  
  2. int fac(int nInput)  
  3. {  
  4.     if(nInput < 0)  
  5.     {  
  6.         return -1;  
  7.     }  
  8.   
  9.     int nRev = 1;  
  10.     for(int i = 1; i <= nInput; ++i)  
  11.     {  
  12.         nRev *= i;  
  13.     }  
  14.     return nRev;  
  15. }  

主程序文件:主程序文件:fac_test.C

  1. #include <limits>  
  2. #include "func.H"  
  3. #include "gtest/gtest.h"  
  4.   
  5. TEST(Fac_test, input_negative){  
  6.     EXPECT_EQ(-1, fac(-1));  
  7.     EXPECT_EQ(-1, fac(-2));  
  8.     EXPECT_EQ(-1, fac(-5));  
  9. }  
  10.   
  11. TEST(Fac_test, input_zero){  
  12.     EXPECT_EQ(1, fac(0));  
  13. }  
  14.   
  15. TEST(Fac_test, input_positive){  
  16.     EXPECT_EQ(1, fac(1));  
  17.     EXPECT_EQ(2, fac(2));  
  18.     EXPECT_EQ(6, fac(3));  
  19. }  
将这三个文件都放在$/HOME/demo目录下。


4. 修改Makefile文件,然后编译

拷贝Makefile文件
cp $HOME/bin/gtest-1.6.0/make/Makefile   $/HOME/demo/


需要修改的地方 
1. 变量 GTEST_DIR   USER_DIR   TESTS 
2. 最后Builds的输入输出


修改后的Makefile:

  1. # Points to the root of Google Test, relative to where this file is.  
  2. # Remember to tweak this if you move this file.  
  3. GTEST_DIR = ../bin/gtest-1.6.0  
  4.   
  5. # Where to find user code.  
  6. USER_DIR = ./  
  7.   
  8. # Flags passed to the preprocessor.  
  9. CPPFLAGS += -I$(GTEST_DIR)/include  
  10.   
  11. # Flags passed to the C++ compiler.  
  12. CXXFLAGS += -g -Wall -Wextra  
  13.   
  14. # All tests produced by this Makefile.  Remember to add new tests you  
  15. # created to the list.  
  16. TESTS = fac_test  
  17.   
  18. # All Google Test headers.  Usually you shouldn't change this  
  19. # definition.  
  20. GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \  
  21.                 $(GTEST_DIR)/include/gtest/internal/*.h  
  22.   
  23. # House-keeping build targets.  
  24.   
  25. all : $(TESTS)  
  26.   
  27. clean :  
  28.     rm -f $(TESTS) gtest.a gtest_main.a *.o  
  29.   
  30. # Builds gtest.a and gtest_main.a.  
  31.   
  32. # Usually you shouldn't tweak such internal variables, indicated by a  
  33. # trailing _.  
  34. GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)  
  35.   
  36. # For simplicity and to avoid depending on Google Test's  
  37. # implementation details, the dependencies specified below are  
  38. # conservative and not optimized.  This is fine as Google Test  
  39. # compiles fast and for ordinary users its source rarely changes.  
  40. gtest-all.o : $(GTEST_SRCS_)  
  41.     $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \  
  42.             $(GTEST_DIR)/src/gtest-all.cc  
  43.   
  44. gtest_main.o : $(GTEST_SRCS_)  
  45.     $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \  
  46.             $(GTEST_DIR)/src/gtest_main.cc  
  47.   
  48. gtest.a : gtest-all.o  
  49.     $(AR) $(ARFLAGS) $@ $^  
  50.   
  51. gtest_main.a : gtest-all.o gtest_main.o  
  52.     $(AR) $(ARFLAGS) $@ $^  
  53.   
  54. # Builds a sample test.  A test should link with either gtest.a or  
  55. # gtest_main.a, depending on whether it defines its own main()  
  56. # function.  
  57.   
  58. func.o : $(USER_DIR)/func.C $(USER_DIR)/func.H $(GTEST_HEADERS)  
  59.     $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/func.C  
  60.   
  61. fac_test.o : $(USER_DIR)/fac_test.C $(USER_DIR)/func.H $(GTEST_HEADERS)  
  62.     $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/fac_test.C  
  63.   
  64. fac_test : func.o fac_test.o gtest_main.a  
  65.     $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@  

然后make,生成测试用例fac_test


5. 运行,检查运行结果



gtest测试框架 本文主要介绍gtest原理以及使用 阅读详情

相关推荐

一文读懂测试单元gtest

gtest 是 Google 开发的 C++ 单元测试框架,提供了丰富的断言、测试夹具和测试运行器等功能,帮助开发者编写高效、可维护的测试代码。好的测试单元应具备独立性、结构化组织、跨平台兼容性、丰富的失败信息、低维护成本和高执行效率等特点。gtest 通过自动注册机制、参数化测试和并行执行等特性,减少了测试代码的重复性,提升了测试效率。安装 gtest 可以通过克隆 GitHub 仓库并使用 CMake 进行编译和安装。gtest 的断言分为非致命断言(EXPECT_)和致命断言(ASSERT_),支持布

m0_73359068的博客 2336

gtest学习

gtest个人学习整理分享。

weixin_51032194的博客 1万+

编译的gtest-1.7.0

编译的gtest-1.7.0

gTestgtest简介及简单使用

gTestgtest简介及简单使用 gtest是一个跨平台(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)的C++测试框架,有google公司发布。gtest测试框架是在不同平台上为编写C++测试而生成的。 从http://code.google.com/p/googletest/downloads/detail?name=gtest-1.7.0.zip&can=2&q=下载最gtest-1.7.0版本 在Windows下编

qq_43331089的博客 2万+

Google Test(GTest)使用方法和源码解析——概况

GTest是很多开源工程的测试框架。虽然介绍它的博文非常多,但是我觉得可以深入到源码层来解析它的实现原理以及使用方法。这样我们不仅可以在开源工程中学习到实用知识,还能学习到一些思想和技巧。我觉得有时候思想和技巧是更重要的。(转载请指明出于breaksoftware的csdn博客) 我们即将要分析的是GTest1.7版本。我们可以通过https://github.com/google/googletest.git得到代码。 官方文档见: https://github.co...

Sudouble的专栏 882

Window&Linux gtest 使用方法-待补充

Linux: gtest是一个跨平台的C++测试框架,google作品。 它支持自动发现测试,断言集,用户定义的断言,death测试,致命与非致命的失败,类型参数化测试,各类运行测试的选项和XML的测试报告。 (1).下载gtest http://code.google.com/p/googletest/downloads/list     笔者下载的是版本1.7.0 http://c

QLQ的专栏 984

GTEST GMOCK使用入门-使用源码编译gtest gmock的方法

网上太多教程,基于cmake,对于直接make生成gtest.a gmock.a写的太模糊或者太复杂,所以整理一篇文档,帮助大家快速入门 github下载googletest源码 切换到tag,找一个版本下载: cmake编译gooleetest源码生成gtest.a gmock.a,cmake此处不详细描述,使用makefile的编译文件如下: object = main.o TestA.o sample1_unittest.o sample1.o cpp = ${fileter %.c

zishuijing_dd的博客 1095

GTest安装及使用、CMake关闭警告的方法

1、GTest的安装 建project目录,在该目录下依次执行如下命令: git clone https://github.com/google/googletest.git #2020-10-15最code cd googletest cmake CMakeLists.txt make make出现如下错误: [ 25%] Built target gtest [ 37%] Building CXX object googlemock/CMakeFiles/gmock.dir/src/gm

明朗晨光的专栏 4746

【C++中级篇】gtest使用方法及cmake配置

在一项c++工程中,会存在很多类,很多功能方法,如果每个对外的接口方法都通过在业务中发现问题,是一件相当糟糕的事儿,而且效率低下。如果针对每个接口都设计一个主函数进行验证,需要运行很多程序,为解决这个问题,单元测试模块应运而生,本期探讨下由google开发的单元测试模块gtest使用方法

行走的漂流瓶的博客 4504

gtest和gmock使用方法

gtest使用方法

哈哈一笑 2281

gtest源码使用方法总结

从github中获取源码:https://github.com/Eureca2017/googletest 解压缩后,拿出googlemock,googletest两个目录 只保留上述两个目录中include和src目录(注意:源码扩展名为cc,记得与自己工程扩展名统一) 代码示(注意:构建工程中源码只需要增加gtest-all.cpp、gmock-all.cpp、gtest_main.c...

Less is More 353

C语言开发之CMakeLists以及gtest测试在C语言中的使用方法(其四)

建议在C语言开发之CMakeLists(其三)中看一下代码结构,下面的内容仅仅涉及gtest测试C语言项目的方法。 具体思路 gtest可以用于C++的测试,无法直接应用到C语言项目中。我们不妨将C语言项目打包成静态库,在C语言项目外单独建立gtest测试文件。 extern 为了使C++调用C语言项目,需要在头文件部分添加extern “c”,告诉c++这是C语言程序。 项目目录结构如下: |--test | |--gtest.cpp | |--alg | | |--

程适场的博客 2760

GTest 初次使用中所遇问题及其解决方法

初次接触GTest,按照文章《玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest》中所述步骤,下载、编译一番顺利,到了使用GTest的时候,却没能像文章中那样顺利运行。 问题 出现了如下问题(我出现的问题和下面两种是相似的,写此文时无法重现我所遇的错误): 1.    (摘自上述博文中的评论),连接错误,提示已定义。 2. (具体

JarvisChu的专栏 5235

googletest (gtest)的使用方法

最近在项目中, 碰到一些问题, 发现无法从集成测试来覆盖, 比较合适的办法就是通过单元测试, 就顺便研究了一下Google test的使用方法。 Google test是一种比较方便的C++测试框架, 它能够帮助我们比较方便的进行测试代码的编写, 以及输出尽可能详细的失败信息。能够大大缩短我们测试代码的编写效率, 而且该框架的使用方法也比较简单, 能够降低我们学习框架的负担。 编译、安装...

baijiwei的博客 2万+

Google Test(GTest)使用方法和源码解析——断言的使用方法和解析

        在之前博文的基础上,我们将介绍部分断言的使用,同时穿插一些源码。(转载请指明出于breaksoftware的csdn博客) 断言(Assertions)         断言是GTest局部测试中最简单的使用方法,我们之前博文中举得子都是使用断言去做判断的。 基础断言         我们先看一个基础的断言 Fatal assertion Nonfatal ass...

方亮的专栏 2万+

Google Test(GTest)使用方法和源码解析——私有属性代码测试技术分析

        有些时候,我们不仅要测试类暴露出来的公有方法,还要测试其受保护的或者私有方法GTest测试框架提供了一种方法,让我们可以测试类的私有方法。但是这是一种侵入式的,会破坏原来代码的结构,所以我觉得还是谨慎使用。(转载请指明出于breaksoftware的csdn博客)         我们先看个子 // This class has a private member we w...

方亮的专栏 4879
上一篇: fastcgi配置
下一篇: protobuf使用方法
qeshining
博客等级 码龄17年 9粉丝 8原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值