在新的应用程序域中运行时,如何将stdout输入mstest输出?

时间:2010-03-08 10:58:14

标签: c# .net mstest appdomain

我一直致力于测试框架,它创建了一个新的应用程序域来运行测试。主要原因是我们正在测试的dll有一些可怕的代码依赖于位于app域路径中的dll。 (不,我无法更改此代码。)

我遇到的问题是我的测试团队正在mstest中编写一系列功能测试,其中一个记录器写入Console.Out,没有在trx输出中捕获任何日志信息。通过控制台应用程序运行代码时,所有日志信息都可以正常输出。其他已经实施的记录器也是如此。

我的想法是mstest正在将自己的TextWriter设置为Console.Out,但新的应用程序doamin有自己的TextWriter for Console.Out,因为新的应用程序域拥有它自己的静态集。

感谢您的想法。

1 个答案:

答案 0 :(得分:10)

我觉得有点羞怯,但是一旦我发送并再次考虑它,问题就变得明显了,我找到了解决方案。

问题是原始的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);
}

像魅力一样工作。我不确定这里的礼仪。我应该删除问题或添加我对问题的答案吗?