我有一个应用程序,在许多类中有许多单元测试。许多测试具有 DeploymentItem 属性以提供所需的测试数据:
[TestMethod]
[DeploymentItem("UnitTesting\testdata1.xml","mytestdata")]
public void Test1(){
/*test*/
}
[TestMethod]
[DeploymentItem("UnitTesting\testdata2.xml","mytestdata")]
public void Test1(){
/*test*/
}
当测试单独运行时,它们通过了。当全部同时运行时(例如,当我选择“在当前上下文中运行所有测试”时),一些测试会失败,因为DeploymentItem
其他测试留下的 s 会导致测试抓取错误的数据。(或者,一个测试错误地使用了用于另一个尚未运行的测试的文件。)
我发现了[TestCleanup]
and[ClassCleanup]
属性,这似乎会有所帮助。我添加了这个:
[TestCleanup]
public void CleanUp(){
if(Directory.Exists("mytestdata"))
Directory.Delete("mytestdata", true);
}
问题是,这在每个测试方法之后运行,并且似乎它会删除尚未运行的测试的 DeploymentItems。[ClassCleanup]
会阻止这种情况,但不幸的是,它运行的频率不足以阻止最初的问题。
从 MSDN 文档看来,DeploymentItem 似乎只保证文件在测试执行之前就在那里,但并不比这更具体。我想我看到了以下问题:
- 用于测试的部署项执行
- (发生其他事情?)
- 先前测试执行的测试清理
- 下一个测试执行
- 测试失败,因为文件不见了
有谁知道不同测试属性的执行顺序?我一直在寻找,但我没有找到太多。
我曾考虑让每个部署项都使用自己独特的数据文件夹,但这变得很困难,因为要进行数百次测试。