我应该编写集成测试还是单元测试?

时间:2010-01-04 10:10:47

标签: automated-tests

我有一个功能,可以将照片(存储在数据库中,应用程序提供保存在目录中的用户选项)保存到给定目录。现在,这不能正常工作。我只是修复了它。现在,我应该编写单元测试吗?或功能的集成测试?

5 个答案:

答案 0 :(得分:18)

对于您的情况,您希望编写集成测试以涵盖您提及的方案。我有full post on this topic。但是,这是一个特定于您的问题的摘要版本:

在他的“单元测试艺术”一书中,Roy Osherove描述了单元测试必须“值得信赖”的关键原则。从表面上看,这似乎相当明显。但是,这个基础突出了单元测试与集成测试之间的一些关键差异。

通过值得信赖的测试,您必须能够100%地信任结果。如果测试失败,您需要确定代码已损坏且必须修复。您不应该问“数据库是否已关闭?”,“连接字符串是否正常?”,“存储过程是否已修改?”。通过询问这些问题,它表明您无法信任结果,而且您​​可能设计糟糕的“单元测试”。

由于您的方案描述了具有类似多个依赖项的情况,因此您希望使用集成测试来覆盖它。同样,有关详细信息,请参阅my full post here

祝你好运!

答案 1 :(得分:8)

集成测试和单元测试有不同的范围和目的:

  • 单元测试与程序的其余部分隔离测试小块代码(如函数),理想情况下覆盖所有可能的边缘情况(如异常,空参数等)。
  • 集成测试从用例的角度测试整个应用程序。它们永远不会覆盖所有边缘情况,但是它们可以解决代码部分之间的交互问题以及将它们连接在一起的粘合代码,单元测试经常会错过

对于单个功能,你真的只能进行单元测试,你应该这样做。但您也可以进行集成测试,该测试显示当用户按下某个按钮时,照片会写入目录,并且也可以在程序中打开。

答案 2 :(得分:6)

  • 集成测试可帮助您验证,如果您的软件正常运行
  • 单元测试可帮助您找到为什么您的软件打破

单位测试在某种程度上也有助于实现第一个目标。此外,它还有几个优点:

  • 运行单位测试的范围通常更便宜。
  • 使用单元测试比使用集成测试更容易覆盖组件状态的组合爆炸。假设您有一个涉及三个组件的设置。它们每个都有3种不同的状态。然后集成测试整个设置将涉及检查3 * 3 * 3 = 27条件。对各个组件进行单元测试需要测试3 + 3 + 3 = 9个条件。 (这个过于简单,但你希望看到这一点。)

因此,单元测试通常比集成测试更受欢迎。但是,你真的离不开集成测试。集成测试应该是接受软件的基石。进行单元测试只能证明你有很多东西正在做某事。集成测试证明您拥有工作软件

答案 3 :(得分:1)

有些人会将DAO测试称为集成测试;其他人会说这是一个单元测试。

无论你怎么称呼它,我都说你应该对所有DAO功能进行单元测试,并对用例中包含的前后行为进行集成测试,该用例说明“给用户提供保存选项”到文件系统。“我对这两种情况都进行了集成测试,因为它听起来像你的系统都可以。

答案 4 :(得分:1)

我认为这取决于问题的根源。 如果函数本身在不同的场景中可能存在一些问题,您可以使用单元测试来测试这个场景。 如果您的函数和程序的其他部分的集成可能会导致一些问题,您应该考虑集成测试。 有时像你这样的函数可能需要一些外部资源来完成它的工作,如果有一些单元测试看看如果其中一些资源不可用会发生什么,这不是一个坏主意