即使代码已经被集成测试覆盖,我是否应该通过单元测试来覆盖代码?

Jur*_*ass 6 integration-testing unit-testing mocking use-case

假设我们有一些带有 REST API 的 Web 服务,为了便于说明,我们有一些数据库工作。在我看来,测试此应用程序的最基本方法是集成测试,即从 REST API 顶部对其进行测试,以验证其整体正常工作。但是使用一些模拟技术的单元测试怎么样?在专业开发中(当然人力资源有限)是否真的有必要用单元测试来覆盖代码,即使它已经被集成测试覆盖了?

谢谢

Rog*_*rio 5

好问题。当然,答案将基于意见,但希望它们基于实际的现实经验。

就我而言,多年来我已经编写了数千个 JUnit/TestNG 测试,并且我碰巧为 Java 开发了一个高级测试库(模拟 + 代码覆盖率 + 集成测试)。

因此,IMO,当您已经拥有良好的集成测试套件时,编写单元测试是没有必要的,也没有效率。

当然,集成测试确实需要更长的时间来运行,但它们仍然应该足够快,以便开发人员不会阻止运行它们。重要的是:开发人员是否仍能高效地工作运行一项测试、一个测试类等,那就没问题了。因此,避免使测试执行太慢/痛苦的集成测试方法(例如,Selenium)。

针对集成测试的另一个批评是,它们使找出测试失败的根本原因变得更加困难。不过,这在实践中还不是一个足够大的问题。

Martin Fowler 在他的单元测试文章中也提出了同样的两点。