unit-testing - 集成测试/单元测试 : Doing too many integration tests?

标签 unit-testing mocking tdd integration-testing

我一直在设计大量单元测试,模拟每个单元具有的每个依赖项。这按预期工作。我现在需要进行集成测试。

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

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

  Layer1 > Layer2 > Layer3

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

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

  Layer2 > Layer3

这里没有模拟任何东西,它们是集成测试。

我看到的问题是,我从 Layer1 进行的集成测试实际上覆盖了 Layer2 的相同集成测试。

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

  Layer1 > Layer2 > Layer3

和第二层

  Layer2 > Layer3

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

  Layer1 > Layer2 > Layer3

这可能会涵盖 layer2 和 layer3 集成测试

  Layer2 > Layer3 

最佳答案

您应该测试您的应用程序中可实现的任何场景(通过客户/组件交互)。如果 Layer2 可以在没有 Layer1 干扰的情况下与 Layer3 交互 - 对其进行测试。

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

关于unit-testing - 集成测试/单元测试 : Doing too many integration tests?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17473752/

相关文章:

c# - 测试中的代码覆盖率

java - 如何验证以 Lambda 作为参数的 ThreadPool 执行方法

java - 如何模拟 HttpSession 并将其作为参数传递给与 session 一起使用的方法?

python - 无法在 python 中模拟 __subclasses__

c# - 我应该为参数异常编写测试吗?

tdd - TDD 中的测试装置(测试驱动开发)

unit-testing - Firebase 函数 TypeScript 单元测试 devDependencies

unit-testing - 我们可以为 AngularJS RouteProvider 编写单元测试吗?

python - 如何模拟使用别名导入的函数?

java - 如何从非模拟方法中获取结果?