本文将介绍如何使用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. webstorm 2016 激活(转)

    2016.2.2 版本的破解方式: 安装以后,打开软件会弹出一个对话框:选择"license server" 输入:http://114.215.133.70:41017 2016 ...

  2. Net通用进销存管理系统 + 开发文档+ 使用说明

    通用进销存管理系统 + 开发文档+ 使用说明Net源码下载 包括下面的模块基础资料模块采购管理模块库存管理模块商务管理模块营业管理模块维修管理模块会员管理模块财务管理模块 Net通用进销存管理系统 + ...

  3. flash拖动条移出flash无法拖动

    原因:flash拖动条的拖动事件被嵌入flash的div的鼠标事件给截获了!

  4. 05 Apache Solr: 管理员界面(Admin UI)

         为了方便管理员和工程师调整Solr的配置和访问在线文档和其他的帮助,Solr提供了一个Web界面去查看Solr的配置详情,运行查询语句和分析文档字段.这个界面在第三篇里面提到过就是管理员界面 ...

  5. Oracle循环查询结果集 自定义函数

    create or replace function Fun_GetRoleIDList(d_fid char) return varchar is  rolelist varchar(2000);b ...

  6. ajax 请求如何解决乱码

    今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custI ...

  7. python学习之——操作浏览器

    使用selenium的webdriver框架,对浏览器的常规操作,如下~~ #coding=utf-8 from selenium import webdriver import time from ...

  8. maven仓库使用

    maven镜像仓库 1.国内maven镜像仓库 阿里云镜像 <mirrors> <mirror> <id>aliyun</id> <name> ...

  9. c# DESEncrypt 加密、解密算法

    using System; using System.Security.Cryptography; using System.Text; namespace AttendService { publi ...

  10. DataSet用法详细 转

    DataSet用法详细 转 DataSet用法详细 一.特点介绍 1.处理脱机数据,在多层应用程序中很有用. 2.可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法. 3.处理分级 ...