所以我有一个函数,可以说WriteHW(value),该函数通常写入硬件UINT32,但是我在嘲笑。我想将输入传递给该模拟函数,并将其传递给ASSIGN动作,以将该值分配给测试本身的局部变量。这样,我可以验证写入的值(通常通过位操作)是正确的,类似于硬件存储。
所以我的参数4是输入,它被“写入”到我的模拟硬件(regStorage变量)。
基本上我的模拟期待看起来像这样
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中。
我已经成功地使用ACTION宏获取arg4值,但这似乎是很愚蠢的技巧,因此我认为必须有一种更简单的方法。
ACTION(GetWrittenMauiRegister) { return arg4; }
EXPECT_CALL(cAdapterMock, ReadByPort(_, _, _, _, _)) // #3
.Times(1)
.WillRepeatedly(DoAll(::testing::Assign(®Storage, (UINT32)GetWrittenMauiRegister),::testing::Return(0)));
谢谢!
答案 0 :(得分:1)
一种方法是使用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))
BTW,Times(1)和WillRepeatedly()可以工作,但是效果不好,请改用WillOnce。
答案 1 :(得分:0)
我发现解决方案使用的是SaveArg(pointer),其中N是参数,而指针也是您要保存参数的变量。