gtest的Linux使用(Google test)
GTest是Google开发的跨平台而且开源的C++单元测试框架,很好很强大。
下载地址:https://code.google.com/p/googletest/ 。
关于GTest在Windows下使用,CoderZh给出了十分详尽的使用指南:http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html 。
我的工作环境:Ubuntu12.04, python 2.7, Makefile,SVN等
- 一、下载gtest文件
我用的是svn下载的。
svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn
得到最新版的gtest,成功可以看到文件夹gtest-svn。
- 二、生成gtest静态库
先进入文件夹:
$cd gtest-svn
编译生成gtest-all.o文件(注意-I后无空格):
$g++ -I./include -I./ -c ./src/gtest-all.cc
再生成.a静态库文件:
$ ar -rv libgtest.a gtest-all.o
若成功,会在当前目录下生成libgtest.a库。可拷贝它到C++单元测试项目中去,以便使用。
- 三、编写简单功能函数
- 新建一个项目(目录)GTestApp,包含两个代码文件: functions.h, functions.cpp。
实现两个int变量的加减乘除功能。
//functions.h
#ifndef _FUNCTIONS_H
#define _FUNCTIONS_H int add(int one,int two);
int myMinus(int one,int two);
int multiply(int one,int two);
int divide(int one,int two);
#endif
//functions.cpp
#include "functions.h"
int add(int one,int two){
return one+two;
}
int myMinus(int one,int two){
return one-two;
}
int multiply(int one,int two){
return one*two;
}
int divide(int one,int two){
return one/two;
}
- 四、编写单元测试代码
1、编写单元测试代码functionsTest.cpp
//functionsTest.cpp
#include "gtest/gtest.h"
#include "functions.h" TEST(AddTest,AddTestCase){
ASSERT_EQ(,add(,));
}
TEST(MinusTest,MinusTestCase){
ASSERT_EQ(,myMinus(,));
}
TEST(MultiplyTest,MutilplyTestCase){
ASSERT_EQ(,multiply(,));
}
TEST(DivideTest,DivideTestCase){
ASSERT_EQ(,divide(,));
}
2、编写测试代码TestAll.cpp
//TestAll.cpp
#include "gtest/gtest.h"
#include <iostream>
using namespace std; int main(int argc,char* argv[])
{
//testing::GTEST_FLAG(output) = "xml:"; //若要生成xml结果文件
testing::InitGoogleTest(&argc,argv); //初始化
RUN_ALL_TESTS(); //跑单元测试
return ;
}
- 五、编译与运行测试
1、编译
1) 复制gtest库文件
在GTestApp目录下新建lib目录,并复制libgtest.a到其中。
$mkdir lib
$cp <the path>/libgtest.a lib
2) 复制gtest头文件
gtest1.6.0目录下的include包含了需使用到的头文件。把include复制到GTestApp中来。
3)编译和链接
$ g++ -o functions.o -c functions.cpp
$ g++ -o functionsTest.o -c funciontsTest.cpp -I./include
$ g++ -o TestAll.o -c TestAll.cpp -I./include
链接:
$ g++ -o main *.o -I./include -L./lib -lgtest -lpthread #注意不是-libgtest,同时需要用到 libpthread这个库
最后可以得到一个main的可执行文件
2、运行与测试
$./main
[==========] Running 4 tests from 4 test cases.
[----------] Global test environment set-up.
[----------] 1 test from AddTest
[ RUN ] AddTest.AddTestCase
[ OK ] AddTest.AddTestCase (0 ms)
[----------] 1 test from AddTest (1 ms total)
[----------] 1 test from MinusTest
[ RUN ] MinusTest.MinusTestCase
[ OK ] MinusTest.MinusTestCase (0 ms)
[----------] 1 test from MinusTest (0 ms total)
[----------] 1 test from MultiplyTest
[ RUN ] MultiplyTest.MultiplyTestCase
[ OK ] MultiplyTest.MultiplyTestCase (0 ms)
[----------] 1 test from MultiplyTest (1 ms total)
[----------] 1 test from DivideTest
[ RUN ] DivideTest.DivideTestCase
[ OK ] DivideTest.DivideTestCase (0 ms)
[----------] 1 test from DivideTest (3 ms total)
[----------] Global test environment tear-down
[==========] 4 tests from 4 test cases ran. (8 ms total)
[ PASSED ] 4 tests.
如果需要得到xml文件的话,可以这么做
首先先在main函数打开生成函数
testing::GTEST_FLAG(output) = "xml:"; 再重新编译,生成main可执行文件。再执行下面操作。
$ ./main --gtest_output=xml
[==========] Running 4 tests from 4 test cases.
[----------] Global test environment set-up.
[----------] 1 test from AddTest
[ RUN ] AddTest.AddTestCase
[ OK ] AddTest.AddTestCase (0 ms)
[----------] 1 test from AddTest (1 ms total)
[----------] 1 test from MinusTest
[ RUN ] MinusTest.MinusTestCase
[ OK ] MinusTest.MinusTestCase (0 ms)
[----------] 1 test from MinusTest (1 ms total)
[----------] 1 test from MultiplyTest
[ RUN ] MultiplyTest.MultiplyTestCase
[ OK ] MultiplyTest.MultiplyTestCase (0 ms)
[----------] 1 test from MultiplyTest (1 ms total)
[----------] 1 test from DivideTest
[ RUN ] DivideTest.DivideTestCase
[ OK ] DivideTest.DivideTestCase (0 ms)
[----------] 1 test from DivideTest (0 ms total)
[----------] Global test environment tear-down
[==========] 4 tests from 4 test cases ran. (4 ms total)
[ PASSED ] 4 tests.
让我们再看下当前目录,用ls命令:可以看到有一个main.xml的文件,大功告成。
本文参考:
http://graybull.is-programmer.com/posts/37871.html
http://www.cnblogs.com/coderzh/archive/2009/03/31/1426758.html
https://code.google.com/p/googletest/
gtest的Linux使用(Google test)的更多相关文章
- Linux下Google Test (GTest)测试环境搭建步骤
1.下载GTEST 下载链接为:https://code.google.com/p/googletest/downloads/list 目前GTEST的最新版本为gtest-1.7.0.zip,因此我 ...
- Linux 利用Google Authenticator实现ssh登录双因素认证
1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一 ...
- 给Linux添加google搜索命令
一次面试时,面试官问怎么在终端直接做到在百度搜索自己的名字,当时没回答出来,面试官给了提示,问http协议.答案是说telnet连接www.baidu.com之后GET 昨天偶然看到一篇博客,http ...
- Kali Linux安装Google中文输入法(只需5步)
前言: 之前我在kali上安装过中文输入法,并且写了一篇博文(Kali Linux安装中文输入法全纪录),这篇博文里的步骤是当时一边摸索一边记录下的,思路有点混乱,而且还同时安装了两种输入法.今天又安 ...
- linux 下 Google配置SwitchyOmega
本文是在linux配置shadowssocks中配置的,windows也可以 通过上一篇文章我们学会了如何科学上网, 但是我们使用SwitchyOmega时选择的是proxy的代理模式 就是说我们不 ...
- linux下google chrome浏览器字体修改
今天安装了最新的chrome,我是下载的.deb包直接安装的. 安装完后,用chrome浏览页面时,发现字体有的大,有的小,还不清楚. 于是在网上搜索了一下如何设置字体. 1.打开Chrome浏览器. ...
- install webapp2 on Linux outside google app engine.
Reference: https://webapp-improved.appspot.com/tutorials/quickstart.nogae.html Step 1: install pip S ...
- linux下使用gtest框架进行c/c++单元测试
linux下使用gtest框架进行c/c++单元测试 前言 关于此次开发工具的选择,因为我最近尝试在linux下使用vim进行c/c++编程,且之前已经对vim进行了相关的配置,所以这里应作业要求直接 ...
- 玩转Google开源C++单元测试框架Google Test系列(gtest)(转)
转自:http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html 前段时间学习和了解了下Google的开源C++单元测试框架Googl ...
随机推荐
- poj2392 Space Elevator(多重背包)
http://poj.org/problem?id=2392 题意: 有一群牛要上太空.他们计划建一个太空梯-----用一些石头垒.他们有K种不同类型的石头,每一种石头的高度为h_i,数量为c_i,并 ...
- POJ 3678 Katu Puzzle(2 - SAT) - from lanshui_Yang
Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...
- 编程算法 - 最长上升子序列问题 代码(C)
最长上升子序列问题 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 有一个长为n的数列a. 请求出这个序列中最长上升子序列的长度. 最长上升子序 ...
- 在 Mac OS X Lion 下修改 Hosts 的四种方法
一名刚刚使用 Mac OS X Lion 系统的朋友问我怎么该系统下修改 Hosts 文件,说网上搜了很多办法都不管用,只要编辑 Hosts 文件就出现”你不是文件 hosts 的所有者,因此没有权限 ...
- 微信内移动前端开发抓包调试工具fiddler使用教程
在朋友圈看到一款疯转的H5小游戏,想要copy,什么?只能在微信里打开?小样,图样图森破,限制了oauth.微信浏览器内打开,照样能看你源码~ 使用fiddler来抓包 需要先做一些简单的准备工作: ...
- 使用VS2003 发送Email
使用VS2003发送Email与之后VS2005版本及以上VS版本不一样,记录一下, 需要引用using System.Web.Mail; public void SendEmail() { try ...
- iOS极光推送
昨天花了一下午的时间研究了下极光推送,也前也是没做过,不知道从何下手!才开始的时候一看官方的SDK感觉好难,不过经过一系列的捣鼓之后,手机收到了推送信息,感觉其实并没有那么难! 1.配置开发证书(得有 ...
- 请简述javascript的数据类型种类?
答案: javascript里的数据类型分为基本数据类型 和 引用数据类型两种, 其中, 基本数据类型包括5个:数值,字符串,布尔,null, undefined 引用数据类型包括3个:array,f ...
- ES6新特性-----变量和字符串
一.变量 1. LET 我们都习惯用var 来声明变量,现在还可以用let来声明变量,两者的主要区别是作用域:var声明的变量作用域为包围它的函数,而let声明的变量作用域仅在它所在的块中.(在ES5 ...
- Delphi 进阶基础技能说明
以下讨论均基于Delphi XE8,主要是利用DELPHI新版的功能,如:Unicode,泛型,匿名函数等[XE2 后应该都支持]. 用新特性的好处是少写代码,提高效率.本博客不再讨论Delphi旧版 ...