如何使用gmock或gtest模拟出CustomStream外部依赖项?
#include <mylib/common/CustomStream.h>
namespace sender {
void Send(int p1){
mylib::common::CustomStream stream;
stream << p1;
}
}
答案 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语法。)