gtest-将模拟函数参数分配()

GTest - Pass Mock function parameter to ASSIGN()

本文关键字:分配 参数 函数 模拟 gtest-      更新时间:2023-10-16

所以我有一个函数,可以说writehw(value)通常写入硬件uint32,但我在嘲笑。我想将输入传递给该模拟功能,然后将其传递给分配操作,以将该值分配给测试本身的本地变量。这样,我可以验证编写的值(通常是通过位操作)是正确的,可以模仿硬件存储。

所以我的参数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)));

我试图弄清楚如何将Arg4进入readbyport,以便我可以将其放入分配的第二个Parmeter中,以将其放在regstorage中。

我已经成功地使用了动作宏来获取Arg4值,但这似乎真的很愚蠢,所以我认为必须有一种更简单的方法。

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

谢谢!

一个是使用Invoke ..如Gmock中所述 - 当返回类型为void

时如何修改方法参数
ProxyReadByPort(arg1, arg2, arg3, arg4) {
   ::testing::Assign(...., arg2);
   return 0;
}
EXPECT_CALL(cAdapterMock, ReadByPort(_, _, _, _, _)
   .WillOnce(Invoke(ProxyReadByPort))

btw,时间(1)和willrepeated()工作不好,而是使用willonce。

我发现解决方案是使用savearg(指针),其中n是参数,指针也是您要保存参数的变量。