は、次のテストクラスを考えてみましょう。ユニットテストで失効したDeploymentItemを削除するにはどうすればよいですか?
[TestClass]
public class ExampleTests
{
[TestMethod]
public void FileDoesNotExists()
{
Assert.IsFalse(System.IO.File.Exists("testfile.txt"));
}
[TestMethod]
[DeploymentItem("testfile.txt")]
public void FileExists()
{
Assert.IsTrue(System.IO.File.Exists("testfile.txt"));
}
}
彼らは現実の世界に定義されている順に実行されるという保証はありませんので、これらのテストは、それらかもしれないパスで実行される順序に応じて、しかし、動作は非決定的です...明らかにこれは悪いです。
私はTestCleanupAttributeを見回して実験しましたが、両方のテストを合格させる信頼できる方法を見つけることができませんでしたが、これを行う簡単な方法があるようです。そのような方法は存在しますか?
更新:テストフレームワークでは、展開された後にDeploymentItemsが変更されないため、各項目を一度だけ展開すると想定されるため、これは不可能です。短期間で私はテスト中のコードをこの動作をもはや必要としないように変更しました。長期的には、私はこの想定をしない属性を実装する可能性が最も高いでしょう。
私はテストしようとしていた動作は、(必須ではないが必須である)構成ファイルが見つからなかった場合の動作でしたが、この動作は、同じ項目の異なるバージョンを異なるテスト用に展開する必要がある。サンドボックスディレクトリは、各テストで必要なボイラープレートコードの量が増えるため、実行可能だが理想的ではないようだ。 – Yaur
私はこのような繰り返しのファイルアクセスコードを静的な機能を持つ静的クラスにいつでもオフロードします。私はmstest buthでこれを回避する方法を見つけることができませんでしたxUnit.netは面白いインターフェイスがあるようです。つまり、IUseFixtureでは、クラスのDeploymentFixtureを自分で定義し、各テストの前に適切なメソッドを実行します。 –