在新的应用程序域中运行时,如何将标准输出转换为 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的值转换为正确的类型

在调试器中运行时中断下一个输出

在 VS Code 中运行时 Python 跳过函数

为啥我在 Chrome 中运行时在 Android 中收到“无法为 m-section 设置远程视频描述发送参数,mid='0'”错误?

当 cobertura 测试在 maven-cobertura-plugin 中运行时如何配置?

如何使用 python 为 Web 元素生成 Xpath(在我的脚本中运行时)?