gpt4 book ai didi

c++ - GTest - 将 Mock 函数参数传递给 ASSIGN()

转载 作者:行者123 更新时间:2023-11-28 04:27:55 25 4
gpt4 key购买 nike

所以我有一个函数可以说 WriteHW(value) 通常写入硬件 UINT32 但我在 mock 。我想将输入传递给该模拟函数,并将其传递给 ASSIGN 操作以将该值分配给测试本身的局部变量。这样我就可以验证正在写入的值(通常通过位操作)是正确的,有点模拟硬件存储。

所以我的参数 4 是一个“写入”到我的模拟硬件(regStorage 变量)的输入。
基本上我的模拟期望看起来像这样

EXPECT_CALL(cAdapterMock, ReadByPort(_, _, _, _, _))              
.Times(1)
.WillRepeatedly(DoAll(::testing::Assign(&regStorage, WHAT-DO-I-PUT-HERE-TO-GET-ARG4-THAT-CAME-INTO-READ-BY-PORT),::testing::Return(0)));

我想弄清楚如何获取进入 ReadByPort 的 arg4,以便我可以将其放入 Assign 的第二个参数中以将其放入 regStorage。

我已经成功地使用 ACTION 宏来获取 arg4 值,但这看起来真的很愚蠢,所以我认为必须有更简单的方法。

ACTION(GetWrittenMauiRegister) { return arg4; }
EXPECT_CALL(cAdapterMock, ReadByPort(_, _, _, _, _)) // #3
.Times(1)
.WillRepeatedly(DoAll(::testing::Assign(&regStorage, (UINT32)GetWrittenMauiRegister),::testing::Return(0)));

谢谢!

最佳答案

一个是使用 Invoke.. 如 GMOCK - how to modify the method arguments when return type is void 中所述

ProxyReadByPort(arg1, arg2, arg3, arg4) {
::testing::Assign(...., arg2);
return 0;
}

EXPECT_CALL(cAdapterMock, ReadByPort(_, _, _, _, _)
.WillOnce(Invoke(ProxyReadByPort))

顺便说一句,Times(1) 和 WillRepeatedly() 可以工作,但效果不佳,请改用 WillOnce。

关于c++ - GTest - 将 Mock 函数参数传递给 ASSIGN(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53826861/

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