2011-05-05 6 views
4

は、次のテストクラスを考えてみましょう。ユニットテストで失効した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が変更されないため、各項目を一度だけ展開すると想定されるため、これは不可能です。短期間で私はテスト中のコードをこの動作をもはや必要としないように変更しました。長期的には、私はこの想定をしない属性を実装する可能性が最も高いでしょう。

答えて

2

DeploymentItem sが、あなたがそれらを展開した後、彼らにを削除することを意図していない、実際にあなたは通常、クライアントのコンピュータに展開しますファイルですので、

単体テストのために 'Sandbox'ディレクトリを作成し、ファイルのコピー/アクセス/削除を行うには通常の.NETファイルシステムのメソッドをFile.Deleteのように使用する必要があります。

+0

私はテストしようとしていた動作は、(必須ではないが必須である)構成ファイルが見つからなかった場合の動作でしたが、この動作は、同じ項目の異なるバージョンを異なるテスト用に展開する必要がある。サンドボックスディレクトリは、各テストで必要なボイラープレートコードの量が増えるため、実行可能だが理想的ではないようだ。 – Yaur

+0

私はこのような繰り返しのファイルアクセスコードを静的な機能を持つ静的クラスにいつでもオフロードします。私はmstest buthでこれを回避する方法を見つけることができませんでしたxUnit.netは面白いインターフェイスがあるようです。つまり、IUseFixture では、クラスのDeploymentFixtureを自分で定義し、各テストの前に適切なメソッドを実行します。 –

関連する問題