我是单元测试新手。我创建了各种测试,当我逐个运行测试时,所有测试都通过了。但是,当我将整个批处理运行时,一些测试失败。为什么?我该如何纠正?批量运行时单元测试失败
1
A
回答
3
要解决此问题,编写单元测试时遵循特定规则很重要。有些规则易于遵循和应用,而其他规则可能需要根据您的情况作进一步考虑。
每个测试都应该设置一组独特的数据。当您使用持久数据时,这一点尤其重要,例如在数据库中。当测试创建具有特定用户标识的用户时,请编写测试,以便每次使用不同的用户标识。例如(C#):
var user = new User(Guid.NewGuid());
在每次测试结束时,清除测试创建的数据。例如,在拆卸方法中,删除您创建的数据(C#,NUnit):
[TearDown]
public void TheTearDownMethod() {
_repository.Delete(_user);
}
可能有变化,例如,当您针对数据库进行测试时,您可以选择在运行测试套件之前加载备份。如果您仔细制作测试,则不必在每次测试(或测试子集)后清理数据库。
要从您现在的位置(每个测试通过单独运行时)开始,依次运行前两个测试,让它们通过。然后按顺序运行三次,让它们通过等。在每次迭代中,确定之前的测试会导致添加的测试失败。解决该依赖关系。通过这种方式,您可以了解更多关于测试的知识,同时也知道如何避免编写相互依赖的测试。
一旦套件通过一个修补程序就会频繁运行,以便尽早检测到依赖关系。
这并不包括所有的情况和变化,但希望给你一个建立在你已有的指导方针。
1
有时一个测试的最终条件会影响下一个测试的初始条件。
手动运行和批处理运行可能会有不同的行为,如何设置每个测试的初始条件。
2
可能有些测试依赖于机器以前的状态。单元测试不应该依赖于过程/机器的先前状态,因此您应该查看失败的测试并确定它们依赖于的内容。
1
你显然有一些测试会产生意想不到的依赖性的副作用。调试。
良好的单元测试是原子性的,对其他测试(重要)没有依赖关系。一个好的做法是每个测试在运行测试之前创建(移除)它所依赖的所有东西。事后清理也是一种很好的做法,它确实有帮助,并且是推荐的,但不是100%必要的。
相关问题
- 1. 测试运行时失败,单独运行时通过
- 2. Python单元测试速度较慢,在TeamCity下运行时测试失败
- 3. 单元测试不失败
- 4. 单元测试Assert.AreEqual失败
- 5. mystyfing单元测试失败
- 6. 单元测试失败8
- 7. Grails单元测试失败
- 8. 运行大容量时单元测试失败,无法写入IPC端口
- 9. VS2010中的单元测试 - “调试”通过,“运行”失败
- 10. 测试::单元2.x测试运行从耙,但自动测试失败
- 11. 在单个单元测试失败时失败TFS构建
- 12. ElasticSearch运行测试时随机失败
- 13. 从Visual Studio运行测试代理的单元测试:登录尝试失败
- 14. 单元测试项目失败正在运行v11的BuildShadowTask
- 15. 运行所有的单元测试,即使一些失败!
- 16. 为什么单元测试首次运行失败?
- 17. 在ruby中重新运行失败的单元测试
- 18. 测试运行失败:由于'android.os.NetworkOnMainThreadException'导致测试运行失败
- 19. 测试运行失败:仪器运行失败,由于'kotlin.UninitializedPropertyAccessException'
- 20. 简单的android单元测试失败
- 21. UWP:WACK测试在Windows运行时元数据验证上失败
- 22. 单元测试DAL - 停止运行单元测试时连接
- 23. 测试方法失败(在VS中进行单元测试)
- 24. JUnit测试一起运行时失败,但单独传递
- 25. 单元测试通过“dotnet测试”,但从Visual Studio 2017测试资源管理器运行时失败
- 26. Android的单元测试运行所有类的测试失败,但每个单独的方法成功运行
- 27. 失败哈德森构建单个单元测试失败
- 28. 执行整个测试套件时,单元测试用例失败
- 29. FunctionWithCollation单元测试失败与System.Data.Sqlite
- 30. Laravel单元测试迁移失败
非常感谢您的解释。我已经写了5个测试,所有的测试都通过了,当我写下最后一个测试时,就会让其他人失败。我怎样才能让它作为最后一次测试运行? – learning 2010-08-12 09:42:45
从概念上说,他们应该能够以任何顺序运行。在你的评论中回答:有些单元测试框架允许你在测试中指定一个命令,或者在另一个测试上设置一个测试的依赖关系。在某些情况下,它有助于在测试夹具(=测试类)内改变测试方法的位置。 – Manfred 2010-08-12 10:00:22
我正在使用NUnit和NCoverExplorer,有没有一种方法来指定这两个中的任何一个的顺序?如果你使用过它们? – learning 2010-08-12 10:40:04