【问题标题】:Integration and Unit tests集成和单元测试
【发布时间】:2020-10-26 01:02:18
【问题描述】:

在最后几天我用 Jest 学习了测试,但我不明白接下来的内容。 当我进行集成测试时,我不使用模拟? Mock 仅用于单元测试?

更新 今天,在我的公司,我们遵循的方法是:单元测试总是模拟所有外部访问数据,而集成测试不应该模拟。

很有趣,将集成测试与 hlg 环境相关联,因为您可以轻松发现损坏的软件以及损坏的软件

【问题讨论】:

  • 没有可靠的答案,因为没有关于单元测试和集成测试的通用定义。通常,我使用单元测试来指代系统隔离部分的测试,这意味着更多的test doubles 像模拟,以及集成测试来指代系统多个部分的测试,这意味着更少的测试替身,但你可以编写集成测试,其中某些部分仍被替换为测试替身和不涉及任何内容的单元测试。
  • 如果除了您集成的单元之外还涉及其他单元,您可能需要模拟。

标签: testing jestjs tdd integration


【解决方案1】:

Mocks 是一种Test Double - 特定于测试的依赖项替换,目的是使自动化测试具有确定性。

对于构成单元测试的内容没有普遍接受的正式定义,但在这种情况下,我发现以下定义(基本上是我自己的措辞)很有用:

单元测试是一种自动化测试,它独立于其依赖项来测试一个单元。

然而,这个定义方便地避免定义单位是什么,但在这种情况下并不重要。

同样,我们可以将集成测试定义为一种自动化测试,该测试使用其真正的依赖关系来测试被测系统 (SUT)。因此,不是用 Test Double 替换数据库依赖项,而是测试与真实数据库集成的 SUT,等等。

因此,使用这种集成测试视图,不需要测试替身,因为所有真正的依赖项都已集成。

集成测试的另一种观点认为集成测试是各种软件组件(单元,如果你愿意的话)的相互练习,同时仍然替换数据库或网络等进程外资源测试替身服务。这通常更容易完成,并且可能是一种有价值的技术,但您决定将这些 单元测试 还是 集成测试 主要取决于个人喜好。

很遗憾,这些术语没有普遍接受的一致定义。我通常会尽量坚持使用xUnit Test Patterns 中记录的词汇,这是关于该主题的最全面和内部一致的工作主体(据我所知)。

【讨论】:

    【解决方案2】:

    根据 ISTQB 的定义,集成是“专注于组件或系统之间交互的测试级别”。 因此,您可以在单元之间、不同组件之间或子系统之间进行集成测试。您还可以集成系统系统。

    您可以阅读unit test in wikipedia

    所以你也可以使用单元测试框架(mock/stub)来做集成测试,但是当整个应用程序的集成测试通常需要一个完整的环境设置时,单元测试框架做不到。

    【讨论】:

      【解决方案3】:

      这是我的 2 美分:

      • 单元测试 - 始终使用模拟。测试的“单元”是一种方法。
      • 集成测试 - 永远不要使用模拟。测试的“单元”是一个类。
      • 端到端测试 - 使用实际程序。测试的“单元”是一个单一的“快乐路径”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-18
        • 2011-02-06
        • 2016-01-23
        • 2016-10-03
        • 1970-01-01
        相关资源
        最近更新 更多