ユニットテストでのDebug.Write(line)
またはConsole.Write(Line)
の呼び出しは、デバッグ中に単にスキップされ、出力は表示されません。私が使用しているクラス内からこれらの関数を呼び出すと、うまくいきます。
単体テストは自動化されることを理解していますが、単体テストからメッセージを出力できるようにしたいと思っています。
テスト結果にテキストを出力する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 で「テストフレームワークが自動的にプロパティを設定し、ユニットテストで使用できるようになります」と説明されています。
会話に少し遅れました。
また、ユニットテストで動作するように、Debug、Trace、Console、またはTestContextを取得しようとしていました。
これらのメソッドはいずれも機能せず、出力ウィンドウに出力を表示しません。
Trace.WriteLine("test trace");
Debug.WriteLine("test debug");
TestContext.WriteLine("test context");
Console.WriteLine("test console");
VS2012以降
(コメントから)Visual Studio 2012にはアイコンはありません。代わりに、Outputと呼ばれるリンクがテスト結果にあります。リンクをクリックすると、すべてのWriteLine
が表示されます。
VS2012以前
[Test Results]ウィンドウで、テストを実行した後、小さな成功の緑色の円の隣に、別のアイコン、ダブルクリックしました。それは私のテスト結果であり、上記のすべてのタイプの書き込み行が含まれていました。
テストランナーによって異なります...たとえば、私はXUnitを使用しているので、それが使用している場合は、次の手順に従ってください。
https://xunit.github.io/docs/capturing-output.html
このメソッドは、特定の単体テストごとに出力をグループ化します。
Xunitの使用; Xunit.Abstractionsの使用; パブリッククラスMyTestClass { private readonly ITestOutputHelper output; public MyTestClass(ITestOutputHelper output) { this.output = output; } [事実] public void MyTest() { var temp = "my class!"; output.WriteLine( "これは{0からの出力です} "、temp); } }
出力ウィンドウへの書き込み用に提供したリンクにリストされている別の方法がありますが、前の方法を好みます。
私はそれがまだ実際だと思います。
次のNuGetパッケージを使用できます。 https://www.nuget.org/packages/Bitoxygen.Testing.Pane/
このライブラリからカスタムWriteLineメソッドを呼び出します。
。
トレースをより簡単にするために、基本クラスを作成することをお勧めします。
[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));
}
}
デバッグでユニットテストを実行していることを確認しますか? Debug.WriteLineは、リリースビルドでは調整されません。
試すべき2つのオプションは次のとおりです。
Trace.WriteLine()、これはinotリリースビルドとデバッグの両方でビルドされます
単体テストのビルド設定でDEBUGの定義を解除します
次の例で解決しました:
public void CheckConsoleOutput()
{
Console.WriteLine("Hi Hi World");
Trace.WriteLine("Trace Trace the World");
Debug.WriteLine("Debug Debug WOrld");
Assert.IsTrue(true);
}
このテストの実行後、「テストに合格しました」の下に、出力を表示するオプションがあり、これにより出力ウィンドウが表示されます。
Console.WriteLineは機能しません。デバッグモードでは、Debug.WriteLine()またはTrace.WriteLine()のみが機能します。
私は次のことを行います。テストモジュールにSystem.Diagnosticsを使用を含めます。次に、出力にDebug.WriteLineを使用します。テストを右クリック、選択したテストのデバッグを選択します。結果の出力は、下の[出力]ウィンドウに表示されます。 Visual Studio 2017と15.8.1、VSが提供するデフォルトの単体テストフレームワークを使用します。
Trace.WriteLine
は、正しい出力を選択すれば機能するはずです([出力]ウィンドウにある[出力を表示]というラベルの付いたドロップダウン)
テスト/テスト設定/デフォルトプロセッサアーキテクチャの設定とテストプロジェクトが参照するアセンブリが同じでない場合、出力が得られません。それ以外の場合、Trace.Writeline()は正常に動作します。
ただこれに遭遇しました。原因/解決策は上記とは異なるバリアントなので、投稿します。
[。
var p = _context.Payment.Where(pp => pp.applicationNumber.Trim() == "12345");
p.ForEachAsync(payment => Console.WriteLine(payment.Amount));
そのため、テストは、コンソールオブジェクトがランタイムによってクリーンアップされる前にコンソールに書き込まれませんでした(1つのテストのみを実行する場合)。解決策は、結果セットを最初にリストに変換して、非同期バージョンのforEach()を使用できるようにすることでした。
var p = _context.Payment.Where(pp => pp.applicationNumber.Trim() == "12345").ToList();
p.ForEachAsync(payment =>Console.WriteLine(payment.Amount));
使用してみてください:
Console.WriteLine()
Debug.WriteLine
への呼び出しは、DEBUGが定義されているときにのみ行われます。
他の提案を使用することです:Trace.WriteLine
も同様ですが、私はこれを試していません。
オプションもあります(VS2008にあるかどうかはわかりません)が、IDEでDebug.WriteLine
optionを使用してテストを実行するときに、Test With Debugger
を引き続き使用できます
私はxunitを使用しているので、これは私が使用するものです:Debugger.Log(0, "1", input);
PS:Debugger.Break();
を使用して、out
にログインしていることを確認できます