如何模拟std::istream
?我的意思正是运算符 >>
。我的测试对象从该流中读取两个数字(std::istream&
是此类的成员)。我该如何测试它?如何在测试中读取这个值?
我想测试这个值,或者只是读取测试值中定义的值以进一步进行测试。
我使用gmock。
最佳答案
使用依赖注入(inject)传递类的对象
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 */);
关于c++ - 如何测试从 std::istream 读取类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35581186/