2013-02-26 24 views
23

我使用ReSharper測試運行器和xUnitContrib resharper插件使用xUnit。使用ReSharper,如何在長時間運行的單元測試中顯示調試輸出?

當我有一個長期運行的測試,我想能夠輸出一些進度指標到單元測試輸出窗口。

我試過Debug.WriteLines,Trace.WriteLineConsole.WriteLine。所有這些都具有相同的行爲 - 在測試完成之前,輸出窗口中沒有任何內容顯示。

例如:

[Fact] 
public void Test() 
{ 
    Debug.WriteLine("A"); 
    Trace.WriteLine("B"); 
    Console.WriteLine("C"); 

    Thread.Sleep(10000); 
} 

試驗表明,直到經過10秒鐘和測試完成沒有輸出。我該如何獲得產出?

更新1

我也試圖與MSTest的和NUnit。 NUnit是唯一一個顯示輸出的方式。

MSTest和XUnit在測試完成之前不返回任何輸出。奇怪的是,雖然的xUnit和NUnit測試輸出看起來是這樣的:

A 
B 
C 

的MSTest的輸出是這樣的:

C 


Debug Trace: 

A 
B 

鑑於所有這些變化,我認爲答案是,它由測試跑步者實施決定如何以及何時輸出。有誰知道是否可以配置XUnit測試運行器?

更新2

我想這一定是在xUnitContrib缺乏。發佈到他們的CodePlex issue tracker

+0

的Debug.WriteLine()的作品完美當我處於調試模式時適合我。所以如果你想以一般的方式登錄,我建議brenton的回答 – derape 2013-02-26 15:23:07

+0

@derape - 不,它不適用於xunit。測試完成後纔會顯示輸出。 – 2013-02-26 16:44:38

+0

我明白了,我還沒有玩過XUnit - 只有NUnit。並且NUnit日誌記錄可以在調試線程中工作...... – brenton 2013-02-26 16:54:59

回答

0

我發現的最簡單的方法是利用log4net並創建一個控制檯記錄器。一路上,當你跑步的時候,你會打電話給logger.Info(「info here」);或log.Debug(「info here」); - 無論您的首選日誌級別如何 - 輸出將顯示在Resharper單元測試會話中。

瞭解更多關於log4net框架on the Apache log4net homepageconfiguration examples也將是非常寶貴的。

+0

不是。增加了log4net,這些消息甚至都沒有進入單元測試輸出。我使用了一個簡單的控制檯appender - 來自示例中的一個。 – 2013-02-26 16:45:59

7

ReSharper的某種方式除去在單元測試的默認監聽器。要顯示在輸出窗口中的文字,只要加入這一行:

Debug.Listeners.Add(new DefaultTraceListener()); 
+0

在單元測試會話窗口或輸出窗口(使用MSTest)中,這對我無效。 – 2016-04-20 21:20:55

21

如果您使用xUnit.net 1.x中,你以前可能被寫入輸出 到控制檯,調試,或跟蹤。當默認情況下開啓並行化的xUnit.net v2時,此輸出捕獲機制 已不再合適;不可能知道可以並行運行的許多 測試中的哪一個負責將 寫入這些共享資源。將代碼從v1.x移植到 v2.x的用戶應該使用兩種新方法之一。

看看這裏例如如何使用xUnit.net V2執行日誌記錄:

http://xunit.github.io/docs/capturing-output.html

這是例子:

using Xunit; 
using Xunit.Abstractions; 

public class MyTestClass 
{ 
    private readonly ITestOutputHelper output; 

    public MyTestClass(ITestOutputHelper output) 
    { 
     this.output = output; 
    } 

    [Fact] 
    public void MyTest() 
    { 
     var temp = "my class!"; 
     output.WriteLine("This is output from {0}", temp); 
    } 
} 
+0

這正是我一直在尋找的。謝謝! – nrodic 2015-12-10 11:34:56

+0

這對於編寫測試內的輸出非常有用,但是當您需要從測試調用的代碼實時輸出信息時,您必須修改正在測試的代碼,並使用「ITestOutputHelper」。我理解併發性問題,難以處理代碼的輸出,我只是想指出其他人,這種解決方案確實有侷限性。使用跟蹤偵聽器或劫持'Debug.Write *'方法的默認輸出流是很好的做法。 – 2017-09-05 17:18:32

相關問題