【发布时间】:2017-11-25 06:01:14
【问题描述】:
【问题讨论】:
-
e2e 测试测试未模拟数据库连接的整个应用程序。在哪里作为单元测试模拟数据并测试特定功能
【问题讨论】:
因为 E2E 测试并不是单元测试的完美替代品。
特别是:
E2E 测试使用实际服务,而不是模拟。真正的数据库比数据库的内存模拟要慢得多。您还必须构建整个项目、设置种子数据等。
如果我必须等待很长时间才能结束测试运行,我可能会开始更频繁地跳过它。
E2E 测试告诉您整个场景都被破坏了,即“用户登录失败”。他们不会告诉您参与该场景的哪个组件的哪个部分损坏了。这使得很难判断是哪部分代码导致了测试失败。
您不能放心地拔出系统的组件并将其放到另一个系统中。在新环境中,无需为该组件运行单元测试。
如果您想为您的系统开发一个新的组件(单元)并在使用 TDD 的同时使用它,那么您在没有单元测试的情况下处于死胡同。单元测试和 TDD 齐头并进。
话虽如此:
这是完美测试套件的一个很好的说明,称为Testing Pyramid:
Google 测试博客中的这篇文章更详细地介绍了:Just Say No to More End-to-End Tests。虽然我不同意您不应该编写 E2E 测试,但它深入说明了每种测试的优缺点。
【讨论】:
单元测试是软件生命周期中提高其质量的重要方面。如果我们编写了测试用例,任何新开发人员都可以理解功能并根据条件检查不同的输出。它应该是流程的强制性部分。
【讨论】: