10

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

4

4 回答 4

8

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

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

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

于 2009-01-02T13:58:45.600 回答
8

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

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

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

于 2009-01-02T14:55:21.477 回答
3

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

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

于 2009-01-02T14:05:06.977 回答
3

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

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

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

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

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

于 2009-01-02T21:06:53.520 回答