2011-01-24 14 views
54

ユニットテストでDebug.Write(line)またはConsole.Write(Line)のいずれかの呼び出しがデバッグ中にスキップされ、出力が決して印刷されません。クラス内からこれらの関数への呼び出しがうまく動作しています。単体テストからの出力の書き方は?

ユニットテストは自動化されていることを理解していますが、単体テストからメッセージを出力できるようにしたいと考えています。

答えて

66

テスト結果にテキストを出力するTestContext.WriteLine()を試してみてください。

例:「テストフレームワークが自動的にあなたがしてユニットテストで使用できるプロパティを設定します。」と

[TestClass] 
    public class UnitTest1 
    { 
     private TestContext testContextInstance; 

     /// <summary> 
     /// Gets or sets the test context which provides 
     /// information about and functionality for the current test run. 
     ///</summary> 
     public TestContext TestContext 
     { 
      get { return testContextInstance; } 
      set { testContextInstance = value; } 
     } 

     [TestMethod] 
     public void TestMethod1() 
     { 
      TestContext.WriteLine("Message..."); 
     } 
    } 

「魔法」がMSDNに記述されています

+1

これは、テストがデバッグモードで実行されている場合にのみ、これが何かを出力することがわかりました(VS2013で)。 – fusi

+2

TestContextを使用するには、[このドキュメント](https://msdn.microsoft.com/en-us/library/dd465178(v=vs.140))に従ってVS2015 Enterprise(または以前のエディションのプレミアムバージョン)が必要です。 aspx) –

+0

あなたの文字列に中括弧が含まれていると、メソッドが爆発することに気づいています。だから "_testContext.WriteLine(" hello ");"しかし "_testContext.WriteLine("彼は{ll} o ");" 「System.FormatException:入力文字列が正しい形式ではありませんでした」と失敗します。 –

0

は、使用してみてください:

Console.WriteLine()

Debug.WriteLineへの呼び出しのみDEBUGが定義されている場合の間に行われます。

その他の使用方法は次のとおりです。Trace.WriteLineでも、これは試していません。

ありオプション(VS2008がそれを持っているかどうかわからないが)もあるが、テストを実行するとき、あなたはまだ

0

はあなたがデバッグであなたのユニットテストを実行しているよろしいですIDEでTest With DebuggerオプションでDebug.WriteLineを使用することができます? Debug.WriteLineは、リリースビルドではカレンダされません。しようとする

二つのオプションは以下のとおりです。

  • リリースinot構築されているTrace.WriteLine()、ビルドだけでなく、デバッグ

  • 未定義DEBUGビルド設定でユニットテストのために

103

会話に少し遅れました。

また、デバッグ、トレース、コンソール、またはTestContextをUnit Testingで動作させようとしていました。

これらの方法のいずれも出力ウィンドウに出力または出力を表示しませんでした。

Trace.WriteLine("test trace"); 
    Debug.WriteLine("test debug"); 
    TestContext.WriteLine("test context"); 
    Console.WriteLine("test console"); 

VS2012とVisual Studio 2012年(コメント)グレーター
、何のアイコンが表示されません。代わりに、出力というテスト結果のリンクがあります。リンクをクリックすると、WriteLineのすべてが表示されます。VS2012

私はその後、私のテストウィンドウ結果で、テストを実行した後、次のほとんど成功緑色の円に、別のアイコンがあり、私はそれをクリック倍増気づきました。それは私のテスト結果であり、それは上記の記念線のすべてのタイプを含んでいました。

+39

Visual Studio 2012にはアイコンがありません。代わりに、テスト結果に「出力」と呼ばれるリンクがあります。リンクをクリックすると、すべての記念線が表示されます。 – epotter

+14

geez、 "出力"リンクは本質的に見つけにくいです。誰かがそれを見つけるのに苦労しているなら、テキストエクスプローラの下のセクションにあります。テストを選択すると、「Elapsed time:xxx」という結果が表示されます。その下には「出力」リンクがあります。 – kevin

+0

@kevin、どのバージョンのVSでしたか? (私はあなたが "テキストエクスプローラ"の代わりに "テストエクスプローラ"を意味すると仮定しています)VS2013 Expressの出力リンクが表示されません。 –

0

私のテスト/テスト設定/デフォルトプロセッサアーキテクチャの設定と、テストプロジェクトが参照するアセンブリが同じではない場合、出力は得られません。さもなければ、Trace.Writeline()はうまく動作します。 Debugger.Log(0, "1", input);

PS:あなたはあなたが(あなたが正しい出力を選択して動作するはずout

0

ので、これは私が使用するものです出力ウィンドウに表示される「出力を表示」というラベルのドロップダウン)

0

Trace.WriteLineにログイン見ることができるためにDebugger.Break();を使用することができ、私はxUnitの使用している

3

まだ実際だと思います。このライブラリーから https://www.nuget.org/packages/Bitoxygen.Testing.Pane/

コールカスタムWriteLineメソッド:

あなたはこのNuGetパッケージを使用することができます。
出力ウィンドウ内にテストペインを作成し、常にメッセージを出力します(各テスト実行時にDEBUGフラグとTRACEフラグとは独立して実行されます)。私は、基本クラスを作成することをお勧めすることができますトレースがより容易にする

[TestClass] 
public abstract class BaseTest 
{ 
    #region Properties 
    public TestContext TestContext { get; set; } 

    public string Class 
    { 
     get { return this.TestContext.FullyQualifiedTestClassName; } 
    } 
    public string Method 
    { 
     get { return this.TestContext.TestName; } 
    } 
    #endregion 

    #region Methods 
    protected virtual void Trace(string message) 
    { 
     System.Diagnostics.Trace.WriteLine(message); 

     Output.Testing.Trace.WriteLine(message); 
    } 
    #endregion 
} 

[TestClass] 
public class SomeTest : BaseTest 
{ 
    [TestMethod] 
    public void SomeTest1() 
    { 
     this.Trace(string.Format("Yeah: {0} and {1}", this.Class, this.Method)); 
    } 
} 
+1

マジックは次の場所にあります:Output.Testing.Trace.WriteLine(message); BitOxygenで –

2

それはあなたのテストランナーに依存...例えば、私はそうxUnitのを、使用している場合は、使用しているものだという各特定のユニットテストで

https://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

:このテストを実行した後

public void CheckConsoleOutput() 
    { 
     Console.WriteLine("Hi Hi World"); 
     Trace.WriteLine("Trace Trace the World"); 
     Debug.WriteLine("Debug Debug WOrld"); 
     Assert.IsTrue(true); 
    } 

は、「合格テスト」の下で、出力ウィンドウが表示されます出力を表示するためのオプションがあります。

関連する問題