如何设置boost :: shared_array的期望值

时间:2012-06-07 11:17:01

标签: c++ unit-testing boost googlemock

我正在为某些课程编写一些单元测试。这些类使用另一个comms_client来执行网络通信。例如,comms_client提供send方法,该方法接收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库提供一个自定义谓词或类来比较预期参数和实际参数吗?

1 个答案:

答案 0 :(得分:0)

在谷歌搜索并阅读一些文档后,我终于到了GoogleMock Cookbook。要按照包含的规范和示例编写简单的自定义匹配器,这非常简单。

这是结果匹配器:

#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));