NunitLite ITestListener のカスタム実装を実装しました。TestOutput(...) メソッドは、標準出力 (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 に答える