2013-02-26 4 views
23

私はReSharperテストランナーとxUnitContrib resharperプラグインでxUnitを使用しています。ReSharperを使用すると、長時間のユニットテスト中にデバッグ出力を表示する方法はありますか?

私は長時間のテストをしているときに、いくつかの進捗インジケータをUnit Test Outputウィンドウに出力したいと思います。

私はDebug.WriteLinesTrace.WriteLineおよびConsole.WriteLineを試しました。これらのすべてが同じ動作をします。テストが完了するまで、出力ウィンドウに何も表示されません。例えば

:10秒経過したとテストが完了するまで

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

    Thread.Sleep(10000); 
} 

テストは何も出力を示していません。どのようにして出力を得るのですか?

UPDATE 1

IはMSTestをとNUnitのでも試みました。 NUnitは途中で出力を示す唯一のものです。

MSTestとXUnitは、テストが完了するまで出力を返しません。

A 
B 
C 

MSTestを出力は次のようになります:これらの変化の全てを考えると

C 


Debug Trace: 

A 
B 

、私は答えはそれということだと思う奇妙な部分はxUnitのとNUnitのテスト出力は次のようになりながら、ということですどのようにしていつ出力するかを決めるテストランナーの実装までです。 XUnitテストランナーを設定することができるかどうかは誰にも分かりますか?

UPDATE 2

私は、これはxUnitContribの欠乏でなければならないと思います。彼らのCodePlex issue trackerに投稿されました。

+0

Debug.WriteLine()完璧に動作します私がデバッグモードに入っているときに私のために良い。ですから、一般的な方法でログインしたいのであれば、私はbrentonの答えを – derape

+0

@derapeにすることをお勧めします - いいえ、xunitでは動作しません。テストが完了するまで、出力は表示されません。 –

+0

私は、XUnit - NUnitだけで遊んだことはありません。そして、NUnitのロギングはデバッグスレッドに沿って動作します... – brenton

答えて

0

私が見つけた最も簡単なのは、log4netを利用してコンソールロガーを作成することです。あなたが走っている途中で、logger.Info( "info here")を呼び出します。またはlog.Debug( "info here"); - 本当に好みのログレベルがあれば、Resharper Unit Test Sessionsに出力が表示されます。

log4netフレームワークの詳細については、on the Apache log4net homepageを参照してください。 configuration examplesもまた非常に貴重です。

Brad Wilsonパー
+0

log4netを追加しました。これらのメッセージは単体テスト出力にはまったく反映されません。私はシンプルなコンソールアペンダーを使っていました。 –

7

ReSharperのは、何らかの形でユニットテストでは、デフォルトのリスナーを削除しました。[出力]ウィンドウ内のテキストを表示するには、ちょうどこの行を追加します。あなたはxUnit.net 1.xのを使用した場合

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

Unit Test SessionsウィンドウまたはOutputウィンドウ(MSTestを使用)のどちらでも、これは私にとってはうまくいかなかった。 –

21

は、以前にコンソール、デバッグ、またはトレースに出力 を書いている可能性があります。 xUnit.net v2がデフォルトで 並列処理がオンになって出荷されたとき、この出力キャプチャメカニズム は適切でなくなりました。並行して実行可能な多くの テストのどれがそれらの共有リソースに を書き込む責任があるのか​​を知ることは不可能です。 v1.xから v2.xにコードを移植するユーザーは、代わりに2つの新しい方法のいずれかを使用する必要があります。

は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

+0

これはテスト内から出力を書き込むのに便利ですが、テストで呼び出されたコードからリアルタイムで情報を出力する必要がある場合は、テストするコードを修正してITestOutputHelperを利用する必要があります。コードからの出力を処理することが困難な並行性の問題を理解しています。このソリューションには限界があることを他の人に指摘したいだけでした。トレースリスナのようなものを活用したり、 'Debug.Write *'メソッドのデフォルト出力ストリームを乗っ取ったりすると良いでしょう。 –

関連する問題