使用MockMVC进行SpringBoot的测试是否更适合surefire(MVN测试)或故障保险(MVN验证)?

时间:2018-11-24 11:52:16

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

我正在评估使用每种方法的好处和缺点。

首先,我不确定是否可以将嘲笑mvcvc视为真正的集成测试,因为它模拟了内部依赖性。

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

此外,对该控制器进行测试以使我的管道变长和变慢,因为在不必要的包装等之后它将被中断。

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

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

1 个答案:

答案 0 :(得分:1)

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

现在,关于控制器测试:

我认为单元测试应该很快完成,数十或数百个单元测试应在1秒内运行,因此它们也不应具有外部依赖性,并且应在内存中运行(无套接字,网络,数据库等)。 例如,为了确保小的重构不会破坏某些内容,程序员应该在开发过程中的任何时间(可能在一分钟内进行5次)运行这些测试。

另一方面,控制器测试运行整个弹簧过程,按照定义,这并不是那么快。至于外部依赖关系,根据模拟MVC的配置,您甚至可以运行某种内部服务器来满足请求,因此它(IMO)远非单元测试。 因此,我们决定使用故障保护插件运行它们并进行集成测试。

当然,如果配置正确使用,Spring可以在两次测试之间缓存它们,但这实际上只能帮助并使集成测试运行得更快,但这并不意味着这种测试是单元测试。 / p>