使用gmock进行外部依赖

时间:2013-03-28 18:14:04

标签: c++ googletest googlemock

如何使用gmock或gtest模拟出CustomStream外部依赖项?

#include <mylib/common/CustomStream.h>

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

1 个答案:

答案 0 :(得分:2)

使CustomStream继承自纯虚拟接口。然后将test 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-ish语法。)