1

我正在为某些类编写一些单元测试。这些类使用另一个类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 库提供自定义谓词或类来比较预期参数和实际参数?

4

1 回答 1

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));
于 2012-06-07T15:24:11.780 回答