183

Visual Studio にテスト プロジェクトがあります。私はMicrosoft.VisualStudio.TestTools.UnitTestingを使用しています。

単体テストの 1 つに次の行を追加します。

Console.WriteLine("Some foo was very angry with boo");
Console.ReadLine();

テストを実行すると、テストは成功しますが、コンソール ウィンドウがまったく開かれません。

単体テストでコンソール ウィンドウを操作できるようにする方法はありますか?

4

12 に答える 12

204

Visual Studio 2013 のこの明らかに新しい機能について誰かがコメントしました。最初は彼が何を意味しているのかわかりませんでしたが、今では意味がわかり、独自の回答に値すると思います。

通常は Console.WriteLine を使用でき、出力は [出力] ウィンドウではなく、テストの詳細で [出力] をクリックした後の新しいウィンドウに表示されます。

ここに画像の説明を入力してください

于 2016-07-14T14:15:34.617 に答える
139

注: 以下の元の回答は、Visual Studio 2012 までの Visual Studio のどのバージョンでも機能するはずです。Visual Studio 2013 には、テスト結果ウィンドウが表示されなくなりました。Trace.Write()代わりに、テスト固有の出力が必要な場合は、出力ウィンドウに出力を書き込むという @Stretch の提案を使用できます。


Console.Writeメソッドは「コンソール」に書き込みません。実行中のプロセスの標準出力ハンドルに接続されているものには何でも書き込みます。同様にConsole.Read、標準入力に接続されているものから入力を読み取ります。

Visual Studio 2010 で単体テストを実行すると、標準出力がテスト ハーネスによってリダイレクトされ、テスト出力の一部として保存されます。これは、テスト結果ウィンドウを右クリックし、「出力 (StdOut)」という名前の列を表示に追加することで確認できます。これにより、標準出力に書き込まれたものがすべて表示されます。

sinni800 が言うように、 P/Invokeを使用してコンソール ウィンドウを手動で開くことができます。ドキュメントを読むと、関数がリセットされ、新しいコンソール ウィンドウを指すように処理されるようです。(私はそれについて100%確信が持てません.Windowsが私からそれを盗むためにすでにリダイレクトしているとしたら、私にはちょっと間違っているように思えますが、試したことはありません.)AllocConsolestdinstdoutstdout

ただし、一般的には、それは悪い考えだと思います。コンソールを使用したいのが単体テストに関する詳細情報をダンプすることだけである場合、出力はそこにあります。そのまま使用しConsole.WriteLine、完了したら [テスト結果] ウィンドウで出力結果を確認します。

于 2012-06-26T14:39:18.993 に答える
48

この行を使用して、Visual Studio の出力ウィンドウに書き込むことができます。

System.Diagnostics.Debug.WriteLine("Matrix has you...");

デバッグ モードで実行する必要があります。

于 2012-06-26T16:55:50.573 に答える
31

前述のように、単体テストは対話なしで実行するように設計されています。

ただし、他のコードと同様に単体テストをデバッグできます。最も簡単な方法は、Debug[テスト結果] タブのボタンを使用することです。

デバッグできるということは、ブレークポイントを使用できるということです。したがって、ブレークポイントを使用できるということは、 Tracepointsを使用できることを意味します。これは、毎日のデバッグで非常に便利だと思います。

基本的に、トレースポイントを使用すると、出力ウィンドウ (または、より正確には標準出力)に書き込むことができます。必要に応じて、実行を続行するか、通常のブレークポイントのように停止することができます。これにより、コードを再構築したり、デバッグ情報を入力したりする必要なく、求めている「機能」が得られます。

ブレークポイントを追加して、そのブレークポイントを右クリックするだけです。「ヒット時...」オプションを選択します。

オプションを打つとき

ダイアログが表示されます:

ブレークポイントにヒットしたとき

注意すべき点がいくつかあります。

  1. ブレークポイントが球体ではなくひし形で表示され、トレース ポイントを示していることに注意してください。
  2. {this} のように囲むことで、変数の値を出力できます。
  3. 「Continue Execution」チェックボックスをオフにして、通常のブレークポイントと同様に、この行でコードを中断します
  4. マクロを実行するオプションがあります。注意してください - 有害な副作用を引き起こす可能性があります.

詳細については、ドキュメントを参照してください。

于 2012-06-26T15:03:27.903 に答える
14

使用できます

Trace.WriteLine()

単体テストのデバッグ時に出力ウィンドウに書き込みます。

于 2014-03-25T16:22:15.847 に答える
4

まず第一に、ユニットテストは、設計上、相互作用なしで完全に実行されることになっています。

それはさておき、考えられていた可能性はないと思います。

AllocConsole P / Invokeを使用してハッキングを試みることができます。これにより、現在のアプリケーションがGUIアプリケーションである場合でもコンソールが開きます。その後Console、クラスは現在開いているコンソールに投稿します。

于 2012-06-26T14:34:54.823 に答える
3

Debug.WriteLine() も使用できます。

于 2014-08-21T07:23:35.903 に答える
0

Visual Studio for Mac

Visual Studio for Mac で動作する他のソリューションはありませんでした

NUnitを使用している場合は、小さな.NET コンソール プロジェクトをソリューションに追加し、その新しいコンソール プロジェクトの参照でテストするプロジェクトを参照できます。

[Test()]メソッドで行っていたことはすべて、次の方法Mainでコンソール アプリケーションで実行できます。

class MainClass
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Console");

        // Reproduce the unit test
        var classToTest = new ClassToTest();
        var expected = 42;
        var actual = classToTest.MeaningOfLife();
        Console.WriteLine($"Pass: {expected.Equals(actual)}, expected={expected}, actual={actual}");
    }
}

これらの状況では、コード内でConsole.Writeとを自由に使用できます。Console.WriteLine

于 2018-07-02T23:34:33.037 に答える