2009-11-21 3 views
50

私は現在、VS 2008で標準のMicrosoft Unit Testスイートを使用しています。ReSharper 4.5もインストールされています。私の単体テストは、データファイルをあらかじめロードするTestInitializeメソッドに依存しています。このテストデータファイルへのパスは、標準のCtrl-R + Ctrl-TコマンドとResharperユニットのテスト実行コマンドを使用してVS 2008内から単体テストを実行するかどうかによって異なります。ユニットテストのテストデータファイルへのパス

私のTestInitializeメソッドは、ユニットテストデータファイルへの正しいパスをどのように知ることができますか?

更新:

テストデータは私が外部ファイルとしてそれを維持することを好むの文字列にそれをプッシュしたくないということは十分かなりあります。テストプロジェクトのファイル構造は、MVCアプリケーションで作成された標準ユニットテストプロジェクトのファイル構造です。テストプロジェクトのルートの下に、「テストデータ」という新しいフォルダが作成されました。テストランナーに関係なくアクセスしたいフォルダです。

答えて

1

テストスイートの初期化ルーチンでゼロからテストデータを作成できませんか?これは、それが特定の場所にあることに依存せず、不慮の改ざんから安全です。

+1

私は多くの数学を行うライブラリを持っています。私は、さまざまなインプットの期待される結果を確実に得たいと思っています。 各テストには2つの入力座標と結果が含まれ、テストごとに9桁の数字が残ります。 私は多くの場合、コピー/貼り付けよりも自分の入力を含むファイルを持っています。 –

76

テストランナーによってテストファイルの場所が異なると言われるので、プロジェクトに含まれており、dllファイルと一緒にコピーされていると仮定しています。

string path = AppDomain.CurrentDomain.BaseDirectory; 

これで、テストを実行しているフォルダが表示されます。

[編集]

In Visual Studio。

ReSharperの - >オプション - >ツール - >ユニットテスト - から>実行結果:指定したフォルダ(またはテストプロジェクトのプロジェクト出力フォルダーを変更する)あなたは、テストデータのフォルダを指定することができ

、または指定したフォルダを基準にします。

+1

大変ありがとうございます。私はExecutingAssemblyの使い方について迷っていましたが、私のウィンドウのプロファイルを深く指し示す奇妙なパスがありました。テストデータは見えませんでした... – Tormod

+0

これは、 "C:\ Yadda \ MyProject \ bin \ Debug"のようなTestプロジェクト内の\ bin \ Debugまたは\ bin \ Releaseフォルダへのパスを示しています。 –

15

(元答えはまた、.NETのコアマルチターゲットプロジェクトの出力パスを受け入れるように更新)

それはあなたのテスト・データ・ファイルを使用して、パラメータとして渡すのフォルダにあると仮定し、「testDataFolder」ルート内の「TEST_DATA」フォルダ:

public static string GetTestDataFolder(string testDataFolder) 
{ 
    string startupPath = ApplicationEnvironment.ApplicationBasePath; 
    var pathItems = startupPath.Split(Path.DirectorySeparatorChar); 
    var pos = pathItems.Reverse().ToList().FindIndex(x => string.Equals("bin", x)); 
    string projectPath = String.Join(Path.DirectorySeparatorChar.ToString(), pathItems.Take(pathItems.Length - pos - 1)); 
    return Path.Combine(projectPath, "Test_Data", testDataFolder); 
} 
+0

Thatsまさに私が見ているもの! – TyForHelpDude

関連する問題