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 在部署后不会更改,因此每个项目只部署一次。在短期内,我已经将被测代码更改为不再需要这种行为,从长远来看,我很可能会实现一个不做这个假设的属性。

4

1 回答 1

2

DeploymentItems 实际上是您通常会部署到客户端计算机的文件,因此您不打算在部署它们后删除它们!

您应该为您的单元测试创​​建一个“沙盒”目录,并使用普通的 .NET 文件系统方法File.Delete来执行文件复制/访问/删除操作。

于 2011-05-18T14:02:58.067 回答