2011-09-22 45 views
6

いくつかのテストでは、(反射を使用して)ClassInitializeメソッドで(リフレクションを介して)生成される構成でデータ駆動型テストを実行する必要があります。私はすべてを試しましたが、データソースを正しく設定することができません。MsTest、DataSourceAttribute - ランタイムで生成されたファイルを処理する方法を教えてください。

このテストでは、csvファイルのクラスリスト(クラスごとに1行)を取り、データベースへのマッピングがうまくいくことをテストします(つまり、すべてのエンティティのデータベースからアイテムを1つ取得しようとします。テーブル構造が一致しない場合は例外をスローします)。

のtestMethodは、次のとおりです。

[DataSource(
    "Microsoft.VisualStudio.TestTools.DataSource.CSV", 
    "|DataDirectory|\\EntityMappingsTests.Types.csv", 
    "EntityMappingsTests.Types#csv", 
    DataAccessMethod.Sequential) 
] 
[TestMethod()] 
public void TestMappings() { 

明らかにファイルがEntityMappingsTests.Types.csvです。それはDataDirectoryになければなりません。

ここで、Initializeメソッド(ClassInitializeとマークされています)で、私はそれをまとめて、それを書き込もうとします。

どこに書きますか? DataDirectoryはどこですか?

Iの試み:で

File.WriteAllText(context.TestDeploymentDir + "\\EntityMappingsTests.Types.csv", types.ToString()); 
File.WriteAllText("EntityMappingsTests.Types.csv", types.ToString()); 

両方結果「ユニットテストアダプタは、データ・ソースに接続するか、データを読み取ることができませんでした」。より正確な:

エラーの詳細:Microsoft Jetデータベースエンジンは オブジェクトのEntityMappingsTests.Types.csv」を見つけることができませんでした。オブジェクトが であること、および名前とパス名が正しく綴られていることを確認してください。

だからどこにファイルを置くべきですか?

また、現在のディレクトリに書き込んだり、DataDirectoryの部分を取り出したりしてみました - 同じ結果。残念ながら、ここでは限られたデバッグサポートしかありません。

+0

http://technet.microsoft.com/en-us/sysinternals/bb896645からProcessMonitorツールを使用してください。 MSTest.exeまたは関連するqtagent32.exeにフィルタを置き、ロード先の場所とテストの読み込みプロセスのどの時点であるかを確認します。次に、これらの詳細に関する更新情報をここに入力してください。 – kroonwijk

+0

あなたはasnwerとして投稿することができますので、私はそれを受け入れることができます。愚かな私....あなたのアドバイスが働いた、それは働いた。 – TomTom

+0

確かに、それをしました。 – kroonwijk

答えて

5

technet.microsoft.com/en-us/sysinternals/bb896645からProcessMonitorツールを使用してください。 MSTest.exeまたは関連するqtagent32.exeにフィルタを置き、ロード先の場所とテストの読み込みプロセスのどの時点であるかを確認します。次に、これらの詳細に関する更新情報をここに入力してください。

1

VSプロジェクトにCSVファイルを追加した後、そのプロパティを開く必要があります。プロパティ "Copy To Output Directory"を "Copy Always"に設定します。 DataDirectoryのデフォルトはコンパイルされた実行可能ファイルの場所です。この実行可能ファイルは出力ディレクトリから実行され、そこで見つけられます。

関連する問題