在新的应用程序域中运行时,如何将标准输出转换为 mstest 输出?
Posted
技术标签:
【中文标题】在新的应用程序域中运行时,如何将标准输出转换为 mstest 输出?【英文标题】:How do I get stdout into mstest output when running in new app domain? 【发布时间】:2010-03-08 10:58:13 【问题描述】:我一直在研究测试框架,它创建了一个新的应用程序域来运行测试。主要原因是我们正在测试的 dll 有一些可怕的代码,这些代码依赖于位于应用程序域路径中的 dll。 (不,我不能更改此代码。)
我遇到的问题是我的测试团队正在 mstest 中编写一堆功能测试,其中一个写入 Console.Out 的记录器没有在 trx 输出中捕获任何日志信息。通过控制台应用程序运行代码时,所有日志信息都可以正常输出。其他已实现的记录器也是如此。
我的想法是 mstest 正在将自己的 TextWriter 设置为 Console.Out,但是新的应用程序域有它自己的 Console.Out 的 TextWriter,因为新的应用程序域有它自己的一组静态数据。
我很欣赏你的想法。
【问题讨论】:
注意:这个问题和接受的答案也适用于 NUnit 的“文本输出”窗口和创建新应用程序域(并写入标准输出)的测试。 【参考方案1】:我觉得有点害羞,但是当我点击发送并再次考虑时,问题变得很明显,我想出了一个解决方案。
问题是原来的 Console.Out 被 mstest 设置为一个新的 TextWriter,而这并没有在我的新应用程序域中设置。
所以我在新的 appdomain 中创建的类上创建了一个 SetConsoleOut 方法,并将它传递给 Console.Out。
TestFramework testFramework =
(TestFramework)newAppDomain.CreateInstanceAndUnwrap(
"TestFrameworkLibrary",
"MyNamespace.TestFramework");
testFramework.SetConsoleOut(Console.Out);
在 TestFramework 中我添加了方法
internal void SetConsoleOut(TextWriter consoleOut)
Console.SetOut(consoleOut);
像魅力一样工作。我不确定这里的礼仪。我应该删除问题还是添加问题的答案?
【讨论】:
以上是关于在新的应用程序域中运行时,如何将标准输出转换为 mstest 输出?的主要内容,如果未能解决你的问题,请参考以下文章
在java中运行时将DBus Variant的值转换为正确的类型
为啥我在 Chrome 中运行时在 Android 中收到“无法为 m-section 设置远程视频描述发送参数,mid='0'”错误?