考虑以下测试类:
[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在部署后不会更改,因此只会部署每个项目一次。在短期内,我已将测试中的代码更改为不再需要此行为,从长期来看,我很可能会实现一个不做出此假设的属性。
答案 0 :(得分:2)
DeploymentItem
实际上是您通常会部署到客户端计算机上的文件,因此部署后并不是要删除它们!
您应该为单元测试创建一个“Sandbox”目录,并使用常规的.NET文件系统方法(如File.Delete
)来执行文件复制/访问/删除操作。