首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用googletest测试带有引用传递参数的void函数?

使用googletest测试带有引用传递参数的void函数可以按照以下步骤进行:

  1. 引入googletest库:首先需要在项目中引入googletest库,可以通过将googletest的源代码添加到项目中,或者使用构建工具(如CMake)来管理依赖关系。
  2. 编写测试用例:创建一个测试文件,编写测试用例来测试带有引用传递参数的void函数。测试用例应该包括函数调用和期望的结果。
  3. 定义测试夹具:如果需要在多个测试用例中共享一些对象或数据,可以定义一个测试夹具(test fixture)。测试夹具可以在每个测试用例执行前后进行初始化和清理操作。
  4. 编写测试用例:在测试用例中,调用待测试的void函数,并将参数传递给它。使用断言来验证函数的行为是否符合预期。
  5. 运行测试:使用googletest提供的测试运行器来运行测试用例。测试运行器会执行所有的测试用例,并输出测试结果。

以下是一个示例代码:

代码语言:txt
复制
#include <gtest/gtest.h>

// 待测试的void函数
void myVoidFunction(int& param) {
    param = 42;
}

// 定义测试夹具
class MyFixture : public ::testing::Test {
protected:
    int param;

    void SetUp() override {
        param = 0;
    }
};

// 测试用例
TEST_F(MyFixture, TestMyVoidFunction) {
    myVoidFunction(param);
    EXPECT_EQ(param, 42);
}

// 运行测试
int main(int argc, char** argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

在上述示例中,我们首先引入了googletest库。然后定义了一个待测试的void函数myVoidFunction,该函数接受一个引用传递的参数,并将其值设置为42。

接下来,我们定义了一个测试夹具MyFixture,其中包含一个整型参数param。在夹具的SetUp函数中,我们将param初始化为0。

然后,我们编写了一个测试用例TestMyVoidFunction,在该测试用例中,我们调用了myVoidFunction函数,并使用断言EXPECT_EQ来验证param的值是否为42。

最后,在main函数中,我们使用::testing::InitGoogleTest来初始化测试运行器,并通过RUN_ALL_TESTS函数运行所有的测试用例。

这样,我们就可以使用googletest来测试带有引用传递参数的void函数了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Golang函数参数传递引用传递

1、值传递 2、引用传递 1、值传递 golang有值传递引用传递两种传递方式 函数如果使用参数,该变量可称为函数形参。...形参就像定义在函数体内局部变量 值传递是指在调用函数时将实际参数复制一份传递函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数 也就是说,函数传递原来数据拷贝,一个副本,比如当传递一个...传递一个指针类型参数,其实传递就是这个指针类型拷贝,而不是这个指针执行值 默认情况下,Go语言使用是值传递(则先拷贝参数副本,再将副本传递函数),即在调用过程中不会影响到实际参数 代码示例...: 100 交换前 b 值为 : 200 交换后 a 值 : 100 交换后 b 值 : 200 */ 因为上述程序中使用是值传递,所以两个值并没有实现交换,可以使用引用传递来实现交换 2、...引用传递 引用传递是指在调用函数时将实际参数地址传递函数中,那么在函数中对参数所进行修改,将影响到实际参数 由于引用类型(slice、map、interface、channel)自身就是指针,所以这些类型值拷贝给函数参数

2.5K10

C语言函数参数如何传递

因为函数参数传递时候,都是传原数据副本,也就是说,swap内部使用a和b只是最初始a和b一个副本而已,所以无论在swap函数内部对a和b做任何改变,都不会影响初始a和b值。...我们再结合下面的图来理解: 值传递 首先图中方框中上部分a和b代表了main函数a和b,即原始数据,而方框中下部分a和b代表了函数参数a和b,即原始数据“副本”。...为什么又有传值,又有传指针 看到这里,不知道你是否会疑惑,为什么给函数传递参数时候,一会是传值,一会是传指针呢?为什么传指针就能改变参数值呢?实际上,C语言里,参数传递都是值传递!...我们再通过图来理解前面为什么传指针就可以交换a,b值: 传指针 从图中可以看出,虽然传递函数是指向a和b指针副本,但是它副本同样也是指向a和b,因此虽然不能改变指针指向,但是能改变参数a...我们还是利用前面所知来分析,由于传递给getMemory函数参数都是一个副本,因此函数p也是外部p一个副本,因此即便在函数内部,将p指向了一块新申请内存,仍然不会改变外面p值,即p还是指向NULL

4.1K11
  • Python函数参数如何传递

    前言 Python函数大家应该不陌生,那函数参数如何传递,你知道吗?我们先看一下下面的代码,和你想预期结果是不是一样了?...变量赋值 在我告诉你们Python函数参数如何传递之前,我们要先学习一下变量赋值背后逻辑。我们先看一个简单代码。...Python函数参数传递 我先说结论,Python函数参数传递是对象引用传递。我们举个例子。...def test_1(b): b = 5 a = 3 test_1(a) print(a) # 3 根据对象引用传递,a和b都是指向3这个对象,在函数中,我们又执行了b = 5,所以b就指向了...所以,我们再来看开头案例,我想你应该能看明白了。今天分享就到这了,我们下期再见。

    3.7K20

    答网友问:golang中slice作为函数参数时是值传递还是引用传递

    今天有网友问通道和切片在赋值给另一个变量或作为函数参数传递时候是不是引用传递?因为老师在讲解时候说是指针传递? 先说结论:在Go语言中都是值传递,没有引用传递。...然后将b中第一个元素更改成10。那么,a中第一个元素也将会是10。那这是为什么呢?这个要从slice底层数据结构来找答案。...如下: slice底层结构其中一个实际上是有一个指针,指向了一个数组。...那么,在把a赋值给b时候,只是把slice结构也就是Array、Len和Cap复制给了b,但Array指向数组还是同一个。所以,这就是为什么更改了b[0],a[0]值也更改了原因。...另外,在Go中还有chan类型、map类型等都是同样原理。所以大家一定不要混淆。

    68020

    【Swift4】(5) 函数基本使用 | 可变参数 | inout引用传递 | 函数类型返回值 | 函数嵌套

    函数基本使用 关键字:func func hello(name:String) ->String { let result = "Hello,"+name return result...//nil nickname = "imagine" hello(name: nickname,greet: "Good Night") //Good Night,imagine" 无参数函数,直接返回一个字符串类型函数.../ () ,不返回任何值 func sayVoid() ->Void{ print("it is a void func") } 使用元组让函数返回多个值 func maxminScores(...一个函数最好只能设置一个可变参数,并且该可变参数只能放在这个函数参数列表最后一个位置 必须参数 > 默认值参数 > 可变参数 func add(a:Int,b:Int,others:Int ......//CvarArg也是可变参数 inout参数 - 引用传递 inout用于声明数据是地址传递,也称之为引用传递; inout修饰参数是不能有默认值,有范围参数集合也不能被修饰; 一个参数一旦被inout

    29730

    深入解析js中基本数据类型与引用类型,函数参数传递区别

    所有的函数参数都是按值传递。...函数外部值赋值给函数内部参数,与一个变量复制到另一个变量一样。基本类型值传递和基本类型一样,引用类型传递引用类型复制一样。...具体传递obj不是指针而是指针引用对象(副本copy)。实际上,当在函数内部重写obj时,这个变量引用就是一个局部对象了,而这个局部对象会在函数执行完毕后立即被销毁。...by value 引用传递:call by Call by reference 值传递引用传递,属于函数调用时参数求值策略(Evaluation Strategy),这是对调用函数时,求值和传值方式描述...这便引出了值类型和引用类型(这不是在说值传递最大区别:值类型用做参数会被复制,但是很多人误以为这个区别是值类型特性。其实这是值传递带来效果,和值类型本身没有关系。只是最终结果是这样。

    1.6K40

    如何理解java方法传值和传引用参数传递方式(基本数据类型和引用类型)

    结论: 1)当使用基本数据类型作为方法形参时,在方法体中对形参修改不会影响到实参数值 2)当使用引用数据类型作为方法形参时,若在方法体中 修改形参指向数据内容,则会对实参变量数值产生影响,...因为形参变量和实参变量共享同一块堆区; 3)当使用引用数据类型作为方法形参时,若在方法体中 修改形参变量指向,此时不会对实参变量数值产生影响,因此形参变量和实参变量分别指向不同堆区 例一:基本数据类型作为形参...,运行结果不改变实参 public class Main { public static void main(String[] args) { Person...setAge(int age) { this.age = age; } } 例二:引用类型–修改形参指向数据内容,运行结果改变实参指向数值,不改变实参地址 public...setName(String[] name) { this.name = name; } } 例三:引用类型–修改形参指向,运行结果,不改变实参任何东西 public

    1.8K30

    如何优雅传递 stl 容器作为函数参数来实现元素插入和遍历?

    ,直接使用 std::vector 这个容器作为参数(有的人可能觉得我多此一举,直接在函数里访问 m_svrmsgs 成员不就行了,为什么要通过参数传递呢?...注意这里相同类型要写两遍,一遍是函数模板参数,一遍是函数参数。...:WorkEngine”任何成员函数显式实例化 1>engine_db.cpp(15): error C2945: 显式实例化不引用模板类专用化 百思不得其解。...特别是还研究了如何将这种方式实现模板函数在不同文件中分别声明与实现,达到解除代码耦合目的,具有较强实用性。...C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解 [9]. c++模板函数声明和定义分离 [10]. C++模板编程:如何使非通用模板函数实现声明和定义分离

    3.7K20

    【gtest】 C++ 测试框架之使用 gtest 编写单元测试

    本教程分成以下部分: GoogleTest 入门(GoogleTest Primer) - 教你如何使用 GoogleTest 编写简单测试。如果你是 GoogleTest 新手,请先阅读此部分。...接下来,我们将解释如何编写一个测试程序,从单个断言级别开始,逐步构建到测试测试套件。 1.1 断言(assertions) 断言(assertions)是类似函数调用宏。...要提供自定义失败消息,只需使用 << 运算符或一系列此类运算符将其流式传递到宏中。...TEST(TestSuiteName, TestName) { ... test body ... } TEST() 宏第一个参数测试套件(test suite)名称,第二个参数测试套件内测试名称...,因此逻辑上相关测试应在同一个测试套件中;换句话说,它们 TEST() 第一个参数应该相同。

    1.9K10

    软件测试|Python函数参数之必传参数、默认参数、可变参数、关键字参数详细使用

    图片在Python中,函数参数是定义在函数头部变量,用于接收传递函数数据。Python函数参数有四种类型:必传参数、默认参数、可变参数和关键字参数。每种类型都有不同使用方式和适用场景。...,如果在调用函数时没有传递对应参数函数使用默认值。...默认参数使用可以使函数调用更加灵活,可以根据需求选择是否传递参数,如果不传递使用默认值。...关键字参数主要特点是可以不按照定义顺序传递参数,并且可以只传递部分参数。关键字参数使用可以增加函数调用可读性,避免参数顺序混淆问题。...必传参数在调用函数时必须提供,没有默认值;默认参数函数定义时给参数赋予一个默认值,在调用函数时可以不传递参数;可变参数可以接收任意数量参数使用星号(*)和双星号(**)来定义;关键字参数通过指定参数名来传递参数

    45320

    如何用java语言实现C#中ref关键字(按引用传递参数)效果

    在上一篇文章中(Java参数传递是值传递还是引用传递),主要分析了java语言参数传递只有按值传递而没有按引用传递。...先看一下微软C#文档对按引用传递定义(如下截图):https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords...那么java语言如何实现C#中ref关键字(按引用传递参数)效果呢?...思路 我们可以把需要传递参数再封装一层,即定义一个新类,使得需要传递参数成为新类成员变量,传递参数时就传递这个新类实例。以此达到ref关键字效果。...可以看出两次打印person地址值不一样,即调用完change() 方法之后,person引用(指向) 了另一个对象!

    2.5K60

    测试平台接入HttpRunner V4(二)使用config实现用例之间参数传递

    使用config实现例参之间传递这几天在群里看到有些人疑问,就是在各用例间参数无法传递,比如登录状态、响应结果等。...基于下面2种情况,虽然我觉得要保持用例独立性,但真正要做到用例相对独立是比较困难。同时我也有第1种情况需求,所以就开始整理,下面代码会以header为例进行实现,参数导出也可以同样实现1....用例1设置token,在用例2上无法使用,导致每个用例都要单独做登录操作,导致操作繁琐2....用例1接口返回结果,无法在用例2上使用,如果把多个用例放在同一个文件,会导致需要引用用例1用例都需要加上,后期维护是个比较大问题如何接入下面代码在测试平台接入HttpRunner V4(一)基本功能接入基础上修改使用...config进行传参,那么就需要使用应用传参,这样才操作后才可以在后续用例中引用type TestCaseJson struct {JsonString stringID

    37730

    如何使用apacheab压力测试小工具传参数

    一、 查看ab命令使用windowscmd进入apache根目录,输入ab查看命令基本使用。二. 传递参数1. GET方式 (1). ...只需要在请求url后面拼接参数就可以: ab -n 10 -c 10 http://www.baidu.com?content=balala2. POST方式(1)....在windows下最好使用一些工具创建txt文件,因为使用windows右键新建 文本文档,当使用ab-p虽然执行了但是对方服务器接收不到参数。(2)....将新建txt文件放到某个文件下,最好磁盘路径里不出现中文。(3). 在txt文件把post参数以&连接起来并保存,如:  content=小天使&name=测试(4)....、测试结果执行多少个请求就会在以上结果中前一秒(同一秒)执行多少请求就可以一览无遗

    21620

    CMake 秘籍(五)

    对于我们当前示例,我们通过 CMAKE_ARGS 和 CMAKE_CACHE_ARGS 选项传递配置参数。前者直接作为命令行参数传递,而后者通过 CMake 脚本文件传递。...关于如何使用该目标测试示例源码讨论,我们请读者参考第四章,创建和运行测试,第 3 个菜谱,定义单元测试并链接到 Google Test: 我们首先包含FetchContent模块,它将提供我们所需函数来声明...(googletest) 之前函数调用定义了googletest_POPULATED。...内容名称“googletest”是我们选择,有了这个,我们将能够在查询其属性、填充目录以及稍后配置子项目时引用内容。...如果提供了这个参数,编译器将使用程序员固定名称为这些子程序和函数生成符号。

    70420

    高级性能测试系列《12. 使用V函数,进行变量引用,得到想要结果值 》

    目录 一、注意 二、V函数 1.做一个变量引用 2.用V函数 3.注意 三、总结 一、注意 jmeter中,做功能测试、自动化测试时,你可以使用Beanshell元件。...但是,在性能测试中,能不用,坚决不要用带有任何Beanshell字样元件,相关脚本里都不要去使用这个。 要写脚本,用其它元件,不用Beanshell元件。...如果你要写java脚本,也不要使用Beanshell任何元件,建议大家使用JSR223开头元件。 原因是:本身这个Beanshell元件代码,消耗资源就非常得多,它性能比较差。...1.做一个变量引用: ${__counter(,)} 参考:${__counter(,)}函数用法 循环次数为3次 用户定义变量名称 ${var_${__counter(,)}} 编写http...然后再使用$符号和大括号扩起来,进行了变量引用,这样才得到想要结果值。 http请求:修改了名称和消息体数据 运行成功 3.注意 取样器在运行时候,HTTP请求里名称也会进行代码运算。

    2K20

    C++ 项目之Googletest单元测试

    C++ 项目之Googletest单元测试 1.Clion集成Googletest单元测试 Googletest - Google Testing and Mocking Framework 源码下载地址...然后项目中创建ext目录,里面分为两块 第一块:includes 包含gmock与gtestinclude文件,对应于gcc -I参数,头文件路径,包含以.h结尾头文件 第二块:libs 包含gmock...与gtestlibs文件,对应gcc -L参数,库文件路径,里面包含是一些.so或.dll等动态或静态链接库 ├── ext │ ├── includes │ │ ├── gmock │...TRUE还是FALSE时,希望能够输出传入参数是什么,以便失败后好跟踪 例如: // 预测断言 bool MN(int m, int n) { return m>n; } //检查一个函数返回值...(MN, m, n); //只提供<=5个参数 传递参数要与函数MN对应 } `EXPECT_PRED2(pred2, val1, val2);ASSERT类似.PRED2可以到PRED5 最多支持5

    4.1K20

    CC++生态工具链——接口模拟工具gmock

    二,Mock使用场景 当项目所依赖某个接口函数没有被开发出来时,为了不阻塞开发进度,可以使用Mock去模拟这个接口函数功能。...三,gmock简介 gmock全称是Google Mock,是Google于2008年推出C++测试工具,gmock是编写和使用C++模拟类框架。...四,gmock主要特性 1.提供了用于定义模拟行为声明性语法。 2.支持对任意类型函数或被重载函数进行模拟。 3.拥有丰富匹配器,用于验证函数参数。...五,如何获取gmock 获取gmock,需要下载并编译GoogleTest开源库源代码: git clone https://github.com/google/googletest cd googletest...开发步骤 测试之前: 确定需要模拟类接口 定义Mock类,并继承需要被模拟类 利用MOCK_METHOD宏来模拟虚函数 测试期间: 使用testing命名空间 实例化Mock类,创建模拟对象 设置模拟对象默认行为或期望行为

    2.8K30

    google软件测试之道_gtest测试框架

    大家好,又见面了,我是你们朋友全栈君。 新博客链接 gtest 提供了一套优秀 C++ 单元测试解决方案,简单易用,功能完善,非常适合在项目中使用以保证代码质量。...这个宏使用类似于: TEST(test_case_name, test_name) { ... test body ... } 一个 test_case_name 对应一个函数测试用例,test_name...sample3 sample3 用来演示一个测试夹具使用。前面我们每个测试用例每个测试集间都是完全独立使用数据也互不干扰。但如果我们使用测试集需要使用一些相似的数据呢?...后面测试用例每个测试集应该使用 TEST_F 宏,第一个参数是我们定义类名,第二个是测试名称。...对于每个 TEST_F 函数,对应执行过程如下: 创建测试夹具类(也就是说每个 TEST_F 都有一个运行时创建夹具)。 用 SetUp 函数初始化。 运行测试集。

    73120
    领券