3

我一直在设计许多单元测试来模拟每个单元所具有的每个依赖项。这按预期工作。我现在需要做集成测试。

因此,例如,我有 1 个层依赖于 2 个附加层,我已经分别测试了每个单独的层作为一个单元来模拟每个依赖项,但我现在需要执行集成测试。

所以想象我有以下三层..

  Layer1 > Layer2 > Layer3

我可以在 Layer1 上进行集成测试,该测试将为 Layer2 和 Layer3 提供真实实例(而不是模拟)。

那么我应该对 Layer2 进行集成测试吗?其中包括以下工作流程

  Layer2 > Layer3

这里没有任何东西被嘲笑,它们是集成测试。

我看到的问题是我的 Layer1 集成测试确实涵盖了 Layer2 的相同集成测试。

我不太确定我是否走得太远了。我知道最好有更多的测试而不是不够,但我在测试 layer1 时看到重复

  Layer1 > Layer2 > Layer3

和第 2 层

  Layer2 > Layer3

所以我可能只测试 Layer1 - 使用集成测试

  Layer1 > Layer2 > Layer3

这可能会涵盖第 2 层和第 3 层集成测试

  Layer2 > Layer3 
4

3 回答 3

4

您应该测试应用程序中可实现的任何场景(通过客户/组件交互)。如果可以不受干扰Layer2地进行交互- 测试它。Layer3Layer1

将集成测试视为对整个用例的测试。是否存在您的客户可以从Layer2单独调用开始的情况?如果有,请测试它。如果不是,你为什么要这样做?永远不要测试不使用的东西。这与编写“某人以后可能需要”的代码相同。浪费时间,别这样。

于 2013-07-04T15:36:21.570 回答
1

我倾向于松散地定义集成测试。如果我看到一个涵盖多个类之间交互的测试,我倾向于将其称为集成测试(对此还有另一个术语,但我现在想不起来了)。对我来说,这不仅仅是层集成。

这个想法是您应该根据关键场景和/或重要用例进行集成测试。从这些事情中,您将知道您的集成测试应该从哪里开始。不要为了创建集成测试而创建它。当用于不太重要的位时,它们往往需要太多的工作和维护。

Layer1在您的示例中,如果您有一个针对所有三层的集成测试,那么这充分涵盖了您的场景。Layer2 > Layer3正如之前的回答中提到的,除非您说其他东西可能会完全击中Layer2并绕过,否则无需刻意测试Layer1。但即使是这样,我也会从“其他东西”开始准备一个集成测试。仅Layer2 > Layer3当您有一个从Layer2.

于 2013-07-04T18:38:33.470 回答
0

集成测试有时很有用,但它们在性能和复杂性方面的成本很高。

IMO 它们不应该用于对系统行为的详尽验证,它们包含的移动部件的数量以及它们的行为组合的数量通常太高了。

我主要出于两个目的进行集成测试:

  • 在项目开始时,端到端测试是您应该编写的第一个测试,如果您想设置一个代表系统的一个简单的功能齐全的第一个小部分的步行骨架。

  • 测试您的系统和第三方代码之间的集成。或者,更准确地说,测试您编写的用于将系统与第三方模块隔离的适配器确实正确调用了这些第三方模块。

如果您正在努力了解所有不同的测试实践以及何时使用它们,那么“以测试为指导的面向对象软件的成长”一书包含非常有用的指南。

于 2013-07-05T12:35:38.103 回答