1

ここで gmock または gtest を使用して CustomStream 外部依存関係をモックアウトする方法は?

#include <mylib/common/CustomStream.h>

namespace sender {
    void Send(int p1){
        mylib::common::CustomStream stream;
        stream << p1;
    }
}
4

1 に答える 1

2

CustomStream が純粋仮想インターフェイスから継承されるようにします。次に、テスト double を依存関係として関数に挿入します。例えば:

namespace mylib {
    namespace common {

        class OutputStream {
            virtual void Output(int value) = 0;
            OutputStream& operator<<(int value) { this->Output(value); return *this; }
        };

        class CustomStream : public OutputStream {
            virtual void Output(int value) { /*...*/ };
        };

    }
}

namespace sender {
    void Send(OutputStream& stream, int p1) {
        stream << p1;
    }
}

namespace tests {

    class MockOutputStream : public mylib::common::OutputStream {
        MOCK_METHOD1(Output, void (int value));
    };

    TEST(testcase) {
        MockOutputStream stream;
        EXPECT_CALL(stream, Output(2));
        sender::Send(stream, 2);
    }

}

ただし、もちろん、各クラスを個別のヘッダー ファイルに入れます。また、クラスなしで関数 (「送信」) を持つことも良い考えではありませんが、それは遺産だと思います。(注: 私はこれをコンパイルしようとはしませんでした。Google Mock+Test っぽい構文です。)

于 2013-03-28T19:34:17.070 に答える