gpt4 book ai didi

c++ - Googlemock:如何验证对象数组中的元素?

转载 作者:太空狗 更新时间:2023-10-29 21:29:19 26 4
gpt4 key购买 nike

我有一个小类:

struct Command
{
uint8_t cmdId;
uint8_t len;
uint8_t payload[MAX_PAYLOAD];
};

我只想使用 googlemock 期望验证有效负载的前两个元素。我不能使用 ElementsAreArray,因为它会检查有效载荷的长度和期望值是否相同。到目前为止,我的期望看起来像这样:

Command cmd;
cmd.cmdId = 0xD3;
cmd.len = 2;
cmd.payload[0] = 'm';
cmd.payload[1] = 'l';

EXPECT_CALL(mockQueue,
sendFromIsr(Pointee(AllOf(
Field(&Command::cmdId, Eq(0xD3)),
Field(&Command::len, Eq(2)),
//Field(&BirdCommand::payload, ElementsAreArray(cmd.payload, 2)) !<-- Doesn't work
))))
.WillOnce(Return(true));

有什么想法吗?模拟类如下所示:

template <typename T>
class MockQueue : public Queue<T>
{
public:
MOCK_METHOD1_T(sendFromIsr, bool(T &item));
};

最佳答案

这有什么问题:

EXPECT_CALL( mockQueue, sendFromIsr( Ref( cmd ) )
.WillOnce( Return( true ) );

?

由于命令是 POD,即使它复制了命令(在本例中不是),它也应该可以工作。


编辑

由于 Command 是 POD,您需要对其进行零初始化(或者在创建它时清除该对象占用的内存。在您的示例中:

Command cmd = Command();

那么你的对象就不会未初始化,比较也不会失败。

关于c++ - Googlemock:如何验证对象数组中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5117519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com