5

ソリューション内の他のアセンブリへの参照を持つコード化された UI テスト プロジェクトがあります。どういうわけか、一部のアセンブリはTestResults/Outディレクトリにコピーされませんが、他のアセンブリはコピーされます。すべてのアセンブリにはCopy Localオプションtrueがあり (実際に重要かどうかはわかりません)、他のオプションではまったく同じです。VS2010 からローカルでテストを開始すると、すべてのアセンブリがコピーされますが、ビルド サーバーではコピーされません。

属性を使用[DeploymentItem]してこれらの「いたずらな」アセンブリの展開を強制すると、それらは正常に展開されます。

私はそれを得ることができません - 私は、(のReferencesセクションでSolution Explorer) アセンブリを参照すると、そのアセンブリがコピーされTestResults/Out[DeploymentItem]いくつかの .xml およびその他の構成ファイルをコピーする必要があると常に考えていました。

4

1 に答える 1

14

これは前に見たことがあります。テスト プロジェクトは他のプロジェクトを参照していますが、テストを実行すると、アセンブリが TestRun Out フォルダーに存在しないことがわかります。

単体テストを固定の場所から実行する他のテスト ランナーとは異なり、MSTest は必要なアセンブリを、テストが実行されるテスト実行フォルダーにコピーします。この設計により、テスト実行間のテスト結果、カバレッジ、出力を比較できます。

よくある誤解は、 「ローカルにコピー」などのコンパイル設定が、テストに使用される依存関係に何らかの影響を与えるというものですが、これは単に真実ではありません。MSTest はリフレクションを使用して、テストの実行に必要なアセンブリ参照を決定します。

表示されているエラーは、アセンブリを参照したが、テスト アセンブリがそれを直接使用していないことが原因である可能性があります。これは、IL インスペクション ユーティリティ (DotPeek、Reflector など) を使用してテスト アセンブリ参照を調べることで確認できます。(これは、XAML でアセンブリを参照する WPF プロジェクトでよく問題になります。)

修正するには、DeploymentSettings を使用してアセンブリを出力フォルダーにコピーします。または、テスト プロジェクトでアセンブリを使用します。たとえば、テスト プロジェクトに次を追加すると、アセンブリが確実にデプロイされるように IL が生成されます。

var type = typeof(AssemblyNotBeingCopied.MyClass);
于 2013-03-08T19:12:03.467 に答える