我在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;
}

关于c# - NUnit不捕获std::cerr的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2513312/

10-11 19:07