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

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

如何模拟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/

相关文章:

c# - 为什么单元测试中未处理的异常不会导致使用 M​​STest 失败?

c++ - 声明模板的共享指针

c++ - SFINAE 和 decltype(自动)

PHPUnit 测试 - Controller 或模型

JavaScript - 无法在 Jest 测试中获取 jsdom 文档

c++11 - clang 链接错误 : DSO missing

c++ - 使用 constexpr 编译时间字符串加密

c++ - 如何翻转 QImage

c++ - 指定的 CryptoAPI 算法无效

c++ - 这是获取数字字符列表并使用它们创建长整数的有效方法吗?