【单元测试】Google Test(GTest)和Google Mock(GMock)--编辑中

目录

Gtest简介

局限性

入门例子

还可以打印信息

进阶:测试我们函数的API--ASSERT_*和EXPECT_*

TEST, TEST_F  TEST_P的区别

ASSERT_*和EXPECT_* 说明

简单的测试例子

Test Fixtures(为多个测试使用相同的配置)

调用测试

编写main()函数

已知的限制

GMock简介

使用方法示例

好文备份

Gmock使用说明

一、安装部署

二、用法说明

三、情景示例

四、FAQ

五、实践小结


作者:bandaoyu 原文:https://blog.csdn.net/bandaoyu/article/details/124374057?spm=1001.2014.3001.5501

Gtest简介

GoogleTest 是 Google 的 C++ 测试和模拟框架,是库,提供了一些API接口,用于测试你的程序。

我们编写测试文件,里面调用GoogleTest的API 测试我们的函数。然后编译的时候把GoogleTest的库链接进来即可。

  Gtest是google开发的一个开源的C++测试框架,可在Linux, Windows,Mac多个平台上对C++源码进行测试,不仅支持单元测试,也支持其他类型测试。

一 基本概念

    使用gtest时,就是编写断言(assertions),断言语句会检测条件是否为真。一个断言可存在三种结果:success(成功),nonfatal failure(非致命失败),或 fatal failure(致命失败)。当出现致命失败时,终止当前函数;否则程序继续执行。

    Tests使用断言语句来检测代码的结果。如果一个test出现崩溃或有一个失败的断言,则该test是fails,否则是succeeds。

    一个test suite包括一个或多个tests。可以将多个tests分组到test suite中,以此反映所测试代码的结构。当一个test suite中的多个tests需要共享一些通用对象和子程序时,可将其放入一个test fixture class。

  一个test program可包含多个test suites.

局限性

gtest 是线程安全的,但是这个线程安全仅仅在支持 pthread 的系统的可以。在其他系统中使用两个线程运行测试是不安全的,比如 windows。

入门例子

编译环境中安装Gtest,既编译Gtest的源码编出Gtest的库gtest,放到链接目录下(供后面测试代码链接它和调用它的API)

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

cd googletest

mkdir build

cd build

$ cmake ..

make

sudo make install

我们的工程文件(程序/函数)

mySrc.h

int Foo(int a,int b);

mySrc.cpp

int Foo(int a,int b)

{

   if(0 == a||0 == b)

   throw "don't do that";

   int c = a%b;

   if (0 == c)

  {

     return b;

  }

  return Foo(b,c);

}

编写单元测试工程(文件)

test.cpp 里面调用Gtest的API测试我们的函数/程序:

#include "mySrc.h"

#include <gtest/gtest.h>

#TEST 就是Gtest的API,用于测试我们的程序的函数FooTest等

TEST(FooTest,HandleNoneZeroInput) 

{

   EXPECT_EQ(2,Foo(4,10));

   EXPECT_EQ(6,Foo(30,18));

}

int main(int argc,char*argv[])

{

   testing::InitGoogleTest(&argc,argv);

   return RUN_ALL_TESTS();

}

编译单元测试工程

$ g++ -std=c++11 test.cpp mySrc.cpp mySrc.h  -lgtest -lpthread  ./a.out

执行单元测试 

./a.out

摘自:Gtest学习系列一:Gtest安装与基本测试 :https://www.cnblogs.com/yanqingyang/p/12732087.html

还可以打印信息

ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length";

for (int i = 0; i < x.size(); ++i) {
  EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
}

进阶:测试我们函数的API--ASSERT_*和EXPECT_*

TEST, TEST_F  TEST_P的区别

TEST()  Example test

适合给static或全局函数或简单类编写单元测试时.

TEST_F() . Example test

测试夹具(Test Fixtures):对多个测试使用相同的数据配置。多个测试来操作类似的数据,你可以使用测试夹具。它允许您为几个不同的测试重复使用相同的对象配置。

可以编写默认构造函数或SetUp()函数来为几个测试准备(共同)对象。

如果需要,写一个析构函数或TearDown()函数来释放你在SetUp()中分配的任何资源。

更多详情见:Google C++单元测试框架GoogleTest---TestFixture使用 - 超超boy - 博客园

TEST_P() 

TEST_P() 当您想使用参数编写测试时,TEST_P()非常有用。您可以使用test_P()编写一个测试,而不是使用不同的参数值编写多个测试,test_P()使用GetParam()并可以使用INSTANTIATE_test_SUITE_P()进行实例化。示例测试. Example test

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GTestGoogle Test的简称,是一个功能强大的C++单元测试框架。它提供了丰富的断言和测试工具,可以方便地编写、运行和管理测试用例。 首先,我们需要下载并安装GTest框架。GTest可以从官方网站下载并编译安装,也可以使用包管理工具进行安装。安装完成后,我们就可以在自己的项目使用GTest进行单元测试了。 在编写测试用例时,我们需要在一个类定义多个测试函数。每个测试函数都应该以"TEST"宏开始,并且应该在测试函数使用多个断言来验证被测试代码的行为。例如,我们可以使用"EXPECT_EQ"断言来验证两个值是否相等。当测试函数执行完毕时,我们可以使用"ASSERT_"宏来检查测试是否通过。 GTest还提供了一些高级功能,例如测试夹具(Test Fixture)和参数化测试(Parameterized Test)等。测试夹具可以帮助我们在测试函数之前和之后执行一些共享的设置和清理操作。参数化测试可以使得我们在一组测试数据上运行相同的测试代码,以验证被测试代码在不同输入条件下的行为。 在运行测试时,我们可以使用GTest提供的命令行工具来执行测试用例。它会输出每个测试函数的执行结果以及总体的测试统计信息。我们也可以在IDE集成GTest,并通过点击运行按钮来执行测试。 总之,GTest是一个非常强大和方便的单元测试框架,可以帮助我们编写高质量的测试用例并验证被测试代码的正确性。通过充分利用GTest提供的功能,我们可以玩转Google单元测试框架,提升软件开发的质量和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值