gpt4 book ai didi

c++ - 在 EXPECT_CALL 中使用变量

转载 作者:行者123 更新时间:2023-12-01 14:25:08 26 4
gpt4 key购买 nike

我有一个用于串行接口(interface)的简单模拟类:

class MockSerialPort : public drivers::SerialPort
{
public:
MockSerialPort() : SerialPort(){};

MOCK_METHOD((Result<size_t>), Read, (uint8_t *, size_t, (const duration<int64_t, std::micro> &)), (override));
MOCK_METHOD((Result<size_t>), Write, (const uint8_t *, size_t), (override));
};
预计 Read期间call 我想知道调用代码期望的缓冲区长度,以便我可以正确地将数据复制到缓冲区。例如:
EXPECT_CALL(port_, Read(NotNull(),length,_))
.WillOnce(DoAll(SetArrayArgument<0>(&data[0], &data[length]), Return(length)));
正确的语法是什么?如果我如上所述指定变量,那么其中的值就是我们所期望的。但是我如何不让期望调用失败并实际存储 Read 的调用者的值?指定的?

最佳答案

在这种“复杂”的情况下 - 使用 lamdba 表达式 - 或其他一些函数,仿函数对象:


EXPECT_CALL(port_, Read(NotNull(),_ ,_))
.WillOnce([](uint8_t *data, size_t length, const duration<int64_t, std::micro> &) {
// do with data and length whatever you want
return length;
});

从 gtest1.10 开始这是可能的 - 但从您使用 MOCK_METHOD 的事实来看 - 我看到您使用的是最新的 gtest。
简而言之 - 替换 DoAll(....)带有一些仿函数对象 - 比如 lambda 表达式。

关于c++ - 在 EXPECT_CALL 中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62785275/

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