如果我已经进行了E2E测试,为什么要编写单元测试

时间:2017-11-25 06:01:14

标签: unit-testing end-to-end

如果我们已经在进行E2E (end-to-end)测试,我们还需要编写单元测试吗?

考虑到我们正在进行端到端测试中的所有功能测试,两者的优缺点是什么?

2 个答案:

答案 0 :(得分:7)

因为E2E测试不是单元测试的完美替代品。

特别是:

它们运行缓慢

E2E测试使用实际服务,而不是模拟。真正的数据库比数据库的内存模拟慢得多。您还必须构建整个项目,设置种子数据等。

如果我需要等待很长时间才能结束测试,我可能会更频繁地跳过它。

他们没有孤立失败

E2E测试告诉您整个场景已被破坏,即用户登录失败'他们没有告诉您参与该场景的哪个组件部分被破坏了。这使得更难判断代码的哪一部分导致测试失败。

他们损害了可重用性

您无法插入系统组件并放心地将其放入另一个系统中。在新环境中,没有为该组件运行的单元测试。

您无法按单位TDD

进行操作

如果你想为你的系统开辟一个新的组件(单元)并在你使用TDD时使用它,你就没有单元测试就处于死路。单元测试和TDD齐头并进。

话虽如此:

  • 如果您的资源允许,同时进行E2E测试单元测试是您的目标。
  • 只进行E2E测试总比没有测试好。

以下是完美测试套件的精彩插图,称为Testing Pyramid

Testing Pyramid illustration

Google测试博客中的这篇文章详细介绍了Just Say No to More End-to-End Tests。虽然我不同意你不应该写E2E测试,但它深入地说明了每种测试的优缺点。

答案 1 :(得分:-3)

单元测试是软件生命周期的重要方面,以提高其质量。如果我们编写了测试用例,任何新开发人员都可以理解该功能并根据条件检查不同的输出。它应该是该过程的强制性部分。