如何设定提升的期望::shared_array

How to set an expectation for a boost::shared_array

本文关键字:期望 shared array      更新时间:2023-10-16

我正在为某些类编写一些单元测试。这些类使用另一个comms_client来执行网络通信。例如,comms_client提供了一个send方法,该方法接收参数 a boost::shared_array

class comms_client
{
    ...
    public:
        void send(boost::shared_array<boost::uint8_t> const & buffer, size_t size) = 0;
    ...
};
为了测试类发送的内容,

我想创建一个模拟类,允许我检查正在发送的数组的内容是否正确。模拟课看起来像

class comms_client_mock : public comms_client
{
    ...
    public:
        MOCK_METHOD2(send, void(boost::shared_array<boost::uint8_t> const & buffer, size_t size));
    ..
};

不幸的是,我还没有找到在具有这种类型的参数中放置期望的方法。我尝试使用该testing::ElementsAreArray但它引发了编译错误。 是否有可用于在此类参数中放置期望的函数?您能否为 gmock 库提供自定义谓词或类来比较预期参数和实际参数?

在谷歌搜索和阅读了一些文档之后,我终于找到了GoogleMock食谱。按照其中包含的规范和示例编写一个简单的自定义匹配器非常简单。

这是生成的匹配器:

#include <gmock/gmock.h>
MATCHER_P2(CompareArray, expected, size, "The buffer doesn't match the expected value.")
{
    return std::equal(arg.get(), arg.get() + size, expected.get());
}

这就是它的使用方式:

boost::shared_array<boost::uint8_t> buffer(new boost::uint8_t[1]);
buffer[0] = 0x01;
EXPECT_CALL(send(_camera.get(), CompareArray(buffer, 1), 1));