0

NunitLite ITestListener のカスタム実装を実装しました。TestOutput(...) メソッドは、標準出力 (Console.WriteLine、Trace.WriteLIne、Debug.WriteLine など) を呼び出す方法に関係なく、呼び出されることはありません。これがバグかどうかはわかりません。簡単なコード検査では、キャプチャされた出力で TestOutput クラスがインスタンス化されていないことがわかります。ご意見をお寄せいただきありがとうございます。

4

1 に答える 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 に答える