测试
本文说明 ecshopx-java 单元 / 集成测试 的目录约定与常用 Maven 命令。测试依赖为各模块 pom.xml 中的 spring-boot-starter-test(JUnit 5 + Mockito)。
测试代码放哪
每个业务 Maven Module 下遵循:
text
ecshopx-<module>/src/test/java/cn/shopex/ecshopx/<module>/...示例(真实存在的测试类):
| 模块 | 测试类路径 |
|---|---|
ecshopx-dispatch | ecshopx-dispatch/src/test/java/cn/shopex/ecshopx/dispatch/integration/HfpayRefundSuccessEventPublishPortImplTest.java |
ecshopx-dispatch | ecshopx-dispatch/src/test/java/cn/shopex/ecshopx/dispatch/integration/HfpayDistributorWithdrawSuccessEventPublishPortImplTest.java |
ecshopx-common | ecshopx-common/src/test/java/cn/shopex/ecshopx/common/openapi/OpenapiSignSupportTest.java |
ecshopx-openapi | ecshopx-openapi/src/test/java/cn/shopex/ecshopx/openapi/thirdapi/OpenapiMethodRegistryTest.java |
ecshopx-bootstrap | ecshopx-bootstrap/src/test/java/cn/shopex/ecshopx/config/MultiRedisConfigLettuceFactoryTest.java |
ecshopx-dispatch 模块体量小、测试聚焦 DispatchFacade 委托,适合作为 最小示例 理解项目测试风格。
示例:HfpayRefundSuccessEventPublishPortImplTest
java
@ExtendWith(MockitoExtension.class)
class HfpayRefundSuccessEventPublishPortImplTest {
@Test
@DisplayName("event:294: publish delegates to DispatchFacade with sync event defaults")
void publish_delegatesToDispatchFacade_withEvent294AndSyncDefaults() {
DispatchFacade dispatchFacade = mock(DispatchFacade.class);
HfpayRefundSuccessEventPublishPortImpl port =
new HfpayRefundSuccessEventPublishPortImpl(dispatchFacade);
port.publishSyncOnGatewayRefundSuccess("62001", 52001L);
verify(dispatchFacade).publishEvent(/* ... */);
}
}特点:纯单元测试、Mock 外部依赖、用 @DisplayName 标明业务事件编号,与 dispatch 事件命名对齐。
运行测试
在仓库根目录 ecshopx-java 执行(使用项目自带 wrapper):
单模块(含依赖模块 -am)
bash
./mvnw -pl ecshopx-dispatch -am test-pl ecshopx-dispatch:只构建/测试ecshopx-dispatch及其 reactor 顺序;-am(also-make):同时构建该模块依赖的上游模块(如ecshopx-common)。
单个测试类
bash
./mvnw -pl ecshopx-dispatch -am test \
-Dtest=HfpayRefundSuccessEventPublishPortImplTest其他常用模块
bash
./mvnw -pl ecshopx-openapi -am test
./mvnw -pl ecshopx-goods -am test
./mvnw -pl ecshopx-bootstrap -am test全量测试(耗时较长,CI 或发版前使用):
bash
./mvnw test编写新测试的建议
- 与被测类同包或 mirror 包路径,文件名
*Test.java; - 优先 单元测试 Mock Port / Mapper / 外部 HTTP;需要 Spring 上下文时再使用
@SpringBootTest(启动慢,慎用全量上下文); - dispatch / 事件类测试可参考
*DispatchPublishProbeTest、*EventPublishPortImplTest命名与断言方式; - 改完逻辑后至少跑 所在模块
./mvnw -pl <module> -am test,再提交。
与本地联调的关系
./mvnw test验证 逻辑回归,不替代spring-boot:run+ curl 的 HTTP 联调(见 调试、快速入门);- 数据库相关测试若依赖 H2 / Testcontainers,以各模块现有测试为准,勿假设全局统一测试库配置。
