ここで gmock または gtest を使用して CustomStream 外部依存関係をモックアウトする方法は?
#include <mylib/common/CustomStream.h>
namespace sender {
void Send(int p1){
mylib::common::CustomStream stream;
stream << p1;
}
}
ここで gmock または gtest を使用して CustomStream 外部依存関係をモックアウトする方法は?
#include <mylib/common/CustomStream.h>
namespace sender {
void Send(int p1){
mylib::common::CustomStream stream;
stream << p1;
}
}
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 っぽい構文です。)