我有一个功能,可以将照片(存储在数据库中,应用程序提供保存在目录中的用户选项)保存到给定目录。现在,这不能正常工作。我只是修复了它。现在,我应该编写单元测试吗?或功能的集成测试?
答案 0 :(得分:18)
对于您的情况,您希望编写集成测试以涵盖您提及的方案。我有full post on this topic。但是,这是一个特定于您的问题的摘要版本:
在他的“单元测试艺术”一书中,Roy Osherove描述了单元测试必须“值得信赖”的关键原则。从表面上看,这似乎相当明显。但是,这个基础突出了单元测试与集成测试之间的一些关键差异。
通过值得信赖的测试,您必须能够100%地信任结果。如果测试失败,您需要确定代码已损坏且必须修复。您不应该问“数据库是否已关闭?”,“连接字符串是否正常?”,“存储过程是否已修改?”。通过询问这些问题,它表明您无法信任结果,而且您可能设计糟糕的“单元测试”。
由于您的方案描述了具有类似多个依赖项的情况,因此您希望使用集成测试来覆盖它。同样,有关详细信息,请参阅my full post here。
祝你好运!答案 1 :(得分:8)
集成测试和单元测试有不同的范围和目的:
对于单个功能,你真的只能进行单元测试,你应该这样做。但您也可以进行集成测试,该测试显示当用户按下某个按钮时,照片会写入目录,并且也可以在程序中打开。
答案 2 :(得分:6)
单位测试在某种程度上也有助于实现第一个目标。此外,它还有几个优点:
因此,单元测试通常比集成测试更受欢迎。但是,你真的离不开集成测试。集成测试应该是接受软件的基石。进行单元测试只能证明你有很多东西正在做某事。集成测试证明您拥有工作软件。
答案 3 :(得分:1)
有些人会将DAO测试称为集成测试;其他人会说这是一个单元测试。
无论你怎么称呼它,我都说你应该对所有DAO功能进行单元测试,并对用例中包含的前后行为进行集成测试,该用例说明“给用户提供保存选项”到文件系统。“我对这两种情况都进行了集成测试,因为它听起来像你的系统都可以。
答案 4 :(得分:1)
我认为这取决于问题的根源。 如果函数本身在不同的场景中可能存在一些问题,您可以使用单元测试来测试这个场景。 如果您的函数和程序的其他部分的集成可能会导致一些问题,您应该考虑集成测试。 有时像你这样的函数可能需要一些外部资源来完成它的工作,如果有一些单元测试看看如果其中一些资源不可用会发生什么,这不是一个坏主意