Как смоделировать внешнюю зависимость CustomStream здесь с помощью gmock или gtest?
#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-ish.)
Других решений пока нет …