我一直在设计一些单元测试来模拟每个单元所具有的每个依赖项。这与预期的一样。我现在需要做集成测试。
例如,我有一个依赖于另外两个层的层,我已经将每个单独的层作为一个单元进行了单独测试,以模拟每个依赖项,但现在我需要执行集成测试。
因此,假设我有以下三层:
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 发布于 2013-07-04 23:36:22
您应该测试在您的应用程序中可以实现的任何场景(通过客户/组件交互)。如果Layer2可以在没有Layer1干扰的情况下与Layer3交互,请对其进行测试。
将集成测试看作是对整个用例的测试。是否存在这样的情况:您的客户可以从单独调用Layer2开始?如果有,请测试它。如果不是,你为什么要这么做?永远不要测试没有使用过的东西。这与编写“有人以后可能需要”的代码是一样的。这是浪费时间,不要那样做。
发布于 2013-07-05 02:38:33
我倾向于松散地定义集成测试。如果我看到一个测试涵盖了几个类之间的交互,我倾向于将其称为集成测试(有另一个术语来描述它,但我现在记不起来了)。对我来说,这不仅仅是关于层集成。
这个想法是,您应该基于关键场景和/或重要用例进行集成测试。通过这些事情,你将知道你的集成测试应该从哪里开始。不要为了创建集成测试而创建它。当用于不太重要的部分时,它们往往会有太多的工作和维护。
在您的示例中,如果您在Layer1上进行了一次集成测试,该测试覆盖了所有三个层,那么就足以涵盖您的场景。正如在前面的回答中提到的,没有必要刻意测试Layer2 > Layer3,除非您说其他东西可能会命中Layer2并完全绕过Layer1。但即使是这样,我也会从那个“其他东西”开始准备一个集成测试。只有当你有一个从Layer2开始的用例时,才测试Layer2 > Layer3。
发布于 2013-07-05 20:35:38
集成测试有时是有用的,但就性能和复杂性而言,它们是以high cost形式出现的。
它们不应该用于系统行为的详尽验证,它们包含的活动部件的数量以及它们行为的组合数量通常太高了。
我做集成测试主要有两个目的:
或者,更准确地说,测试您为将系统与第三方模块隔离而编写的适配器是否正确地调用了这些第三方模块。
如果您正在努力理解所有不同的测试实践以及何时使用它们,"Growing Object-Oriented Software, Guided by Tests“一书包含了非常有用的指南。
https://stackoverflow.com/questions/17473752
复制相似问题