2011-06-22 10 views
0

パスが存在するかどうかをテストするメソッドが検証するテストケースを記述しています。パスは、アセンブリが出力されているフォルダにあります。 フォルダパスを取得するコードは です。string assemblyLocation = typeof(ReportViewer).Assembly.Loaction;テストケース内のアセンブリパス

ReportViewerは同じアセンブリ内に存在します。テストケースを実行すると、アセンブリテストケースのフォルダのパスを選択して実行します。

私がこのアプリケーションを実行すると、テスト中のメソッドは正しいパスを返しますが、テストケースではテストアセンブリのパスが与えられます。任意の手掛かりはなぜですか?

私はテストフレームワークとしてMSTestを使用しています。

+0

私はVSユニットテストフレームワークを私の答えと再タグ付け(あなたが記述した症状から正しいと思われる)で使用していると仮定して、間違っていたら私を修正してください。 –

答えて

0

使用しているユニットテストフレームワークを指定していませんでしたが、Visual Studio Professional(以上)の組み込みテストでは、テスト結果のoutディレクトリのテストアセンブリからテストが実行され、参照されたすべてのアセンブリがそこにコピーされます。

あなたのコードが参照されていないアセンブリ(リフレクションまたはアンマネージアセンブリでロードされている)または実行ディレクトリにある必要があるその他のリソースに依存する場合は、テストのクラス初期化中にコピーする必要がありますこれはコンストラクタの前に実行されます)。

これにより、テスト環境(例えば、別のapp.configファイル)を柔軟に構成することができます。

編集 - コメントに返信:

コードが正しい結果を返す - 実行ディレクトリを、私はあなたがbinディレクトリを探している理由は、あなたがそこの下にいくつかのリソースを持っていることであると仮定します。このような場合は、テストの開始前に(テストのクラスのクラスinitializeメソッドで)テストのoutディレクトリにコピーします。

+0

私はMSTestを使用しています。 MSTestがすべてのアセンブリをTestアセンブリディレクトリにコピーすると、私が直面している問題はどうなりますか? – Sheraz

+0

私の前提は正しいです。編集を参照してください。 –

+0

@Sherazは、クライアントのマシン上で、通常どこの場所にもアプリケーションをインストールできることを忘れないでください。 appdataの下になければならないものを除いて、あなたのアプリケーションが必要とするすべてがインストールディレクトリ(=実行ディレクトリ)にあることを確認する必要があります。テストのアウトディレクトリは、テストしている「アプリ」がインストールされている場所です。 –

関連する問題