使用 maven 故障安全插件分叉执行 SpringBootTest - 它开箱即用吗?
Forked execution of SpringBootTest's with maven failsafe plugin - does it work out of the box?
假设您有一个 Spring-Boot 应用程序,并且在此应用程序中还有一堆集成测试,这些测试用 @SpringBootTest
和 运行 注释, SpringRunner
class。
它们由 maven failsafe plugin 调用,默认情况下不会以任何方式并行化测试。测试全部 运行 没有任何问题。
如果您使用 forkCount
的故障安全功能,会有什么变化 - 您可以期望测试执行开箱即用吗?你需要调整一些代码吗?您需要注意什么可能不允许这些集成测试通过此插件在分叉的 "parallel" 环境中 运行?
根据我的理解,故障安全插件将创建 forkCount-many JVM,并且在每个 JVM 中执行一些集成测试。这听起来没什么可做的,你不需要做任何线程安全的事情,你不需要将 Singleton-beans 变成 ThreadScoped beans 或任何东西——因为拥有多个 JVM 的过程应该已经创建了多个这样的 beans。
对不起,如果这个问题看起来很奇怪,我试着研究这个问题,但我找不到答案。
来自 Maven 文档:
The parameter forkCount defines the maximum number of JVM processes
这意味着测试将 运行 在它自己的进程中,因此您将有单独的 Spring 启动实例。所以你真的不必关心线程安全。
但是你要关心内存消耗。
假设您有一个 Spring-Boot 应用程序,并且在此应用程序中还有一堆集成测试,这些测试用 @SpringBootTest
和 运行 注释, SpringRunner
class。
它们由 maven failsafe plugin 调用,默认情况下不会以任何方式并行化测试。测试全部 运行 没有任何问题。
如果您使用 forkCount
的故障安全功能,会有什么变化 - 您可以期望测试执行开箱即用吗?你需要调整一些代码吗?您需要注意什么可能不允许这些集成测试通过此插件在分叉的 "parallel" 环境中 运行?
根据我的理解,故障安全插件将创建 forkCount-many JVM,并且在每个 JVM 中执行一些集成测试。这听起来没什么可做的,你不需要做任何线程安全的事情,你不需要将 Singleton-beans 变成 ThreadScoped beans 或任何东西——因为拥有多个 JVM 的过程应该已经创建了多个这样的 beans。
对不起,如果这个问题看起来很奇怪,我试着研究这个问题,但我找不到答案。
来自 Maven 文档:
The parameter forkCount defines the maximum number of JVM processes
这意味着测试将 运行 在它自己的进程中,因此您将有单独的 Spring 启动实例。所以你真的不必关心线程安全。
但是你要关心内存消耗。