NunitLite Custom ITestListener,TestOutput()从未调用过

时间:2012-11-14 23:08:55

标签: nunit

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

1 个答案:

答案 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; }
    }
}