1. ホーム
  2. c#

[解決済み] DeploymentItem属性の問題

2023-01-19 03:06:19

質問

私は現在、C#.netで書かれた古いシステムを保守しており、いくつかの時代遅れの機能を削除し、いくつかのリファクタリングを行なっています。神に感謝、前の人はいくつかのユニットテスト(MSTests)を書きました。私はJUnitのテストにかなり慣れていますが、MSTestsではまだあまりやっていません。

テストメソッドには DeploymentItem 属性があり、テストされるビジネスロジックメソッドによってパースされるテキストファイルを指定し、2番目の DeploymentItem には、デプロイする必要のある TIF ファイルの束を含むパスが指定されています。

[TestMethod()]
[DeploymentItem(@"files\valid\valid_entries.txt")]
[DeploymentItem(@"files\tif\")]
public void ExistsTifTest()
{
   ...
}

テストは以前はうまくいっていましたが、今度は \files ディレクトリに含まれる TIF ファイルの名前を変更する必要がありました。ルールによると、TIFファイル名はあるパターンにマッチしなければなりませんが、これは ExistsTifTest() メソッドでもチェックされます。 新しい要件に適合させるためにファイル名を変更する必要がありましたが、突然、TIF ファイルが以前のようにデプロイされなくなりました。

なぜこのようなことが起こるのか、原因は何なのか、どなたかヒントをいただけないでしょうか。また、テストメソッドにDeploymentItem属性を付けている状態で、Definitionディレクトリにあるvalid.txtの横にmy2ndTest.txtというファイルを追加しても同じ現象が起きます。このファイルはデプロイされないのでしょうか?

testrunconfigでデプロイメントパスを直接定義することで画像をデプロイできるようになりましたが、なぜこのようなことが起こるのか、例えば私の新しいファイル "my2ndTest.txt" がデプロイされないのに他のファイルはされているのか理解したいと思います。

どのように解決するのでしょうか。

DeploymentItem は、ちょっとごちゃごちゃしていますね。

ソリューション内の各ファイルは、VS.NET で "Copy To Output Folder" の設定を持っています。ファイルを出力フォルダーに取得するには、これを "Copy Always" (または同様の設定) にする必要があります。

新しいファイルに対してこの設定がされていることを確認します。この設定がない場合、ファイルは出力フォルダーにコピーされず、出力フォルダーから MSTest が処理を行うフォルダーに配備することはできません。

個人的には、ユニット テストに必要なファイルがある場合、それらのファイルをリソースとしてアセンブリに埋め込み、テスト中にそのアセンブリ自身を "unpack" させることが、より予測可能な方法であることが分かっています。YMMV。

のメモを参照してください。 これらのコメントは、VS2010での私の経験に基づいています。私の回答へのコメントは、これが VS2012 での問題ではないことを示唆しています。私はまだ、埋め込みリソースを使用すると、より少ない "magic" を含み、私にとっては、ユニット テストの "arrange" の段階をより明確にするコメントによって立っています。