您是否将单元测试与集成测试分开?

时间:2009-01-02 13:51:21

标签: unit-testing integration-testing package-structuring

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

4 个答案:

答案 0 :(得分:7)

由于以下原因,我认为它们不同。

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

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

答案 1 :(得分:7)

速度是主要原因。您希望您的单元测试尽可能快,以便您可以尽可能频繁地运行它们。您仍然应该运行集成测试,但在签入之前运行它们应该足够IMO。单元测试套件应该更频繁地运行 - 理想情况下每次重构都会运行。

我在一个环境中工作,我们有大约15k junit测试,单元和集成测试完全混合。全套房需要半小时才能运行。开发人员避免运行它并在以后发现错误。有时他们只运行一部分测试后会检查并包含一个破坏连续构建的错误。

尽早开始分离您的测试。一旦你有一个大套房,这很难。

答案 2 :(得分:3)

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

我只是没有看到如何将单元和集成组织到一个项目中。

答案 3 :(得分:3)

如果你将“单元测试”的概念限制在班级的范围内,那么是的,将它们分开来

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

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

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

总结:“单元”和“整合”测试的区别是无关紧要的;基于操作范围打包测试套件