我已经实现了 NunitLite ITestListener 的自定义实现。永远不会调用 TestOutput(...) 方法,无论我调用 stdout 的方式(Console.WriteLine、Trace.WriteLIne、Debug.WriteLine 等)。我不确定这是否是一个错误。简单的代码检查显示 TestOutput 类从未在捕获的输出上实例化。我非常感谢您的任何建议。
问问题
367 次
1 回答
0
事实证明,NUnitLite 默认不支持此功能。话虽如此,使用自定义 TextWriter(见下文代码)的简单重定向到标准 IO 效果很好。非常感谢 Charlie Pool 的基本答案。
在您的 program.cs 或 App.xaml.cs 中使用以下内容:
//Override output in order to get mid-test output.
Console.SetOut(new TestListenerTextWriter(IoC.Resolve<ITestListener>(), TestOutputType.Out));
Console.SetError(new TestListenerTextWriter(IoC.Resolve<ITestListener>(), TestOutputType.Error));
Trace.Listeners.Add(new TextWriterTraceListener(new TestListenerTextWriter(IoC.Resolve<ITestListener>(), TestOutputType.Trace)));
然后定义 TestListenerTextWriter 如下。
public class TestListenerTextWriter : TextWriter
{
private readonly ITestListener _eventListener;
private readonly TestOutputType _type;
public TestListenerTextWriter(ITestListener eventListener, TestOutputType type)
{
_eventListener = eventListener;
_type = type;
}
override public void Write(char aChar)
{
_eventListener.TestOutput(new TestOutput(aChar.ToString(CultureInfo.InvariantCulture), _type));
}
override public void Write(string aString)
{
_eventListener.TestOutput(new TestOutput(aString, _type));
}
override public void WriteLine(string aString)
{
_eventListener.TestOutput(new TestOutput(aString + NewLine, _type));
}
override public Encoding Encoding
{
get { return Encoding.Default; }
}
}
于 2012-11-20T16:08:05.647 回答