From e5991718e66f2df92b8cbf56875de90d925eca4f Mon Sep 17 00:00:00 2001 From: hongawen <83944980@qq.com> Date: Mon, 29 Jun 2026 14:08:26 +0800 Subject: [PATCH] =?UTF-8?q?test(mq-starter):=20driver=20autoconfig=20?= =?UTF-8?q?=E5=8A=A0=20@AutoConfigureBefore=20=E6=B3=A8=E8=A7=A3=E5=A5=91?= =?UTF-8?q?=E7=BA=A6=E6=8A=A4=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rocket / RedisStream driver autoconfig 各加一个护栏测试,断言 @AutoConfigureBefore(MqCoreAutoConfiguration) 注解存在——防止重构误删导致 core 在 driver 前装配、MqTemplate/MqListenerRegistry 不装配的回归(最终 review I1)。 以注解契约守护、不 refresh context(规避本模块 spring 版本不一致:rocketmq-spring 2.2.3 与父 pom spring-boot 2.3.12 的 spring-core 缺 ApplicationStartup);真实装配 结果由 cn-data-platform MqSliceWiringTest 在正确 spring 版本下覆盖。 Co-Authored-By: Claude Opus 4.8 (1M context) --- .../redis/RedisStreamMqDriverWiringTest.java | 33 +++++++++++++++++ .../rocketmq/RocketMqDriverWiringTest.java | 37 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 mq-starter-redis-stream/src/test/java/com/njcn/mq/driver/redis/RedisStreamMqDriverWiringTest.java create mode 100644 mq-starter-rocketmq/src/test/java/com/njcn/mq/driver/rocketmq/RocketMqDriverWiringTest.java diff --git a/mq-starter-redis-stream/src/test/java/com/njcn/mq/driver/redis/RedisStreamMqDriverWiringTest.java b/mq-starter-redis-stream/src/test/java/com/njcn/mq/driver/redis/RedisStreamMqDriverWiringTest.java new file mode 100644 index 0000000..3e2663a --- /dev/null +++ b/mq-starter-redis-stream/src/test/java/com/njcn/mq/driver/redis/RedisStreamMqDriverWiringTest.java @@ -0,0 +1,33 @@ +package com.njcn.mq.driver.redis; + +import com.njcn.mq.autoconfig.MqCoreAutoConfiguration; +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * 装配顺序回归护栏(mq-starter 自身)。 + * + *

{@link RedisStreamMqDriverAutoConfiguration} 必须声明 + * {@code @AutoConfigureBefore(MqCoreAutoConfiguration.class)}:否则真实 Spring Boot 按类名字母序 + * 处理 autoconfig,{@code com.njcn.mq.autoconfig.*}(core) 先于 {@code com.njcn.mq.driver.*}(driver), + * core 的 {@code @ConditionalOnBean(MqDriver)} 在 driver bean 注册前求值失败, + * {@code MqTemplate} / {@code MqListenerRegistry} 不装配。 + * + *

以注解契约守护,真实装配结果由 cn-data-platform 的 {@code MqSliceWiringTest} + * (真实 autoconfig 顺序)覆盖。删掉 @AutoConfigureBefore 本测试即 RED。 + */ +class RedisStreamMqDriverWiringTest { + + @Test + void declaresAutoConfigureBeforeCore() { + AutoConfigureBefore ann = RedisStreamMqDriverAutoConfiguration.class.getAnnotation(AutoConfigureBefore.class); + assertThat(ann) + .as("RedisStreamMqDriverAutoConfiguration 必须声明 @AutoConfigureBefore,使 driver 先于 core 装配") + .isNotNull(); + assertThat(ann.value()) + .as("@AutoConfigureBefore 必须指向 MqCoreAutoConfiguration") + .contains(MqCoreAutoConfiguration.class); + } +} diff --git a/mq-starter-rocketmq/src/test/java/com/njcn/mq/driver/rocketmq/RocketMqDriverWiringTest.java b/mq-starter-rocketmq/src/test/java/com/njcn/mq/driver/rocketmq/RocketMqDriverWiringTest.java new file mode 100644 index 0000000..93547b4 --- /dev/null +++ b/mq-starter-rocketmq/src/test/java/com/njcn/mq/driver/rocketmq/RocketMqDriverWiringTest.java @@ -0,0 +1,37 @@ +package com.njcn.mq.driver.rocketmq; + +import com.njcn.mq.autoconfig.MqCoreAutoConfiguration; +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * 装配顺序回归护栏(mq-starter 自身)。 + * + *

{@link RocketMqDriverAutoConfiguration} 必须声明 + * {@code @AutoConfigureBefore(MqCoreAutoConfiguration.class)}:否则真实 Spring Boot 按类名字母序 + * 处理 autoconfig,{@code com.njcn.mq.autoconfig.*}(core) 先于 {@code com.njcn.mq.driver.*}(driver), + * core 的 {@code @ConditionalOnBean(MqDriver)} 在 driver bean 注册前求值失败, + * {@code MqTemplate} / {@code MqListenerRegistry} 不装配,整个 mq-starter 在真实应用中失效。 + * + *

这里以注解契约守护(不 refresh context):本模块单测 classpath 因 + * {@code rocketmq-spring-boot-starter:2.2.3} 与父 pom spring-boot 2.3.12 的 spring 版本不一致 + * (缺 {@code spring-core} 5.3 的 ApplicationStartup),无法可靠 refresh context。 + * 真实装配结果(真实 autoconfig 顺序下 MqTemplate/MqListenerRegistry 确实装配)由 + * cn-data-platform 的 {@code MqSliceWiringTest} 在正确 spring 版本下覆盖。删掉 @AutoConfigureBefore + * 本测试即 RED。 + */ +class RocketMqDriverWiringTest { + + @Test + void declaresAutoConfigureBeforeCore() { + AutoConfigureBefore ann = RocketMqDriverAutoConfiguration.class.getAnnotation(AutoConfigureBefore.class); + assertThat(ann) + .as("RocketMqDriverAutoConfiguration 必须声明 @AutoConfigureBefore,使 driver 先于 core 装配") + .isNotNull(); + assertThat(ann.value()) + .as("@AutoConfigureBefore 必须指向 MqCoreAutoConfiguration") + .contains(MqCoreAutoConfiguration.class); + } +}