C++ GTest-将模拟函数参数传递给ASSIGN()
所以我有一个函数,比如WriteHW(value),它通常写入硬件UINT32,但我在模拟。我希望将输入传递给该模拟函数,并将其传递给ASSIGN操作,以便将该值分配给测试本身的局部变量。这样我就可以验证所写入的值(通常通过位操作)是否正确,有点像模拟硬件存储 因此,我的参数4是一个“写入”模拟硬件(regStorage变量)的输入。C++ GTest-将模拟函数参数传递给ASSIGN(),c++,googletest,gmock,C++,Googletest,Gmock,所以我有一个函数,比如WriteHW(value),它通常写入硬件UINT32,但我在模拟。我希望将输入传递给该模拟函数,并将其传递给ASSIGN操作,以便将该值分配给测试本身的局部变量。这样我就可以验证所写入的值(通常通过位操作)是否正确,有点像模拟硬件存储 因此,我的参数4是一个“写入”模拟硬件(regStorage变量)的输入。 基本上我的模拟预期是这样的 EXPECT_CALL(cAdapterMock, ReadByPort(_, _, _, _, _))
基本上我的模拟预期是这样的
EXPECT_CALL(cAdapterMock, ReadByPort(_, _, _, _, _))
.Times(1)
.WillRepeatedly(DoAll(::testing::Assign(®Storage, WHAT-DO-I-PUT-HERE-TO-GET-ARG4-THAT-CAME-INTO-READ-BY-PORT),::testing::Return(0)));
我正在试图弄清楚我是如何得到进入ReadByPort的arg4的,这样我就可以把它放在Assign的第二个参数中,从而把它放在regStorage中
我已经成功地使用动作宏来获取arg4值,但这似乎真的很愚蠢,所以我认为必须有一种更简单的方法
ACTION(GetWrittenMauiRegister) { return arg4; }
EXPECT_CALL(cAdapterMock, ReadByPort(_, _, _, _, _)) // #3
.Times(1)
.WillRepeatedly(DoAll(::testing::Assign(®Storage, (UINT32)GetWrittenMauiRegister),::testing::Return(0)));
谢谢 一个是使用Invoke。。如中所述
顺便说一句,Times(1)和WillRepeatedly()可以工作,但这并不好,请改用WillOnce 我发现解决方案是使用SaveArg(指针),其中N是参数,pointer是要保存参数的变量。Hmm,我希望有一些直接的方法,而不需要编写一个单独的方法或宏,这是我在谷歌模拟备忘单中遗漏的。如果你的答案真的是最简单的方法,那么在arg0到arg4之间设置动作宏几乎更容易。
ProxyReadByPort(arg1, arg2, arg3, arg4) {
::testing::Assign(...., arg2);
return 0;
}
EXPECT_CALL(cAdapterMock, ReadByPort(_, _, _, _, _)
.WillOnce(Invoke(ProxyReadByPort))