Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
社区首页 >专栏 >GTest的安装与使用

GTest的安装与使用

作者头像
顾翔
发布于 2019-12-12 03:42:34
发布于 2019-12-12 03:42:34
2.3K00
代码可运行
举报
文章被收录于专栏:啄木鸟软件测试
运行总次数:0
代码可运行

顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,

主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。

来源:http://www.uml.org.cn

安装GTest

1、安装源代码

下载gtest,release-1.8.0

git clone https://github.com/google/googletest

gtest编译

cd googletest

生成Makefile文件(先安装cmake,brew install cmake),继续输入命令编译:

cmake CMakeLists.txt

执行make,生成两个静态库:libgtest.a libgtest_main.a

make

拷贝到系统目录,注意,如果下诉目录位置在不同版本位置有变动,用find . -name "libgtest*.a" 找到位置

sudo cp libgtest*.a /usr/lib

sudo cp –a include/gtest /usr/include

检查是否安装成功

可以写一个简单的测试代码如下:

#include<gtest/gtest.h>int add(int a,int b){return a+b;}TEST(testCase,test0){EXPECT_EQ(add(2,3),5);}int main(int argc,char **argv){testing::InitGoogleTest(&argc,argv);return RUN_ALL_TESTS();}

在该文件的终端输入编译指令:

gqx@gqx-Lenovo-Product:~/workplace/aaaa$ g++ test.cc -lgtest -lpthreadgqx@gqx-Lenovo-Product:~/workplace/aaaa$ ./a.out

即得到如下显示结果:

GTest的一些基本概念

要测试一个类或函数,我们需要对其行为做出断言。当一个断言失败时,Google Test会在屏幕上输出该代码所在的源文件及其所在的位置行号,以及错误信息。也可以在编写断言时,提供一个自定义的错误信息,这个信息在失败时会被附加在Google Test的错误信息之后。

断言常常成对出现,它们都测试同一个类或者函数,但对当前功能有着不同的效果。ASSERT_*版本的断言失败时会产生致命失败,并结束当前函数。EXPECT_*版本的断言产生非致命失败,而不会中止当前函数。通常更推荐使用EXPECT_*断言,因为它们运行一个测试中可以有不止一个的错误被报告出来。但如果在编写断言如果失败,就没有必要继续往下执行的测试时,你应该使用ASSERT_*断言。 因为失败的ASSERT_*断言会立刻从当前的函数返回,可能会跳过其后的一些的清洁代码,这样也许会导致空间泄漏。

GTest的断言

1、布尔值检查

2、数值型数据检查

3、字符串比较

4、异常检查

5、浮点型检查

对相近的两个数比较:

6、此外还有类型检查、谓词检查等

事件机制

全局事件

要实现全局事件,必须写一个类,继承testing::Environment类,实现里面的SetUp和TearDown方法。

1. SetUp()方法在所有案例执行前执行

2. TearDown()方法在所有案例执行后执行

还需要告诉gtest添加这个全局事件,我们需要在main函数中通过testing::AddGlobalTestEnvironment方法将事件挂进来,也就是说,我们可以写很多个这样的类,然后将他们的事件都挂上去。

TestSuite事件

我们需要写一个类,继承testing::Test,然后实现两个静态方法

1. SetUpTestCase() 方法在第一个TestCase之前执行

2. TearDownTestCase() 方法在最后一个TestCase之后执行

在编写测试案例时,我们需要使用TEST_F这个宏,第一个参数必须是我们上面类的名字,代表一个TestSuite。

TestCase事件

TestCase事件是挂在每个案例执行前后的,实现方式和上面的几乎一样,不过需要实现的是SetUp方法和TearDown方法:

1. SetUp()方法在每个TestCase之前执行

2. TearDown()方法在每个TestCase之后执行

以下案例解决说明上述三个事件的使用

代码语言:javascript
代码运行次数:0
复制
#include<gtest/gtest.h>
#include<map>
#include<iostream>
using namespace std;
class Student{
public:
Student(){
age=0;
}
Student(int a){
age=a;
}
void print(){
cout<<"*********** "<<age<<" **********"<<endl;;
} 
private:
int age;
};
class FooEnvironment : public testing::Environment{
public:
virtual void SetUp()
{
std::cout << "Foo FooEnvironment SetUP" << std::endl;
}
virtual void TearDown()
{
std::cout << "Foo FooEnvironment TearDown" << std::endl;
}
};
static Student *s;
//在第一个test之前,最后一个test之后调用SetUpTestCase()和TearDownTestCase()
class TestMap:public testing::Test
{
public:
static void SetUpTestCase()
{
cout<<"SetUpTestCase()"<<endl;
s=new Student(23);
}

static void TearDownTestCase()
{
delete s;
cout<<"TearDownTestCase()"<<endl;
}
void SetUp()
{
cout<<"SetUp() is running"<<endl;

}
void TearDown()
{
cout<<"TearDown()"<<endl;
} 
};

TEST_F(TestMap, Test1)
{

// you can refer to s here
s->print();
}
int main(int argc, char** argv)
{
testing::AddGlobalTestEnvironment(new FooEnvironment);
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

相关结果和说明如下:

参数化

当考虑多次要为被测函数传入不同的值的情况时,可以按下面的方式去测试。必须添加一个类,继承testing::TestWithParam<T>。其中T就是你需要参数化的参数类型,如下面的案例是int型参数。(官方文档上的案例)

代码语言:javascript
代码运行次数:0
复制

#include<gtest/gtest.h>
// Returns true iff n is a prime number.
bool IsPrime(int n)
{
// Trivial case 1: small numbers
if (n <= 1) return false;
// Trivial case 2: even numbers
if (n % 2 == 0) return n == 2;
// Now, we have that n is odd and n >= 3.
// Try to divide n by every odd number i, starting from 3
for (int i = 3; ; i += 2) {
// We only have to try i up to the squre root of n
if (i > n/i) break;
// Now, we have i <= n/i < n.
// If n is divisible by i, n is not prime.
if (n % i == 0) return false;
}
// n has no integer factor in the range (1, n), and thus is prime.
return true;
}
class IsPrimeParamTest : public::testing::TestWithParam<int>{};
TEST_P(IsPrimeParamTest, HandleTrueReturn)
{
int n = GetParam();
EXPECT_TRUE(IsPrime(n));
}
//被测函数须传入多个相关的值
INSTANTIATE_TEST_CASE_P(TrueReturn, IsPrimeParamTest, testing::Values(3, 5, 11, 23, 17));
int main(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
gtest的介绍和使用
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,
顾翔
2019/12/12
1.4K0
gtest的介绍和使用
gtest单元测试框架介绍及简单使用
Gtest是Google的一个开源框架,它主要用于写单元测试,检查真自己的程序是否符合预期行为。可在多个平台上使用(包括Linux, Mac OS X, Windows, Cygwin和Symbian)。它提供了丰富的断言、致命和非致命失败判断,能进行值参数化测试、类型参数化测试、“死亡测试”。
杨永贞
2022/04/13
4.1K0
gtest单元测试框架介绍及简单使用
【gTest】gtest简介及简单使用
gtest是一个跨平台(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)的C++测试框架,有google公司发布。gtest测试框架是在不同平台上为编写C++测试而生成的。
全栈程序员站长
2022/11/11
2K0
Google 单元测试框架
到 github 拉取代码或者下载某个版本的 zip 包到本地目录,参考 gtest 中的 README.md 如何编译库和编译自己的代码,下面简单介绍下编译方法
orientlu
2018/09/13
2.2K0
如何用googletest写单元测试
googletest是一个用来写C++单元测试的框架,它是跨平台的,可应用在windows、Linux、Mac等OS平台上。下面,我来说明如何使用最新的1.6版本gtest写自己的单元测试。
陶辉
2019/06/21
6.7K0
如何用googletest写单元测试
gtest和gmock的关系_gtest教程
闲来无事,想尝试一下gtest/gmock,根据下载的源码包里有README,并根据自己安装过程补充记录如下,以便以后查询
全栈程序员站长
2022/11/10
1.9K0
gtest和gmock的关系_gtest教程
gtest框架_软件测试框架
以上命令会将gtest编译好,并将静态链接库放在/usr/local/lib 目录下: zhouhao@ubuntu:/usr/local/lib$ ls libgmock.a libgtest.a pkgconfig python3.6 libgmock_main.a libgtest_main.a python2.7
全栈程序员站长
2022/11/10
2.8K0
GTest 总结_gtest单元测试
Google C++单元测试框架(简称Gtest),可在多个平台上使用(包括Linux, Mac OS X, Windows, Cygwin和Symbian),它提供了丰富的断言、致命和非致命失败判断,能进行值参数化测试、类型参数化测试、“死亡测试”。
全栈程序员站长
2022/11/11
1.9K0
GTest 总结_gtest单元测试
gtest初识_tests strength
TEST()第一个参数是测试用例的名称,第二个参数是测试用例中的测试名称(有效的C++标识符,不应包含下划线)。 googletest按照测试用例对测试结果进行分组。
全栈程序员站长
2022/11/11
4830
C++雾中风景番外篇2:Gtest 与 Gmock,聊聊C++的单元测试
笔者目前使用的系统是Deepin 15.6,是基于 Debian jessie的一款国内发行版。安装 Gtest 和 GMock 十分简单:
HappenLee
2018/11/01
4.8K0
Google Test(GTest)使用方法和源码解析——预处理技术分析和应用
        在《Google Test(GTest)使用方法和源码解析——概况》最后一部分,我们介绍了GTest的预处理特性。现在我们就详细介绍该特性的使用和相关源码。(转载请指明出于breaksoftware的csdn博客)
方亮
2019/01/16
1.7K0
(Android下使用)Google Test C++单元测试框架(二)
TEST() and TEST_F() implicitly register their tests with googletest. So, unlike with many other C++ testing frameworks, you don't have to re-list all your defined tests in order to run them.
李小白是一只喵
2020/04/24
1.9K0
(Android下使用)Google Test C++单元测试框架(二)
gtest整理_softest
::testing::Bool() 会生成 true 和 false两种值,::testing::Combine 把 {true,false} 和 {1, 10} 这两个集合的值组合起来,相当于
全栈程序员站长
2022/09/27
1.5K0
gtest_gtest测试静态函数
编译: 假设源代码为sample.h和sample.cpp,测试代码为test.cpp
全栈程序员站长
2022/11/11
1.1K0
GTEST学习总结
https://blog.csdn.net/lm409/article/details/55049893 https://blog.csdn.net/liyuefeilong/article/details/50993607 https://blog.csdn.net/qq_26437925/article/details/56479841
全栈程序员站长
2022/11/11
7260
linux下使用gtest框架进行c/c++测试-gtest环境搭建
google test(以下简称gtest)是谷歌的开源C++单元测试框架,用来做c/c++的单元测试比较方便。下面对于它在linux下的使用环境搭建做简单介绍。
编程珠玑
2019/09/04
5.6K0
白盒测试体系—框架搭建篇
良好的布局是成功的一半,选择一款合适的测试框架能够使我们的白盒测试更高效,事半功倍。
用户5521279
2020/05/08
1.6K0
C++代码调试和测试:使用调试器和单元测试工具
在软件开发中,调试和测试是非常重要的步骤,它们可以帮助我们发现和修复代码中的错误,确保软件的质量和可靠性。本篇文章将介绍如何使用调试器和单元测试工具来调试和测试 C++ 代码。
大盘鸡拌面
2023/12/05
7390
google软件测试之道_gtest测试框架
gtest 提供了一套优秀的 C++ 单元测试解决方案,简单易用,功能完善,非常适合在项目中使用以保证代码质量。
全栈程序员站长
2022/11/10
7520
google软件测试之道_gtest测试框架
【GoogleTest】GoogleTest单元测试(1)快速上手
快速上手 GoogleTest是Google的一套用于编写 C++测试的框架,可以运行在多个平台上(包括Linux、MacOS X、Windows、Cygwin等)。基于xUnit架构,支持很多好用的特性,包括自动识别测试、丰富的断言、断言自定义、死亡测试、非终止的失败、生成XML报告等等。 以下简称GTest。 ---- GTest的优点 好的测试应包括如下特点。 测试应该是独立的、可重复的。一个测试的结果不应该作为另一个测试的前提。 GTest中每个测试运行在独立的对象中。如果某个测试
半生瓜的blog
2023/05/13
7380
【GoogleTest】GoogleTest单元测试(1)快速上手
相关推荐
gtest的介绍和使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 大模型知识引擎×DeepSeek实践征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验