2010-01-04 180 views
7

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

+0

我更喜欢为单个类编写unittests,并且(有时)为集成测试编写记录工具。 – stacker 2010-01-04 10:27:48

回答

17

对于您的情况,您希望编写一个集成测试以涵盖您提到的情况。我有一个full post on this topic。但是,下面是针对您的问题的汇总版本:

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

有了值得信赖的测试,您必须能够在100%的时间内信任结果。如果测试失败,您需要确定代码已损坏并且必须修复。您不应该问“数据库是否停机?”,“连接字符串是否正常?”,“存储过程是否已修改?”等。通过问这些问题,它表明你不能相信结果,并且你可能有一个设计不好的“单元测试”。

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

祝你好运!

+1

关于'值得信赖的测试'的好处 – 2010-01-04 17:30:46

+0

感谢您的评论。罗伊的观念当然也帮助了我。欢迎使用stackoverflow! – 2010-01-05 03:10:37

+1

只是阅读这个答案,它也完全回答我的问题。我对“专业”开发很陌生,这让我更好地了解了集成测试是什么,这是我不太明白的。谢谢! – 2011-05-05 17:37:56

8

集成测试和单元测试具有不同的范围和用途:

  • 单元测试测试在隔离小块的代码(如功能),从该程序的其余部分,理想地覆盖所有可能的边缘的情况下(如例外,空参数等)
  • 集成测试从用例的角度测试整个应用程序。他们永远不能涵盖所有的特殊情况,但他们可以抓住的代码的部分,并且将它们串联在一起,其单元测试往往错过

对于烧毛功能胶水代码之间的交互问题,你可以真的只有一个单元测试,你应该。但是,您也可以进行集成测试,该测试显示当用户按下某个按钮时,照片会写入目录中,并且可以在程序中打开。

1

有些人会为DAO调用一个集成测试;别人会说这是一个单元测试。

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

1

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

5
  • 集成测试帮助你确认会发生什么,如果一些资源不可用if您的软件是正常工作
  • 单元测试可以帮助您找到为什么您的软件是

单元测试在一定程度上也有助于第一个目标。加上它有两个优点:

  • 它一般是这样便宜运行有一个更小的范围的单元测试。
  • 使用单元测试比使用集成测试更容易获得组件状态组合爆炸的覆盖范围。假设你有一个涉及三个组件的设置。他们每个人都有3种不同的状态。然后集成测试整个设置将涉及检查3 * 3 * 3 = 27条件。单元测试单个组件需要测试3 + 3 + 3 = 9个条件。 (这太简单了,但你希望看到这一点。)

因此,单元测试通常比集成测试更受欢迎。但是,你真的不能没有集成测试。集成测试应该是接受软件的基石。单元测试只是证明你有一堆东西。集成测试证明您有工作软件

相关问题