多くのクラスで多くの単体テストを行うアプリケーションがあります。多くのテストには、必要なテストデータを提供するためのDeploymentItem属性があります。
[TestMethod]
[DeploymentItem("UnitTesting\testdata1.xml","mytestdata")]
public void Test1(){
/*test*/
}
[TestMethod]
[DeploymentItem("UnitTesting\testdata2.xml","mytestdata")]
public void Test1(){
/*test*/
}
テストを個別に実行すると、合格します。すべてを一度に実行すると(たとえば、[現在のコンテキストですべてのテストを実行する]を選択した場合)、DeploymentItem
他のテストによって取り残されたsによってテストが間違ったデータを取得するため、一部のテストは失敗します。(または、テストで、まだ実行されていない別のテスト用のファイルが誤って使用されています。)
[TestCleanup]
と属性を発見しました[ClassCleanup]
。これは役立つようです。私はこれを追加しました:
[TestCleanup]
public void CleanUp(){
if(Directory.Exists("mytestdata"))
Directory.Delete("mytestdata", true);
}
問題は、これはすべてのテストメソッドの後に実行され、まだ実行されていないテストのDeploymentItemsを削除するようです。[ClassCleanup]
これを防ぐことはできますが、残念ながら、元の問題を防ぐのに十分な頻度で実行されることはありません。
MSDNのドキュメントから、DeploymentItemは、テストが実行される前にファイルがそこにあることを保証するだけのようですが、それよりも具体的ではありません。私は次の問題が発生していると思います。
- テスト実行の展開アイテム
- (他のことが起こりますか?)
- 前のテスト実行からのテストクリーンアップ
- 次のテストが実行されます
- ファイルがなくなったため、テストは失敗します
さまざまなテスト属性の実行順序を知っている人はいますか?探していましたが、あまり見つかりませんでした。
各デプロイメントアイテムにデータ用の独自の一意のフォルダーを使用させることを考えましたが、何百ものテストを実行する必要があるため、これは困難になります。