GoogleTest初探(2)
前面的随笔介绍了Google Test中的基本测试单元TEST和测试夹具TEST_F,此篇介绍区别于这两种测试的参数化测试TEST_P
当待测试方法的行为取决于传入的参数时,而且这些参数的不同组合有多种, 而你又不想为此写多个相类似的test case时,可以用value-parameterized Test
value-parameterized Test 允许你可以使用不同的参数测试代码, 而无需编写同一测试的多个副本
下面举个例子,待测方法:
//MyClass.hpp
enum class CalculateType : int
{
add = ,
minus = ,
plus = ,
divide =
}; class MyClass
{
public:
int calculate(int a, int b, CalculateType type)
{
int c = ;
switch (type)
{
case CalculateType::add:
c = a + b;
break;
case CalculateType::minus:
c = a - b;
break;
case CalculateType::plus:
c = a * b;
break;
case CalculateType::divide:
c = a / b;
break;
}
return c;
}
};
测试:
//myGtest.cpp
#include <gtest/gtest.h>
#include "MyClass.hpp" using namespace std; struct MyTestData
{
int a;
int b;
CalculateType type;
}; class TestMyClass : public ::testing::Test,
public ::testing::WithParamInterface<MyTestData>
{
public:
MyClass myclass;
}; TEST_P(TestMyClass, norml)
{
int a = GetParam().a;
int b = GetParam().b;
int re = myclass.calculate(a, b, GetParam().type);
switch (GetParam().type)
{
case CalculateType::add:
EXPECT_EQ(a + b, re);
break;
case CalculateType::minus:
EXPECT_EQ(a - b, re);
break;
case CalculateType::plus:
EXPECT_EQ(a * b, re);
break;
case CalculateType::divide:
EXPECT_EQ(a / b, re);
break;
}
} INSTANTIATE_TEST_SUITE_P(TestMyClassParams,
TestMyClass,
::testing::Values(
MyTestData{, , CalculateType::add},
MyTestData{, , CalculateType::minus},
MyTestData{, , CalculateType::plus},
MyTestData{, , CalculateType::divide}
));
编译
g++ myGtest.cpp -lgtest -lpthread -o myGtest
运行结果:

从运行结果来看,最终在跑测试时是跑了四遍。
首先,写value-parameterized Test 时,你的测试类要同时继承::testing::Test和::testing::WithParamInterface<T>,或者直接继承::testing::TestWithParam<T>(其实它也是继承了前两者,不过写起来方便了)
其中T是你测试时想传入的参数类型(如果是多个参数,可以定义一个结构体)。
其次,在写测试时,需要使用TEST_P这个宏,在测试case中可以用GetParam()来得到传入的参数。
最后,使用INSTANTIATE_TEST_SUITE_P来初始化你想传入的参数集合。你可以使用参数生成器来完成。参数生成器:(用的时候记得加namespace ::testing)

参考链接: https://github.com/google/googletest/blob/master/googletest/docs/advanced.md
GoogleTest初探(2)的更多相关文章
- GoogleTest初探(1)
此篇主要了解一下GoogleTest中的断言. 总的来说,GoogleTest中的断言分为两大类:EXPECT_*和ASSERT_*,这两者在测试成功或失败后均会给出测试报告,区别是前者在测试失败后会 ...
- GoogleTest初探(0)
单元测试是一种保证代码质量的手段.程序员可以通过写单元测试来保证自己写的代码的功能正确. 本人所在公司使用GoogleTest测试框架来进行单元测试.虽然现在在公司的工程代码中写单元测试已经驾轻就熟, ...
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- JavaScript学习(一) —— 环境搭建与JavaScript初探
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
- .NET文件并发与RabbitMQ(初探RabbitMQ)
本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...
- React Native初探
前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...
- Google C++单元测试框架GoogleTest(总)
之前一个月都在学习googletest框架,对googletest的文档都翻译了一遍,也都发在了之前的博客里,另外其实还有一部分的文档我没有发,就是GMock的CookBook部分:https://g ...
随机推荐
- LintCode2016年8月22日算法比赛----将数组重新排序以构造最小值
将数组重新排序以构造最小值 题目描述 给定一个整数数组,请将其重新排序,以构造最小值. 样例 给定[3,32,321],通过将数组重新排序,可构造6个可能性的数字: 3+32+321=332321 3 ...
- 一些 Mysql 维护命令
----------------------------------------------------------------------------使用mysql客户端程序------------ ...
- Fragment初探
Fragment允许将Activity拆分成多个完全独立封装的可重用的组件,每个组件有它自己的生命周期和UI布局.Fragment最大的优点是为不同屏幕大小创建灵活的UI.每个Fragment都是独立 ...
- python 待关注库
Python待关注库 GUI 图形 Tkinter/wxPython/PyGTK/PyQt/PySide Web框架 django/web2py/flask/bottle/tornadoweb/web ...
- Xshell启动时显示丢失MSVCP110.dll
重装系统,装完Xshell5启动时,出现丢失MSVCP110.dll文件 这种情况不要相信网上所说的什么下载“MSVCP110.dll”文件或者下载微软的vcredist 2012 这样没用 正确的姿 ...
- Java学习---Quartz定时任务快速入门
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...
- JQuery学习---JQuery基础知识
JQuery介绍: [官网]http://jquery.com [参考API]http://jquery.cuishifeng.cn/ JQuery的低版本支持IE低版本,JQuery的2版本不太支持 ...
- Exchange 2016 CU6 安装后,发生错误 出现意外错误,无法处理您的请求
公司的Exchange2016环境准备上线了,今天owa打不开了.出现如下图的错误,更多详细信息没有截图,但最关键的一句记下来了. X-OWA-Error Microsoft.Exchange.Dia ...
- Linux系统下安装Redis和Redis集群配置
Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...
- win环境下使用sqlmap写shell + MYSQL提权(默认就是system权限)
今天在来一个mysql提权 (也可以说是默认system权限提的) 在被黑站点找到一个站 先教拿shell是有注入漏洞的 有可能是root权限的注入点 可以确定是有注入漏洞的 也得到了 物理路径 ...