gpt4 book ai didi

gmock - 如何在 gmock 中设置自定义引用变量

转载 作者:行者123 更新时间:2023-12-04 01:47:34 26 4
gpt4 key购买 nike

我在我的项目中使用 gmock,我遇到了为模拟函数设置自定义引用变量的问题。
假设我有一个类如下:

class XXXClient {
public:
void QueryXXX(const Request&, Response&);
};

class XXXRunner {
public:
void DoSomething(XXXClient&);
};

有一个使用 XXXClient::QueryXXX 的客户端类 XXXRunner::DoSomething,我想模拟 XXXClient 来测试 XXXRunner::DoSomething。

问题发生在 QueryXXX 的第二个参数,即 'Response' 不是返回值,而是引用变量,我在 XXXClient::QueryXXX 中将一些数据填充到 Response 中。我想为响应设置自定义数据以验证 XXXRunner::DoSomething 的不同条件。

gmock 框架可以设置预期的返回值,但我找不到设置“返回变量”的方法?

那么怎么做呢?

最佳答案

首先,制作一个 XXXClient模拟类,让我们命名它XXXClientMock如下:

class XXXClientMock : public XXXClient
{
public:
MOCK_METHOD2(QueryXXX, QueryResult (Request&, Response&));
};

然后,使用 GMock 操作 SetArgReferee设置自定义参数,如下:
TEST(XXXRunnerTC, SetArgRefereeDemo)
{
XXXCLientMock oMock;

// set the custom response object
Response oRsp;
oRsp.attr1 = “…”;
oRsp.attr2 = “any thing you like”;

// associate the oRsp with mock object QueryXXX function
EXPECT_CALL(oMock, QueryXXX(_, _)).
WillOnce(SetArgReferee<1>(oRsp));
// OK all done

// call QueryXXX
XXXRunner oRunner;
QueryResult oRst = oRunner.DoSomething(oMock);


// use assertions to verity your expectation
EXPECT_EQ(“abcdefg”, oRst.attr1);
……
}

摘要
GMock 提供了一系列的 Action 来方便模拟函数,例如 SetArgReferee供引用或值(value), SetArgPointee对于指针, Return退货, Invoke对于调用自定义模拟函数(带有简单的测试逻辑),您可以看到 here更多细节。

好好享受 :)
谢谢

关于gmock - 如何在 gmock 中设置自定义引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8845753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com