【问题标题】:How to set an expectation for a boost::shared_array如何为 boost::shared_array 设置期望
【发布时间】:2012-06-07 11:17:01
【问题描述】:

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

【问题讨论】:

    标签: c++ unit-testing boost googlemock


    【解决方案1】:

    在谷歌搜索和阅读一些文档之后,我终于找到了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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      相关资源
      最近更新 更多