C++单元测试 之 gtest -- 组合数计算.
本文将介绍如何使用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 -- 组合数计算.的更多相关文章
- Google单元测试框架gtest之官方sample笔记2--类型参数测试
gtest 提供了类型参数化测试方案,可以测试不同类型的数据接口,比如模板测试.可以定义参数类型列表,按照列表定义的类型,每个测试case都执行一遍. 本例中,定义了2种计算素数的类,一个是实时计算, ...
- Google单元测试框架gtest之官方sample笔记4--事件监控之内存泄漏测试
sample 10 使用event listener监控Water类的创建和销毁.在Water类中,有一个静态变量allocated,创建一次值加一,销毁一次值减一.为了实现这个功能,重载了new和d ...
- 纪中集训2020.02.05【NOIP提高组】模拟B 组总结反思——【佛山市选2010】组合数计算,生成字符串 PPMM
目录 JZOJ2290. [佛山市选2010]组合数计算 比赛时 之后 JZOJ2291. [佛山市选2010]生成字符串 比赛时 之后 JZOJ2292. PPMM 比赛时 之后 JZOJ2290. ...
- Google单元测试框架gtest之官方sample笔记3--值参数化测试
1.7 sample7--接口测试 值参数不限定类型,也可以是类的引用,这就可以实现对类接口的测试,一个基类可以有多个继承类,那么可以测试不同的子类功能,但是只需要写一个测试用例,然后使用参数列表实现 ...
- C++单元测试框架gtest使用
作用 作为代码编码人员,写完代码,不仅要保证编译通过和运行,还要保证逻辑尽量正确.单元测试是对软件可测试最小单元的检查和校验.单元测试与其他测试不同,单元测试可看作是编码工作的一部分,应该由程序员完成 ...
- Google C++单元测试框架---Gtest框架简介(译文)
一.设置一个新的测试项目 在用google test写测试项目之前,需要先编译gtest到library库并将测试与其链接.我们为一些流行的构建系统提供了构建文件: msvc/ for Visual ...
- 简单易懂的单元测试框架-gtest(二)
简介 事件机制用于在案例运行前后添加一些操作(相当于挂钩函数).目前,gtest提供了三种等级的事件,分别: 全局级,所有案例执行的前后 TestSuite级,某一个案例集的前后 TestCa ...
- 简单易懂的单元测试框架-gtest(一)
简介 gtest是google开源的一个单元测试框架,以其简单易学的特点被广泛使用.该框架以第三方库的方式插入被测代码中.同其他单元测试框架相似,gtest也通过制作测试样例来进行代码测试.同 ...
- Centos下配置单元测试工具gtest
gtest是google提供的一个非常强大的单元测试工具,下载地址:https://code.google.com/p/googletest 我下载的是gtest-1.6.0.拷贝到Centos系统上 ...
随机推荐
- java图形界面写个小桌面,内置简单小软件
一.做个这样的效果,双击图标打开相应的应用 二.主界面类,使用JavaSwing的JDesktopPane类创建这个桌面 package com.swing; import java.awt.Bord ...
- 深入理解js——自由变量和作用域链
自由变量:在A作用域中使用变量X,却没有在A作用域中声明(在其他作用域中声明),对于A作用域来说X就是一个自由变量. var x=10; function fn(){ var b=20; consol ...
- svn命令
1.检出.更新.提交 svn chectout http://svn_server/xxx_repository/trunk svn update svn commit -m "XXX&qu ...
- Windows版的各种Python库安装包下载地址与安装过程
在用Python开发时(Windows环境),会碰到需要安装某个版本的第三方库,为了以后查找.安装方便,总结如下: windows版的各种Python库安装包下载地址:http://www.lfd.u ...
- UNICODE 7.0定义的表情符
td.graph { font-size:24px; } UNICODE 7.0定义了78个表情符,从0x1F600到0x1F64F(其中0x1F643和0x1F644没有定义).下表中列出了这些表情 ...
- HDU 4833 Best Financing (DP)
Best Financing Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- OAuth 2.0 Threat Model and Security Considerations (rfc6819)
Authorization server The following data elements are stored or accessible on the authorization serve ...
- 什么是遗传方差(Genetic variance)、加性遗传方差(Additive genetic variance)、显性遗传方差(Dominance genetic variance)、上位遗传方差(Epistatic genetic variance)
遗传方差:遗传方差又称表型方差(phenotypic variance),通常结合基因型方差(genotype variance)和环境方差(environmental variance).遗传方差主 ...
- FileReader对象
在一些项目中,经常会遇到图片上传的情况,为了提高用户体验,一般会要求选择图片后 能预览一下图片. 以前的做法是 通过 ajax上传图片后,然后再显示出来,这样会产生大量的无用的图片文件,在HTML5的 ...
- Validate US Telephone Numbers
function telephoneCheck(str) { // Good luck! //return true; var phone = /^1? ?(\d{3}|\(\d{3}\))[ -]? ...