1. ホーム
  2. c#

[解決済み] ユニットテストの中でコンソールに書き込むことはできますか?もし可能なら、なぜコンソールウィンドウが開かないのでしょうか?

2022-04-20 15:11:08

質問

Visual Studioでテストプロジェクトを持っています。私は Microsoft.VisualStudio.TestTools.UnitTesting .

私は、ユニットテストの1つにこの行を追加します。

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

テストを実行すると、テストはパスしますが、コンソールウィンドウが全く開きません。

ユニットテストを通じてコンソールウィンドウを操作できるようにする方法はありますか?

どのように解決するのですか?

注:以下のオリジナルの回答は、Visual Studio 2012までのすべてのバージョンのVisual Studioで動作するはずです。Visual Studio 2013では、Test Resultsウィンドウはもうないようです。代わりに、テスト固有の出力が必要な場合は、@Stretch さんの提案である Trace.Write() を使用して、Outputウィンドウに出力を書き込むことができます。


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

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

あなたは できる を使用して、手動でコンソールウィンドウを開きます。 P/インヴォーク として sinni800のコメント . を読む限り AllocConsole のドキュメントによると、この関数は stdinstdout ハンドルを使って、新しいコンソールウィンドウを指すようにします。(これについては100%の確信があるわけではありませんが、もし私がすでに stdout をWindowsに盗まれてしまうので、試したことはないのですが)

コンソールを使ってユニットテストに関する詳細な情報を出力したいだけなら、出力はあなたのためにあるのです。引き続き Console.WriteLine のように、テストが終わったらテスト結果ウィンドウで出力結果を確認しましょう。