【发布时间】:2010-12-19 19:03:51
【问题描述】:
让我从定义开始:
单元测试是一种软件验证和确认方法,程序员可以在其中测试各个源代码单元是否适合使用
集成测试是一种软件测试活动,其中将各个软件模块组合在一起并作为一个组进行测试。
尽管它们经常用于不同的目的,但这些术语经常混淆。开发人员将自动化集成测试称为单元测试。还有一些人争论哪个更好,这在我看来是一个错误的问题。
我想请开发社区分享他们对为什么自动化集成测试不能取代经典单元测试的看法。
以下是我自己的观察:
- 集成测试不能与 TDD 方法一起使用
- 集成测试很慢,不能经常执行
- 在大多数情况下,集成测试并不能指出问题的根源
- 使用集成测试创建测试环境更加困难
- 确保高覆盖率更加困难(例如模拟特殊情况、意外故障等)
- 集成测试不能与Interaction based testing 一起使用
- Integration tests move moment of discovering defect further(来自paxdiablo)
编辑:再次澄清一下:问题不在于是使用集成还是单元测试,而不是哪个更有用。基本上,我想向只编写集成测试并将它们视为单元测试的开发团队收集论据。 任何涉及来自不同层的组件的测试都被视为集成测试。这是为了与以隔离为主要目标的单元测试进行比较。
谢谢, 安德烈
【问题讨论】:
-
您应该将其拆分为单独的问题和答案,而不是在您的问题中回答。我也会制作这个社区 wiki,因为没有一个正确的答案——它更加主观和以讨论为导向。
-
另一方面,如果所有单元测试都正常工作,并不意味着应用程序可以正常工作。代码和单元测试中的假设可能是错误的。这就是为什么我认为集成和单元测试是互补的。
-
鉴于编辑,我认为您在这里提出了错误的问题。您似乎想要的是更接近“[真正的]单元测试提供的价值是集成测试不提供的什么?”。正如extraneon 指出的那样,还有一个问题的倒置版本。
-
请注意,这有点(尽管不完全)是错误的二分法:例如除了单元和集成之外,我们还使用 FIT 测试。
-
我在使用 TDD 时已经编写了数以千计的 集成 测试,所以您的第一次观察可能是基于一些误解。此外,虽然集成测试可能很慢,但它们也可能很快;这取决于几个因素。
标签: unit-testing tdd integration-testing