web-dev-qa-db-ja.com

Visual Studio Express 2013:単体テスト(コンソール、デバッグなど)でのプログラム出力

私は本当にここの壁に頭をぶつけています。 Visual Studio(Express 2013)でプログラム出力を取得するのはとても難しいですか?コードを書くとき、作業中やトラブルシューティング中に変数や操作などの値を出力できることが絶対に必要だと思います。

JavaおよびEclipseでは、System.out.println()は常に機能し、IDEコンソールに出力します。Cプログラムを作成するときは、常にコンソールを使用します。したがって、何でもエコーしても問題ありません。ただし、VS Express 2013では、出力が得られないようです。

この問題は、「通常の」実行可能プログラムではなく、単体テストを作成しているという事実に関連している可能性がありますか?もしそうなら、VSにユニットテストクラスでプログラム出力を表示させる方法はありますか?デバッグを使用してみましたが、何も表示されません。構成の問題があると考えて、表示されないメッセージをデバッグするための解決策を探しましたが、(ここまたは他の場所で)見つけたオプションはどれも役に立たないようです。

または、もちろん-VS/C#でコードを記述しているときにプログラム値や出力などをチェックするために一般的に使用される別の方法がある場合は、それについて聞きたいです:-)

誰かアイデアがありますか?質問が不明確か何かである場合は、教えてください。修正します。

注意:ユニットテストで何をすべきか、何をすべきでないかを誰かが指摘したい場合に備えて、機能テストにユニットテストクラスを使用しています。

編集1:「開始:デバッグ」でコードを実行できないことを忘れました。試してみると、「出力タイプがクラスライブラリのプロジェクトを直接開始できません」というエラーが表示されます。 (単体テストプロジェクトは、クラスライブラリプロジェクトである別のプロジェクトのクラスを使用します。)これは、もちろん、ソリューションに実行可能プロジェクトがないためです。私が実行する方法は、テストエクスプローラーから選択したテストを実行することです。

編集2:コード:

using System;
using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WordpressAutomation;

namespace WordpressTests
{

    [TestClass]
    public class LoginTests : WordpressTest {

        [TestMethod]
        public void AdminUserCanLogIn() {

            System.Diagnostics.Debug.WriteLine("Something...");
            System.Diagnostics.Trace.WriteLine("Something...");
        }
    }
}
15
Frank H.

自分の質問に答えるのは、一種の「不誠実」に思えるので、あまり好きではありません。しかし、しばらく静かで、他に答えはないと思います。

最も実用的な解決策は、すべての出力を作成するコンソールプロジェクトなど、別のプロジェクトを作成することです。単体テストと直接通信しない場合もありますが、この特定の例で開発しているテストフレームワークは、クラスライブラリと通信する機能テストで構成されているため、ソリューションで別のプロジェクトを使用できます。

したがって、要約すると、ソリューションは次のもので構成されます。-実際のテストを含む単体テストプロジェクト-フレームワークロジックを含むクラスライブラリプロジェクト-クラスライブラリ内のクラスをテストするためのコンソールプロジェクト、またはユニット内の非ユニットテストクラステストプロジェクト。

4
Frank H.

Visual StudioのTestExplorerには、個別の出力ウィンドウがあります。 Visual Studioのデフォルトの出力には書き込みません(構成可能かどうかはわかりません)

TestExplorerで出力を表示するテストを選択する必要があります。テストに出力がある場合は、ハイパーリンク「出力」が表示されます。それをクリックすると、テストの出力を表示する新しいタブが開きます。

enter image description here

表示されるメッセージはすべてConsole.WriteLineによって書き込まれます。

Visual Studio 2013Professionalを使用しています。 Expressバージョンが異なる動作をするかどうかはわかりません。

34
Jehof
System.Diagnostics.Debug.WriteLine("Yay!");

デバッグデータを表示するように出力ウィンドウを構成すると、そこに表示されます。

ソース: Visual Studio 2010 Express。出力ウィンドウへの書き込み (VS 2010用ですが、これはIDEオプションではなくフレームワークオプションであるため、2013にも適用する必要があります)。

6
Nzall

このような状況では、コンソール出力ではなく、logを使用する必要があると思います。ログを構成してファイルに出力したり、指定したウィンドウに出力したりすることもできます。コンソールがなくてもログを使用できると思います。また、本番環境では警告またはエラーのみが出力されるようにログを構成でき、デバッグセッション中にデバッグ情報を表示できます。

私は log4j を使用しますが、ここでは任意の優れたログソフトウェアを使用できます。

2
Herbert Yu

この種のことを行うには、ロギングフレームワークを活用する必要があります。ロギングフレームワークから、コンソール、フラットファイル、または他の多くのデータシンクにログを記録するか、入力を無視するようにフレームワークに指示することができます。優れたロギングフレームワークは非常に構成可能です。

.NETランドでは、コミュニティのお気に入りはNLogのようです http://nlog-project.org/ 。 「はじめに」リンクから始められます。

1
morningstar8

VS2013についてはよくわかりませんが、VS2008では、テスト結果の概要をダブルクリックすると(完了後、合格または不合格)、[共通の結果]、[エラーメッセージ]などのウィンドウが開きます。最後に「標準コンソール出力」が続きます。基本的に、各テストのコンソール出力を個別にキャプチャするという素晴らしい仕事をします。唯一の欠点は、出力がリアルタイムで表示されないことです。完了時にのみ表示されます。

0
Mark Lakata

クラスライブラリの出力タイプのプロジェクトを直接開始することはできません

単体テストプロジェクトを実行またはデバッグすることはありません。 Test Explorerウィンドウで1つ以上のテストを選択することにより、テストセッションを開始します。または、ユニットテストメソッドで右クリックしてRun TestsまたはDebug Testsを選択します。

Console.WriteLineまたはDebug.WriteLineを使用して、必要に応じて情報メッセージを出力し、単体テスト結果のOutputリンクでそれらを探します。

0
ΩmegaMan