【问题标题】:Do you separate your unit tests from your integration tests? [closed]您是否将单元测试与集成测试分开? [关闭]
【发布时间】:2009-01-02 13:51:20
【问题描述】:

我只是想知道是否其他人只是将集成测试视为一种特殊的单元测试。但是,我从其他程序员那里听说,将单元测试和集成测试分开是个好主意。我想知道是否有人可以解释为什么这是一个好主意。将集成和单元测试视为完全不同会有哪些优势?例如,我已经看到用于集成测试和单元测试的单独文件夹和包。我认为包含单元测试和集成测试的单个测试包就足够了,因为它们基本上是相同的概念。

【问题讨论】:

    标签: unit-testing package integration-testing


    【解决方案1】:

    我认为它们是不同的,原因如下。

    • 可以在开发人员环境中对单个类/模块执行单元测试。
    • 应在类似于实际生产设置的环境中执行集成测试。

    单元测试故意保持“轻量级”,以便开发人员可以根据需要以最低成本运行它们。

    【讨论】:

      【解决方案2】:

      速度是主要原因。您希望您的单元测试尽可能快,以便您可以尽可能频繁地运行它们。您仍然应该运行集成测试,但在签入前运行一次就足够了。单元测试套件应该更频繁地运行 - 最好在每次重构时运行。

      我在一个环境中工作,我们有大约 15k 的 junit 测试,单元测试和集成测试完全混合在一起。整个套件大约需要半小时才能运行。开发人员避免运行它并比他们应该发现的错误晚。有时他们只在运行一部分测试后签入,并包含一个中断连续构建的错误。

      尽早开始分离测试。一旦你有一个大套房就很难了。

      【讨论】:

      • 同意。混合单元测试和集成测试真的很痛苦。
      • 因此,如果单个单元测试应该不依赖于其他外部依赖项,这意味着您始终可以将单元测试与其他单元/集成测试分开运行(我们不依赖于其他外部类/测试)。如果您只需要测试一个类,那么运行全套测试的意义是什么?反过来说,如果你将你的单元集成到系统中,无论如何你都需要运行全套测试以确保没有集成缺陷。 Ofc 这很容易需要 30 分钟或更长时间,因为您需要测试完整的系统。
      • " 开发人员避免运行它并比他们应该发现的错误晚。" - 换句话说,如果您的开发人员在模块 B 更改后运行单元测试并在模块 A 中发现缺陷,这意味着您的单元测试设计被破坏了。
      【解决方案3】:

      是的。通常,单元测试的范围是类级别,因此它们与模拟对象一起存在于环境中。另一方面,集成测试通过保留对您的真实程序集类型的引用来完成所有技巧。

      我只是不明白如何将单元和集成组织到一个项目中。

      【讨论】:

        【解决方案4】:

        如果您将“单元测试”的概念限制在类级别的范围内,那么是的,请将它们分开

        但是,如果您将最小的相关可测试单元定义为功能,那么您的一些“单元”测试在技术上将是“集成”测试

        尽管对术语的各种定义/解释进行重新散列在很大程度上无关紧要,但测试套件的分区应该是被测试组件范围和执行测试所需时间的函数。

        例如,如果您的所有测试(单元、集成、回归或其他)都适用于单个程序集并在几秒钟内运行,那么请将它们全部放在一起。但是,如果您的某些测试需要子网上的六台全新安装机器,而另一些则不需要,则将第一组测试与后者分开是有意义的

        总结:“单元”和“集成”测试的区别是无关紧要的;根据操作范围打包测试套件

        【讨论】:

          猜你喜欢
          • 2012-01-01
          • 2010-10-23
          • 2013-02-23
          • 2011-05-15
          • 2014-12-28
          • 1970-01-01
          • 1970-01-01
          • 2016-05-05
          • 2010-10-05
          相关资源
          最近更新 更多