如何从std :: istream测试类读取?

时间:2016-02-23 15:14:06

标签: c++ unit-testing c++11 googletest googlemock

如何模仿std::istream?我的意思是运营商>>。我测试的对象从此流中读取两个数字(std::istream&是此类的成员)。我该怎么测试呢?如何在测试中读取这个值?

我想测试这些值,或者只测试测试值中定义的值,以便在测试中更进一步。

我使用gmock。

1 个答案:

答案 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 */);