【问题标题】:Do SpringBoot's tests with MockMVC fit more in surefire (mvn test) or failsafe (mvn verify)?SpringBoot 的 MockMVC 测试更适合surefire(mvn test)还是failsafe(mvn verify)?
【发布时间】:2018-11-24 11:52:15
【问题描述】:

我正在评估使用每种方法的优缺点。

首先,我不确定 mockmvc 是否可以被视为真正的集成测试,因为它模拟了内部依赖项。

即使我使用带有真实测试请求的实际实例,我仍然在模拟我的外部依赖项,而且我不太确定真正的集成/验证测试的目的是测试环境,就好像它是真实的一样.

此外,将这个控制器测试放入验证中会使我的管道更长更慢,因为它会在不必要的包等之后被中断。

您认为在构建过程中优化这些工具的适当架构是什么?

我的一个想法是尝试像 2 个配置文件一样使用它: - 配置文件测试将在测试阶段使用模拟的外部依赖项执行所有 IT 测试 - 配置文件集成将在验证时使用真实的产品配置执行所有 IT 测试 但测试是一样的。

【问题讨论】:

    标签: unit-testing spring-boot integration-testing maven-surefire-plugin maven-failsafe-plugin


    【解决方案1】:

    根据我的个人经验,我们一直处于同样的困境中。我们最终使用了两种类型的测试: - 由surefire插件管理的单元测试 - 由故障安全插件管理的集成测试。 两者都在构建期间运行(但当然在不同的阶段)

    现在,关于控制器测试:

    我相信单元测试应该非常快,几十或几百个应该在 1 秒左右运行,因此它们也不应该有外部依赖并且运行在内存中(没有套接字、网络、数据库等) 这些测试应该由程序员在开发过程中的任何时候运行,可能在一分钟内运行 5 次,以确保小的重构不会破坏某些东西,例如。

    另一方面,控制器测试运行整个 spring 的事情,根据定义,这并不是那么快。至于外部依赖项,根据模拟 MVC 的配置,您甚至可以最终运行某种内部服务器来服务请求,因此它远非单元测试(IMO)。 这就是为什么我们决定运行那些带有故障安全插件并进行集成测试的原因。

    当然,如果使用得当,Spring 配置可以在测试之间被 Spring 缓存,但这个事实只能帮助和使集成测试运行得更快,但这并不意味着这种测试就是单元测试。

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 1970-01-01
      • 2018-10-20
      • 2018-09-26
      • 2021-09-08
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多