我一直在设计一些单元测试,模拟每个单元的每个依赖项。这按预期工作。我现在需要进行集成测试。
因此,例如,我有1层依赖于2个附加层,我已经分别测试每个单独的层作为一个单元模拟每个依赖项,但我现在需要执行集成测试。
想象一下,我有以下三层......
Layer1 > Layer2 > Layer3
我可以对Layer1进行集成测试,它可以为Layer2和Layer3提供真实实例(而不是模拟)。
那么我应该对Layer2进行集成测试吗?其中包括以下工作流程
Layer2 > Layer3
此处没有任何内容被嘲笑,它们是集成测试。
我看到的问题是我的Layer1集成测试真的涵盖了Layer2的相同集成测试。
我不太确定我是不是太过分了。我知道有更多的测试而不是不够,但我在测试layer1
时看到了重复 Layer1 > Layer2 > Layer3
和layer2
Layer2 > Layer3
所以我可能只是测试Layer1 - 使用集成测试
Layer1 > Layer2 > Layer3
可能会涵盖layer2和layer3集成测试
Layer2 > Layer3
?? 我真的很感激任何反馈或意见。
答案 0 :(得分:4)
您应该测试应用程序中可实现的任何方案(通过客户/组件交互)。如果Layer2
可以与Layer3
互动但没有Layer1
干扰 - 请对其进行测试。
将整合测试视为整个用例的测试。是否存在客户可以通过单独调用Layer2
开始的情况?如果有,测试它。如果没有,你为什么要那样做?切勿测试未使用的东西。这与编写“某人可能需要稍后”的代码相同。这是浪费时间,不要那样做。
答案 1 :(得分:1)
我倾向于松散地定义集成测试。如果我看到一个涵盖几个类之间交互的测试,我倾向于将其称为集成测试(这是另一个术语,但我现在不记得了)。对我来说,这不仅仅是关于图层集成。
这个想法是你应该根据关键场景和/或重要用例进行集成测试。从这些方面来说,您将了解集成测试应该从哪里开始。不要为了创建它而创建集成测试。当用于不太重要的位时,它们往往是太多的工作和维护。
在您的示例中,如果您对Layer1
进行了集成测试,该测试会触及所有三个层,那么这将充分涵盖您的场景。正如之前的回答中所提到的,除非您说其他内容可能会Layer2 > Layer3
并完全绕过Layer2
,否则无需故意测试Layer1
。但即使是这种情况,我也会从“别的东西”开始准备集成测试。当您的用例从Layer2 > Layer3
开始时,只测试Layer2
。
答案 2 :(得分:0)
集成测试有时很有用,但就性能和复杂性而言,它们只有high cost。
IMO它们不应该用于对系统行为的详尽验证,它们包含的活动部件的数量以及它们的行为组合的数量通常太高。
我主要为两个目的进行集成测试:
在项目开始时,端到端测试是您应该编写的第一个测试,如果您想设置Walking Skeleton,它代表系统的一个简单的全功能第一小片
测试系统和第三方代码之间的集成。或者,更准确地说,测试您编写的适配器以将系统与第三方模块隔离开来,可以正确调用这些第三方模块。
如果您正在努力探索所有不同的测试实践以及何时使用它们,那么“Growing Object-Oriented Software, Guided by Tests”这本书就会提供非常有用的指导。