如何模仿std::istream
?我的意思是运营商>>
。我测试的对象从此流中读取两个数字(std::istream&
是此类的成员)。我该怎么测试呢?如何在测试中读取这个值?
我想测试这些值,或者只测试测试值中定义的值,以便在测试中更进一步。
我使用gmock。
答案 0 :(得分:4)
使用依赖注入来传递类的对象
std::istringstream
到您的对象。创建一个构造函数
对于需要额外std::istream &
的课程
参数并将其分配给此类型的成员。
例如:
MyClass
{
public:
MyClass(std::istream &stream, /* other constructor args */) :
stream_(stream)
{
...
}
...
void my_method()
{
int i, j;
stream_ >>i;
stream_ >>j;
...
}
private:
std::istream stream_;
};
然后,在测试中,只需创建istringstream
对象并将其传递给构造函数:
std::istringstream dummyStream("10 20");
MyClass obj(dummyStream, /* other constructor args */);