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

How to test class reading from std::istream?

如何模拟std::istream?我的意思是运算符 >>。我的测试对象从这个流中读取两个数字(std::istream& 是这个 class 的成员)。我怎样才能测试它?如何在测试中读取这些值?

我想测试这个值,或者只读取测试值中定义的值以进一步测试。

我使用 gmock。

使用依赖注入传递class的一个对象 std::istringstream 给你的对象。创建构造函数 您的 class 需要额外的 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 */);