我想将字符串“设备名称”传递给void *方法的指针参数,然后将其检索到字符数组。
为此,我做了如下所示的操作。
在这里,我创建了一个动作来实现这一目标。
ACTION_P(SetArg2ToChar, value) {*static_cast<char*>(arg2) = *value; }
Run Code Online (Sandbox Code Playgroud)
要调用/模拟的实际方法
bool getDictItem(WORD wIndex, BYTE bSubIndex, void * pObjData, DWORD dwLength, CSdo& sdo)
Run Code Online (Sandbox Code Playgroud)
我的模拟方法
MOCK_METHOD5(getDictItem,
bool(WORD wIndex, BYTE bSubIndex, void * pObjData, DWORD dwLength, CSdo& sdo));
Run Code Online (Sandbox Code Playgroud)
在代码中它被称为
if( !can.getDictItem(wIndex, bSubIndex, pObjData, dwLength, tSdo) )
Run Code Online (Sandbox Code Playgroud)
我想将一个字符串传递给它pObjData(列表中的第三个参数)。
在我的谷歌测试中,我就是这样做的。
char szDeviceName[30]= {0};
snprintf(szDeviceName, sizeof(szDeviceName), "%s", "Device Name" );
EXPECT_CALL( mockCan, getDictItem(_,_,_,_,_) )
.WillOnce(DoAll(SetArg2ToChar(szDeviceName),
Return(true)))
.RetiresOnSaturation();
/* Call a real method within which this mock method is called */
Run Code Online (Sandbox Code Playgroud)
如果我尝试直接使用“SetArgPointee<2>”设置此参数(pObjData),则会收到以下错误。
错误:“void ”不是指向对象的指针类型*
因此我正在尝试ACTION_P
现在通过这个实现,在调用这个模拟对象之后,我只得到变量的第一个字母szDeviceName(进入 this pObjData),即“D”,后跟真实代码流中的 29 个 0。
我想将完整的字符串名称设置到这个void *争论中。
我提到了下面的问题并且到目前为止已经取得了进展。但我无法传递完整的字符串。如何在谷歌模拟中将 void* 参数设置为一组值?
任何与此相关的信息都会有所帮助。
您可以调用函数(或方法)并复制参数,而不是这样做。
测试所在的源文件中类似这样的内容:
int invokedPObjData;
bool FakeGetDictItem(WORD wIndex, BYTE bSubIndex, void * pObjData, DWORD dwLength, CSdo& sdo)
{
// copy data. here I assumed it is an int
invokedPObjData = *static_cast< int* >( pObjData );
return true; // or whatever makes sense
}
Run Code Online (Sandbox Code Playgroud)
测试中:
EXPECT_CALL( mockCan, getDictItem(_,_,_,_,_) )
.WillOnce(Call(FakeGetDictItem))
.RetiresOnSaturation();
Run Code Online (Sandbox Code Playgroud)
然后稍后在测试中检查需要检查的内容。
| 归档时间: |
|
| 查看次数: |
7179 次 |
| 最近记录: |