本文将介绍如何使用gtest进行单元测试.

gtest是google单元测试框架.使用非常方便.

首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用.

http://code.google.com/p/googletest/

如果被墙,就百度搜下,很多.

解压 gtest.zip, 得到gtest.1.x.x目录.

export GTEST_HOME=该目录

编译:
cd $GTEST_HOME/make
make

运行示例程序, 熟悉 gtest风格
./sample1_unittes

编译后还会得到一个 gtest_main.a 的静态库.
ln -s gtest_main.a libgtest.a
软链接以便符合 gcc 库引用规范.

按 sample1_unittes.cc 写好自己的测试代码(test.cpp)后,就可以开始编译

g++ -I$GTEST_HOME/include -L$GTEST_HOME/make -lgtest test.cpp -o test.exe
生成测试程序 test.exe

组合数计算代码 combination.cpp:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "combination.h" long combination(long base,long select) {
long res=;
if(base<select || base <= ) return ;
if(base==select) return ;
if(select >= base - select) {
res=arrangement(select+,base) / arrangement (,base - select);
}
else {
res=arrangement(base-select+,base) / arrangement (,select);
}
return res;
} long arrangement(long start,long end) {
if( start <= || start > end) {
return ;
}
long res=start;
for(long i=start+;i<=end;i++) {
res*=i;
}
return res;
}

头文件combination.h:

long combination(long base,long select);
long arrangement(long start,long end);

测试代码 gtest_combination.cpp

#include <limits.h>
#include "combination.h"
#include <gtest/gtest.h> TEST(arrangement, all) {
EXPECT_EQ(, arrangement(,));
EXPECT_EQ(, arrangement(,));
EXPECT_EQ(, arrangement(,));
EXPECT_EQ(, arrangement(,));
EXPECT_EQ(, arrangement(,));
EXPECT_EQ(, arrangement(,));
EXPECT_EQ(, arrangement(,));
EXPECT_EQ(**, arrangement(,)); } TEST(combination, all) {
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(-,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
EXPECT_EQ(, combination(,));
}

Makefile:

TEST=gtest_combination
TESTOBJ=$(TEST).o
TAROBJ=combination.o

all: $(TEST)

$(TEST): $(TESTOBJ) $(TAROBJ)
g++ -I$(GTEST_HOME)/include -L$(GTEST_HOME)/make -lgtest $^ -o $@

%.o: %.cpp
g++ -c -I$(GTEST_HOME)/include -g -o $@ $<

编译及测试:

$make

$gtest_combination

输出结果:

Running main() from gtest_main.cc
[==========] Running 2 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 1 test from arrangement
[ RUN ] arrangement.all
[ OK ] arrangement.all (0 ms)
[----------] 1 test from arrangement (0 ms total)

[----------] 1 test from combination
[ RUN ] combination.all
[ OK ] combination.all (0 ms)
[----------] 1 test from combination (0 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 2 test cases ran. (6 ms total)
[ PASSED ] 2 tests.

C++单元测试 之 gtest -- 组合数计算.的更多相关文章

  1. Google单元测试框架gtest之官方sample笔记2--类型参数测试

    gtest 提供了类型参数化测试方案,可以测试不同类型的数据接口,比如模板测试.可以定义参数类型列表,按照列表定义的类型,每个测试case都执行一遍. 本例中,定义了2种计算素数的类,一个是实时计算, ...

  2. Google单元测试框架gtest之官方sample笔记4--事件监控之内存泄漏测试

    sample 10 使用event listener监控Water类的创建和销毁.在Water类中,有一个静态变量allocated,创建一次值加一,销毁一次值减一.为了实现这个功能,重载了new和d ...

  3. 纪中集训2020.02.05【NOIP提高组】模拟B 组总结反思——【佛山市选2010】组合数计算,生成字符串 PPMM

    目录 JZOJ2290. [佛山市选2010]组合数计算 比赛时 之后 JZOJ2291. [佛山市选2010]生成字符串 比赛时 之后 JZOJ2292. PPMM 比赛时 之后 JZOJ2290. ...

  4. Google单元测试框架gtest之官方sample笔记3--值参数化测试

    1.7 sample7--接口测试 值参数不限定类型,也可以是类的引用,这就可以实现对类接口的测试,一个基类可以有多个继承类,那么可以测试不同的子类功能,但是只需要写一个测试用例,然后使用参数列表实现 ...

  5. C++单元测试框架gtest使用

    作用 作为代码编码人员,写完代码,不仅要保证编译通过和运行,还要保证逻辑尽量正确.单元测试是对软件可测试最小单元的检查和校验.单元测试与其他测试不同,单元测试可看作是编码工作的一部分,应该由程序员完成 ...

  6. Google C++单元测试框架---Gtest框架简介(译文)

    一.设置一个新的测试项目 在用google test写测试项目之前,需要先编译gtest到library库并将测试与其链接.我们为一些流行的构建系统提供了构建文件: msvc/ for Visual ...

  7. 简单易懂的单元测试框架-gtest(二)

    简介     事件机制用于在案例运行前后添加一些操作(相当于挂钩函数).目前,gtest提供了三种等级的事件,分别: 全局级,所有案例执行的前后 TestSuite级,某一个案例集的前后 TestCa ...

  8. 简单易懂的单元测试框架-gtest(一)

    简介     gtest是google开源的一个单元测试框架,以其简单易学的特点被广泛使用.该框架以第三方库的方式插入被测代码中.同其他单元测试框架相似,gtest也通过制作测试样例来进行代码测试.同 ...

  9. Centos下配置单元测试工具gtest

    gtest是google提供的一个非常强大的单元测试工具,下载地址:https://code.google.com/p/googletest 我下载的是gtest-1.6.0.拷贝到Centos系统上 ...

随机推荐

  1. thinkphp学习简易教程(一) thinkphp创建项目

    1.在本地服务器根目录下创建项目目录,如命名为app: 2.把thinkphp的压缩包解压到与项目同级目录下,如app是放在目录APP下面,即项目目录路径为'APP/app/',则thinkphp应解 ...

  2. asp.net LINQ数据访问技术from where select order by子句

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...

  3. lua 学习笔记一

    参考: http://www.kancloud.cn/digest/luanote/119924 1.基础概念 1.lua八种基本数据类型:nil.boolean.string.function.ta ...

  4. openstack快速封装镜像

    本来是该写对接ceph的,但是临时有事了,必须先弄镜像,因此提前写这个了,我个人不是按官网来封装镜像的,是按自己的习惯,所以觉得信不过的可以用官网的方式,有兴趣的可以看看都知道,openstack创建 ...

  5. 生成SSH key

    1.打开终端 2.输入cd ~/.ssh 3.输入ssh-keygen -t rsa -C (邮箱) 4.前往文件夹 /Users/admin/.ssh/id_rsa 5.找到id_rsa.pub , ...

  6. SQL Server 导出数据到 PostgreSQL

    乘着倒数据这会儿,把方法记录一下 需求:因为数据迁移,需要将SQL Server 2012中的数据库导入到PostgreSQL 数据库中 思路:创建一个空的数据库,便于导入数据.下载PostgreSQ ...

  7. Android sharePreference使用

    SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数. SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/ ...

  8. Jquery当中当data为json串时,eval('(' +data+ ')')的解释

    var dataObj = eval('(' +data+ ')') data是返回来的json. dataObj就是json对象了. 为什么要添加 '(' 与 ')' 作为开始于结尾呢? json是 ...

  9. VS2015 +EF6 连接MYSQL数据库生成实体

      VS2015 +EF6 连接MYSQL数据库生成实体   已安装软件:VS2015                       XAMPP Control Panel(Mysql服务器)      ...

  10. XHTML标签的嵌套规则分析

    在 XHTML 的语言里,我们都知道:ul 标签包含着 li.dl 标签包含着 dt 和 dd——这些固定标签的嵌套规则十分明确.但是,还有许多标签是独立的,它们没有被捆绑在一起,比如 h1.div. ...