Google模拟:如何在模拟参数中从指针中复制内存
Google Mock: How to copy memory from a pointer in a mock argument?
我的以下功能与签名模拟:
uint32 Icc_u_SendMessage(te_IccTransferType e_DataTxType, SW_e_IccMsgType e_MsgType, uint8 *const pui8_DataRef, const uint32 ui32_DataSize, const SW_e_CoreIdent e_MsgDestination)
对我来说有趣的论点是arg2( pui8_DataRef
)。
调用测试的功能:
MessageBuffer<ET_t_SignalToGs> s_locPayloadToGs; (Local)
iccReturnValue = c_ICC_Messages::ICC_ui32_SendMessage(c_ICC_Messages::e_TxSendRefCopyData, e_msg, (uint8*)&locPayloadToGs, u_size, e_dst);
我想复制整个s_locPayloadToGs
的全部包含的检查。SaveArgPointee()
的问题是第三个参数是(uint8 *
),我只得到第一个字节。
我该如何从EXPECT_CALL()
中的模拟参数中执行一种memcpy
?喜欢以下:
c_event_transceiver::MessageBuffer<c_event_transceiver::ET_t_SignalToGs> expectedPayload;
EXPECT_CALL(obj_MockIccMessages, ICC_ui32_SendMessage(c_ICC_Messages::e_TxSendRefCopyData,
e_MsgToGs,
_,
sizeof(expectedLocPayload),
c_event_transceiver::a_ConfigMapGsToCore[0].e_core)).WillOnce(DoAll(SaveArgPointee<2>(&expectedPayload), Return(retSendMessage)));
谢谢
您可以定义自己的动作:
ACTION_P(SavePayload, expectedPayload)
{
auto beginOfArray = arg2;
auto sizeOfArray = arg3;
auto endOfArray = beginOfArray + sizeOfArray ;
expectedPayload->assign(beginOfArray , endOfArray);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// that only my guess how it is possible to store payload
}
,只需在测试中用SavePayload(&expectedPayload)
替换SaveArgPointee<2>(&expectedPayload)
。
但是,您真正需要的是一个多参数匹配器 - 将与此类有效载荷相匹配,类似的是:
MATCHER_P(matchPayload, expectedPayload)
{
auto beginOfArray = get<2>(arg);
auto sizeOfArray = get<3>(arg);
auto endOfArray = beginOfArray + sizeOfArray ;
return expectedPayload->equalTo(beginOfArray , endOfArray);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// that only my guess how it is possible to compare payloads
}
并将其与With(matchPayload())
Clausure一起使用:
c_event_transceiver::MessageBuffer<c_event_transceiver::ET_t_SignalToGs> expectedPayload;
// expectedPayload - build it to be as this you expect
...
EXPECT_CALL(obj_MockIccMessages, ICC_ui32_SendMessage(c_ICC_Messages::e_TxSendRefCopyData,
e_MsgToGs,
_,
sizeof(expectedLocPayload),
c_event_transceiver::a_ConfigMapGsToCore[0].e_core))
.With(matchPayload(&expectedPayload)).WillOnce(Return(retSendMessage));
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 如何使用Google Mock来模拟gettimeofday()
- 为什么使用 "this" 指针调用派生成员函数?
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 用参数作为指针的模拟功能
- 如何检查谷歌模拟中作为空指针传递的字符串参数
- 模拟一个具有双重指针作为参数的函数
- Google模拟:如何在模拟参数中从指针中复制内存
- Python模拟C++指向类成员的指针
- 如何将模拟对象与智能指针一起使用
- 用API模拟“std::shared_ptr”的智能指针,将回调绑定到refcount-modifying事件,例如re
- 在友元函数 c++ 中模拟"this"指针概念
- C++谷歌模拟SaveArg:如何保存指针参数
- 用c++类模拟指针(包括delete)
- 如何在c++中优雅地使用智能指针来模拟复杂的生命周期
- 可以谷歌模拟一个方法与智能指针返回类型
- 如何用指针参数模拟方法
- 使用引用用Java模拟c++指针
- 模拟一个文件指针c++