我一直致力于测试框架,它创建了一个新的应用程序域来运行测试。主要原因是我们正在测试的dll有一些可怕的代码依赖于位于app域路径中的dll。 (不,我无法更改此代码。)
我遇到的问题是我的测试团队正在mstest中编写一系列功能测试,其中一个记录器写入Console.Out,没有在trx输出中捕获任何日志信息。通过控制台应用程序运行代码时,所有日志信息都可以正常输出。其他已经实施的记录器也是如此。
我的想法是mstest正在将自己的TextWriter设置为Console.Out,但新的应用程序doamin有自己的TextWriter for Console.Out,因为新的应用程序域拥有它自己的静态集。
感谢您的想法。
答案 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);
}
像魅力一样工作。我不确定这里的礼仪。我应该删除问题或添加我对问题的答案吗?