Google Test Frame 简单使用例子
1 序言——为什么折腾Google Test
被逼无奈的。
最近研究google开源的基于列存储的数据库查询引擎supersonic源码。初略的浏览了一遍代码,竟然没有main函数,顿时惊讶的目瞪口呆呀。对于习惯了从main函数开始,一行一行跟代码的程序猿,只觉得无从下手了。看了看源码中的README,supersonic提供的是数据库查询引擎的API,不是完整的系统,无法直接运行,也就不提供main函数了,但是可以通过test/guide目录下的测试用例开始学习supersonic提供的丰富的API。supersonic的API都被封装在Google Test中进行测试,到这引出了本文的主角Google Test。
先来看一眼Google Test的大致轮廓。
// Tests negative input.
TEST(IsPrimeTest, Negative) {
// This test belongs to the IsPrimeTest test case. EXPECT_FALSE(IsPrime(-));
EXPECT_FALSE(IsPrime(-));
EXPECT_FALSE(IsPrime(INT_MIN));
}
2 下载Google Test源码
Goole Test是开源工程,可以直接在google code 上下载。下载地址 https://code.google.com/p/googletest/
3 多种编译方式
Google Test是跨平台的,提供了多种编译的方式。不同的平台下的工程文件放在不同的文件夹下,在msvc目录下提供了windows下的vs工程文件,xcode目录下支持mac的工程文件,还可以通过cmake编译,也有configure编译。也可以直接使用g++编译。
g++编译命令如下
g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
-pthread -c ${GTEST_DIR}/src/gtest-all.cc
ar -rv libgtest.a gtest-all.o
其中,GTEST_DIR 是项目的根目录。首先,将src/gtest-all.cc 编译成.o文件,然后,将其进行打包成一个静态链接库。接下来,可以加入自己写的单元测试文件。
g++ -isystem ${GTEST_DIR}/include -pthread path/to/your_test.cc libgtest.a \
-o your_test
编译完成,生成可以运行的your_test程序,现在可以运行自己写的单元测试程序了。运行实例如下:
Running main() from gtest_main.cc
[==========] Running tests from test cases.
[----------] Global test environment set-up.
[----------] tests from FactorialTest
[ RUN ] FactorialTest.Negative
[ OK ] FactorialTest.Negative ( ms)
[ RUN ] FactorialTest.Zero
[ OK ] FactorialTest.Zero ( ms)
[ RUN ] FactorialTest.Positive
[ OK ] FactorialTest.Positive ( ms)
[----------] tests from FactorialTest ( ms total) [----------] tests from IsPrimeTest
[ RUN ] IsPrimeTest.Negative
[ OK ] IsPrimeTest.Negative ( ms)
[ RUN ] IsPrimeTest.Trivial
[ OK ] IsPrimeTest.Trivial ( ms)
[ RUN ] IsPrimeTest.Positive
[ OK ] IsPrimeTest.Positive ( ms)
[----------] tests from IsPrimeTest ( ms total) [----------] Global test environment tear-down
[==========] tests from test cases ran. ( ms total)
[ PASSED ] tests.
4 通过Makefile编译
在make目录下,有Google Test提供的Makefile文件,可以简单的修改此Makefile文件,运行我们自己写的单元测试用例。在此过程中一般需要三个文件,
sample.h //待测试函数的头文件
sample.cc //待测试的函数体
sample_unittest.cc //单元测试用例
编写单元测试用例sample_unittest.cc只需要三步,
第一步,包含需要的头文件,包括自定义的待测试函数以及gtest.h
#include "sample1.h"
#include "gtest/gtest.h"
第二步,使用TEST宏定义来定义测试用例
// Tests factorial of positive numbers.
TEST(FactorialTest, Positive) {
EXPECT_EQ(, Factorial());
EXPECT_EQ(, Factorial());
EXPECT_EQ(, Factorial());
EXPECT_EQ(, Factorial());
}
TEST宏定义有两个参数,测试用例的名字FactorialTest和测试名Positive。宏定义的函数体内部是测试的逻辑。
第三步,调用 RUN_ALL_TESTS() 执行所有的测试用例。
文件准备好之后,可以修改Makefile文件了。
GTEST_DIR = ..
USER_DIR = ../..
TESTS = merge_lists_unittest merge_lists.o : $(USER_DIR)/merge_lists.cc $(USER_DIR)/merge_lists.h $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/merge_lists.cc merge_lists_unittest.o : $(USER_DIR)/merge_lists_unittest.cc \
$(USER_DIR)/merge_lists.h $(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/merge_lists_unittest.cc merge_lists_unittest : merge_lists.o merge_lists_unittest.o gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
GTEST_DIR:Google Test的工程目录
USER_DIR: 带测试的函数的文件目录
Google Test Frame 简单使用例子的更多相关文章
- 简介:google ctemplate:简单易用的文字模板(转载)
转自:http://blog.csdn.net/aladdina/article/details/4531736 CTemplate 是一个简单实用.功能强大的文字模板(template langua ...
- 简单的例子了解自定义ViewGroup(一)
在Android中,控件可以分为ViewGroup控件与View控件.自定义View控件,我之前的文章已经说过.这次我们主要说一下自定义ViewGroup控件.ViewGroup是作为父控件可以包含多 ...
- CSharpGL(1)从最简单的例子开始使用CSharpGL
CSharpGL(1)从最简单的例子开始使用CSharpGL 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo ...
- 用一个简单的例子来理解python高阶函数
============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...
- IE内嵌google chrome frame解决浏览器兼容问题
IE内嵌google chrome frame解决浏览器兼容问题 http://www.cnblogs.com/xwdreamer/archive/2013/12/17/3477776.html 参 ...
- Spring-Context之一:一个简单的例子
很久之前就想系统的学习和掌握Spring框架,但是拖了很久都没有行动.现在趁着在外出差杂事不多,就花时间来由浅入深的研究下Spring框架.Spring框架这几年来已经发展成为一个巨无霸产品.从最初的 ...
- C#调用存储过程简单完整例子
CREATE PROC P_TEST@Name VARCHAR(20),@Rowcount INT OUTPUTASBEGIN SELECT * FROM T_Customer WHERE NAME= ...
- 关于apriori算法的一个简单的例子
apriori算法是关联规则挖掘中很基础也很经典的一个算法,我认为很多教程出现大堆的公式不是很适合一个初学者理解.因此,本文列举一个简单的例子来演示下apriori算法的整个步骤. 下面这个表格是代表 ...
- 为什么C语言在2013年仍然很重要:一个简单的例子
附注:在最初的文章里,我没说明进行模2^64的计算——我当然明白那些不是“正确的”斐波那契数列,其实我不是想分析大数,我只是想探寻编译器产生的代码和计算机体系结构而已. 最近,我一直在开发Dynvm— ...
随机推荐
- 获取所有组合算法、获取全排列算法(java)
转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5574516.html 受到ACM1015的影响,个人感觉,有必要对统计学上的 全组合和全排列 进行一个简单的总结 ...
- A Tour of Go Variables
The var statement declares a list of variables; as in function argument lists, the type is last. pac ...
- log4j输出信息到mongodb
官网 http://log4mongo.org/display/PUB/Log4mongo+for+Java 保存主机信息,方法等 http://my.oschina.net/chi ...
- mongodb的优化
1:使用索引 ,同时对索引排序,[比如mongodb对时间做索引都用-1降序哈,这样查询最新的速度很快],注意组合索引中字段的顺序要和查询时字段的顺序一致哈, 用find().explain()检查查 ...
- Yii2 富头像上传
前台html: <div class="xz_img2 text-center"> <div class="images_flow" id=& ...
- javabean以及内省技术详解(转)
一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...
- C++中的explicitkeyword
在C++程序中非常少有人去使用explicitkeyword,不可否认,在平时的实践中确实非常少能用的上.再说C++的功能强大,往往一个问题能够利用好几种C++特性去解决.但略微留心一下就会发现现有的 ...
- listview图片错位
借鉴这两篇文章,绝对解决,亲测有效! 国外coder的(需要FQ才能看) http://negativeprobability.blogspot.com/2011/08/lazy-loading-of ...
- 常用工具之stunnel
The stunnel program is designed to work as an SSL encryption wrapper between remote client and local ...
- arcgis 获得路径和环境变量信息
import arcpy import sysimport osimport string reload(sys) sys.setdefaultencoding("utf8")sc ...