1

いくつかのクラスの単体テストを書いています。これらのクラスは、別のクラスを使用comms_clientしてネットワーク通信を実行します。たとえば、パラメータとして a を受け取るメソッドをcomms_client提供します:sendboost::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クックブックにたどり着きました。そこに含まれている仕様と例に従って単純なカスタムマッチャーを作成するのは非常に簡単です。

これは結果のマッチャーです:

#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 に答える