【问题标题】:How to decide when and when not to create an integration test如何决定何时以及何时不创建集成测试
【发布时间】:2015-04-17 18:28:16
【问题描述】:

是否有明确的流程来决定您应该为代码库中的哪些内容创建集成测试套件?我在说... “我的这部分代码符合 A 标准,因此应该创建测试。我的这部分代码符合 B 标准,因此不应该创建测试。”

随着我的 Rails 应用程序的规模显着增长,我正在添加一些小功能(与总体结构相比),例如 User 帐户上的一个字段,该字段指示是否允许 User 为他或她或她需要父母这样做(我知道这个错误的影响可能很重要,但我只是想阐明这个功能实现的细微之处)。

集成测试是否应该是特定领域的——就像上面所说的那样?还是应该更全面、更综合?我正在寻找一个明确的“是”或“否”来创建集成测试的过程。存在吗?

【问题讨论】:

  • 快速连续使用“elucidate”和“pellucid”的道具。

标签: testing tdd integration-testing


【解决方案1】:

没有办法决定是否编写一个您可以不假思索地使用的集成测试。任何实际的应用程序都有细微差别和特殊情况挑战任何规则。 但当然有一种通用方法,您可以采用这种方法,除非您发现它不适合:使用验收测试作为集成测试的方法

旁注:我所说的“集成测试”是指执行不止一层代码的测试,而不是 Rails 特有的含义,它主要被更好的方法和工具所包含。但如果您确实使用 Rails 集成测试,我的回答也适用。

验收测试捕获重要的用户流程。它也是一个集成测试,从 UI 一直到后端运行应用程序的所有层。行为驱动开发 (BDD) 和类似的方法通过为所有重要的用户流程编写验收测试来推动开发。验收测试编写起来很复杂,运行起来也很慢,因此尝试编写尽可能少的测试,这样仍然定义了所有重要的用户流程。

选择验收测试是一门艺术,但经验法则是,如果两个场景涉及不同的参与者和/或不同的主要系统组件(例如 UI 屏幕),则它们应该有单独的验收测试,否则它们是相同的具有详细信息的场景和一次验收测试就足够了。

验收测试对于与您的利益相关者进行沟通(即记录要求)很有用,因此无论您的其他测试策略如何,您都需要它们。但是通常会发现一整套验收测试就是您需要的所有集成测试。不值得接受测试的详细需求可以在单元测试中表达。

在您的示例中,我可能会为用户创建自己的约会的场景编写一个验收测试,而为父母必须提供帮助的场景编写另一个验收测试,因为它们会完全不同。第一个类似于(使用 Gherkin)

When I visit the new appointment page
And I create a new public appointment
And I visit my calendar
Then I see the public appointment

但第二个会完全不同:

When there is an unrestricted user "Dad"
And there is a restricted user "Billy" supervised by "Dad"
And there is a user "Stalker"
When "Billy" visits the new appointment page
And "Billy" creates a new appointment
And "Billy" visits his calendar
Then "Billy" sees a pending appointment

When "Stalker" visits "Billy"'s calendar
Then "Stalker" does not see an appointment

When "Dad" visits "Billy"'s calendar
And "Dad" approves the pending appointment
Then "Dad" sees an appointment

When "Billy" visits his calendar
Then "Billy" sees an appointment

When "Stalker" visits "Billy"'s calendar
Then "Stalker" does not see an appointment

另一方面,我可能不会为有和没有位置的场景编写两个不同的验收测试(假设位置只是一个可能会或可能不会填充的文本字段)。单元测试可能就足够了。

【讨论】:

    【解决方案2】:

    如果您可以在没有错误的情况下进行小的调整,那么您就不需要集成测试。但是,一旦您开始遇到 2 或 3 个错误,或者如果您预见自己会因为复杂性而遇到问题(利用您的直觉和经验),那么您需要进行测试。
    比这更具体的实际公式是不可能的,因为测试旨在检测不应该存在的错误。因此,如果不检测错误(编写测试),就不可能知道它是否存在。

    【讨论】:

      猜你喜欢
      • 2016-03-15
      • 2015-05-15
      • 2013-04-22
      • 2014-06-17
      • 2020-12-17
      • 1970-01-01
      • 2017-09-13
      • 2014-07-12
      • 2011-12-15
      相关资源
      最近更新 更多