【问题标题】:Is it common to write integration tests before writing unit tests?在编写单元测试之前编写集成测试是否很常见?
【发布时间】:2010-08-03 16:55:16
【问题描述】:

在编写单元测试之前编写集成测试是否很常见?它是传统的、好主意还是最佳实践?

在我看来,这似乎是一件合乎逻辑的事情,尤其是在第一次使用某些 3rd-party API 时:您需要知道如何使用 3rd-party 软件,然后才能测试自己的代码与第 3 方软件的正确交互——即,您必须先测试您对如何与第 3 方 API 交互的理解(通过集成测试),然后才能测试代码是否正确使用(通过模拟第 3-派对 API),对吗?

我走对了吗?

编辑

谢谢大家的回答。我刚刚发布了similar / related question

【问题讨论】:

  • 它是否常见真的很重要吗?除了在 SO 人群中的受欢迎程度之外,您还应该能够根据其他属性来评估您的想法的优点。
  • @Esteban - 我同意。我害怕如此主观的纳粹分子,我认为共同性不如善良主观,所以我相应地措辞了这个问题。传统智慧是寻找好主意的好方法。

标签: unit-testing language-agnostic automated-tests integration-testing


【解决方案1】:

当负责针对第三方 API 进行开发时,我要做的第一件事是编写原型代码(如果愿意,可以进行集成测试)以获得预期/期望的结果。然后我创建了一些单元测试来强制执行该期望并将原型重构为我将使用的实际代码。

是的,IMO,这很典型。可能不是纯粹意义上的 TDD,但我可以接受。

【讨论】:

    【解决方案2】:

    我走对了吗?

    您是否使用测试来推动开发?即TDD?

    如果是这样,你就在正确的道路上。

    “集成测试”和“单元测试”是模糊的定义。学者们在试图找到区分它们的方法时可能会感到头疼。

    不要把时间浪费在头发分裂上。

    先写测试。

    【讨论】:

    • 虽然我真的不觉得关于 IT 和 UT 之间的界限在哪里存在很大的争论,但我真的同意如果你在做 TDD,你真正感兴趣的是得到相信你的代码可以工作,即使你改变它,你仍然会有这种信心。 IT 和 UT 对此都很有用,因此只要您总体上遵循良好的测试实践,您就不会真正出错。
    【解决方案3】:

    我不确定它有多普遍,但我确实看到提倡更高级别的测试作为第一步。例如,在Growing Object-Oriented Software Guided by Tests,作者建议的第一件事是创建功能/验收测试脚手架,然后通过编写高级验收测试开始推动开发(验收测试位于测试三角形的顶端,集成测试在中间和单元测试在底部,所以原理是一样的,真​​的)。

    它最终会变成这样:

    • 编写失败的功能测试 功能 X
    • 编写失败的单元测试
    • 使单元测试通过
    • 功能测试是否通过?如果没有,再写一个 单元测试失败并实施 下一个区块。

    【讨论】:

      【解决方案4】:

      嗯,是的,我经常走同样的路,但这真的取决于你在做什么以及你对它的信任程度。

      例如,对于与数据库一起工作的东西,集成测试通常比单元测试更可靠,因为例如,NHibernate 可以并且将针对某些条件生成错误的查询。

      另一方面,如果您的算法是一个复杂的算法,从第一次尝试就很难正确编写(例如,复杂的正则表达式/解析或复杂的业务规则),那么单元测试可能更有意义,因为您不想等待(通常较慢)集成。

      【讨论】:

        【解决方案5】:

        我相信这取决于:

        1. 您使用的是什么 3rd 方。

          我认为测试 INSERT 查询是否在 SQL Server 中正确插入行是没有意义的,但您可以测试一些不受欢迎的 Web 服务是否在测试中收到预期结果

        2. 设置外部依赖的难度和成本。

          我无法想象使用支付处理器来测试金额超过 1000 美元的交易是否成功的集成测试 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多