c# – NUnit不捕获std :: cerr的输出

我在C#中有一个nunit Test,它调用C DLL中函数的C#包装器.

C代码使用std :: cerr输出各种消息.

无法使用nunit-console / out / err或/ xml开关重定向这些消息.
在nunit(GUI版本)中,输出不会出现在任何地方.

我希望能够在nunit(GUI版本)中看到此输出.
理想情况下,我希望能够在测试中访问此输出.

谢谢你的帮助.

最佳答案 重定向std :: cerr是用您自己的流缓冲区替换流缓冲区的问题.

在退出之前恢复原始缓冲区很重要.我不知道你的包装器是什么样的,但是你可以弄清楚如何让它读取output.str().

#include <iostream>
#include <sstream>
#include <cassert>

using namespace std;

int main()
{
    streambuf* buf(cerr.rdbuf());
    stringstream output;

    cerr.rdbuf(output.rdbuf());
    cerr << "Hello, world!" << endl;

    assert(output.str() == "Hello, world!\n");
    cerr.rdbuf(buf);

    return 0;
}
点赞