4

次のテストクラスを検討してください。

[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が一度デプロイされると変更されないことを前提としているため、これは不可能のようです。したがって、各アイテムは1回だけデプロイされます。短期的には、この動作を必要としないようにテスト対象のコードを変更しました。長期的には、この仮定を行わない属性を実装する可能性があります。

4

1 に答える 1

2

DeploymentItemsは、実際にはクライアントのコンピューターに通常展開するファイルであるため、展開後に削除することを意図したものではありません。

単体テスト用に「サンドボックス」ディレクトリを作成File.Deleteし、ファイルのコピー/アクセス/削除などの通常の.NETファイルシステムメソッドを使用する必要があります。

于 2011-05-18T14:02:58.067 に答える