回答:
TestContext.WriteLine()
テスト結果のテキストを出力するwhich を使用してみてください。
例:
[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で「テストフレームワークが自動的にプロパティを設定し、ユニットテストで使用できる」と説明されています。
また、ユニットテストでデバッグ、トレース、コンソール、またはTestContextを機能させることも試みていました。
これらのメソッドはどれも機能していないか、出力ウィンドウに出力を表示していません。
Trace.WriteLine("test trace");
Debug.WriteLine("test debug");
TestContext.WriteLine("test context");
Console.WriteLine("test console");
(コメントより) Visual Studio 2012では、アイコンはありません。代わりに、出力と呼ばれるテスト結果にリンクがあります。リンクをクリックすると、すべてが表示されますWriteLine
。
次に、[ テスト結果]ウィンドウで、テストを実行した後、小さな成功の緑色の円の横に別のアイコンがあることに気付きました。ダブルクリックしました。これは私のテスト結果であり、上記のすべてのタイプの書き込みラインが含まれていました。
Visual Studio 2017では、テストエクスプローラーからの出力を確認できます。
1)テストメソッドで、Console.WriteLine( "something");
2)テストを実行します。
3)「テストエクスプローラー」ウィンドウで、「合格したテストメソッド」をクリックします。
4)「出力」リンクをクリックします。
Console.WriteLine
の出力は、[テスト]の下の[出力]ペインにも表示されません。
それはあなたのテストランナーに依存します...たとえば、私は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);
}
}
出力ウィンドウへの書き込み用に提供したリンクには別の方法がリストされていますが、私は前の方法を好みます。
まだ実際だと思います。
このNuGetパッケージを使用できます。 Bitoxygen.Testing.Pane
このライブラリからカスタムWriteLineメソッドを呼び出します。内部にテストペインを作成します出力ウィンドウメッセージを常にそこに配置します(各テスト中、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));
}
}
Could not load file or assembly 'Microsoft.VisualStudio.Shell.12.0,
使ってみてください:
Console.WriteLine()
への呼び出しDebug.WriteLine
は、DEBUGが定義されているときにのみ行われます。
他の提案は使用することです:Trace.WriteLine
同様に、しかし私はこれを試していません。
オプションもあります(Visual Studio 2008にあるかどうかはわかりません)が、IDE Debug.WriteLine
でTest With Debugger
オプションを指定してテストを実行するときに引き続き使用できます。
@jonzimが述べたように、それは確かにテストランナーに依存しています。NUnit 3の場合NUnit.Framework.TestContext.Progress.WriteLine()
、Visual Studio 2017の出力ウィンドウで出力を実行するために使用する必要がありました。
NUnitは次の方法を説明します:ここ
私の理解では、これは、テストランナーが受け取ったテスト実行の追加の並列化に関係しています。
ユニットテストをデバッグで実行していますか?Debug.WriteLineはリリースビルドでは呼び出されません。
試す2つのオプションは次のとおりです。
Trace.WriteLine()、リリースビルドとデバッグに組み込まれています
単体テストのビルド設定でデバッグの定義を解除します
私はxUnitを使用しているので、これは私が使用するものです:
Debugger.Log(0, "1", input);
PS:あなたも使用できるDebugger.Break();
ので、ログインを見ることができますout
。
out
"?
原因/解決策の別のバリアント:
私の問題は、非同期LINQ呼び出しからの結果セットを非同期コンテキストのループでコンソールに書き込んでいたため、出力が得られなかったことでした。
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));
Trace.WriteLine
正しい出力([出力] ウィンドウにある[ 出力元の表示]というラベルの付いたドロップダウン)を選択すれば、動作するはずです。