2012-11-14 71 views
0

我已經實現了NunitLite ITestListener的自定義實現。 TestOutput(...)方法永遠不會調用,不管調用stdout(Console.WriteLine,Trace.WriteLIne,Debug.WriteLine等)的方式。我不確定這是否是一個錯誤。簡單的代碼檢查顯示TestOutput類永遠不會被捕獲的輸出實例化。我非常感謝你的想法任何建議。NunitLite自定義ITestListener,TestOutput()從未調用

回答

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; } 
    } 
} 
相關問題