我已经实现了NunitLite ITestListener的自定义实现。永远不会调用TestOutput(...)方法,不管我调用stdout(Console.WriteLine,Trace.WriteLIne,Debug.WriteLine等)的方式。我不确定这是不是一个bug。简单的代码检查显示TestOutput类永远不会在捕获的输出上实例化。我非常感谢你的想法。
答案 0 :(得分: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; }
}
}