在CppUnit中检查printf输出

时间:2014-10-27 00:17:04

标签: c++ cppunit

假设我有一个简单的HelloWorld类,其中hi()方法具有以下单行代码:

void HelloWorld::hi(){
    printf("Hi!\n");
}

现在假设我想用CppUnit测试该方法。

void HelloWorldTests::testHi() {
    HelloWorld hw;
    hw.hi(); // <------ ????
    // <------ ?????
    CPPUNIT_ASSERT(/*????*/);
}

我如何捕获hi()方法的输出,以便将其与CppUnit中的固定值进行比较?

1 个答案:

答案 0 :(得分:1)

没有标准方法可以将程序中的输出捕获到stdout。您可以使用stdout将输出重定向到freopen(filename, "w", stdout)到文件,然后比较文件的内容。这种方法的主要问题是没有标准方法来恢复原始目的地。

我建议您更改代码以使用std::cout,因为可以使用{{1}轻松将其重定向到合适的std::streambuf,例如std::stringbuf会员写入rdbuf()的方法完成后,可以保留并恢复原始流缓冲区:

std::cout