NUnit 不捕获 std::cerr 的输出
我有一个 C# 中的 nunit 测试,它调用 C++ DLL 中函数的 C# 包装器。 C++ 代码使用 std::cerr 输出各种消息。
无法使用 nunit-console /out /err 或 /xml 开关重定向这些消息。 在 nunit(GUI 版本)中,输出不会出现在任何地方。
我希望能够在 nunit (GUI 版本)中看到这个输出。 理想情况下,我希望能够在测试中访问此输出。
感谢您的任何帮助。
I have an nunit Test in C#, that calls a C# wrapper of a function in a C++ DLL.
The C++ code uses std::cerr to output various messages.
These messages cannot be redirected using nunit-console /out /err or /xml switch.
In nunit (the GUI version) the output does not appear anywhere.
I would like to be able to see this output in nunit (GUI version).
Ideally I would like to be able to access this output in the Test.
Thanks for any help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
重定向 std::cerr 就是用您自己的流缓冲区替换流缓冲区。
在退出之前恢复原始缓冲区非常重要。我不知道你的包装器是什么样的,但你可能可以弄清楚如何让它读取output.str()。
Redirecting std::cerr is a matter of replacing the stream buffer with your own.
It is important to restore in original buffer before we exit. I don't know what your wrapper looks like, but you can probably figure out how to make it read output.str().
谢谢你的提示。
这就是我最终所做的:
.CPP 文件 ------------------------
.CS 文件 ------------ ------------------------------
NUnit 测试 ------------------ -----
freeCharPtr() 的东西对于从 _strdup() 释放分配的内存是必要的,因为我无法弄清楚(如果可能的话)如何封送 std::string。
注意:这不是线程安全的!
Thanks for the hint.
This is what I ended up doing:
.CPP file ------------------------
.CS file ------------------------------------------
NUnit Test -----------------------
The freeCharPtr() stuff is necessary to free the allocated memory from _strdup(), since I could not work out (if it's even possible) how to marshal an std::string.
Note: This is not thread safe!