Skip to content

测试 ​

本文说明 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-dispatchecshopx-dispatch/src/test/java/cn/shopex/ecshopx/dispatch/integration/HfpayRefundSuccessEventPublishPortImplTest.java
ecshopx-dispatchecshopx-dispatch/src/test/java/cn/shopex/ecshopx/dispatch/integration/HfpayDistributorWithdrawSuccessEventPublishPortImplTest.java
ecshopx-commonecshopx-common/src/test/java/cn/shopex/ecshopx/common/openapi/OpenapiSignSupportTest.java
ecshopx-openapiecshopx-openapi/src/test/java/cn/shopex/ecshopx/openapi/thirdapi/OpenapiMethodRegistryTest.java
ecshopx-bootstrapecshopx-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

编写新测试的建议 ​

  1. 与被测类同包或 mirror 包路径,文件名 *Test.java;
  2. 优先 单元测试 Mock Port / Mapper / 外部 HTTP;需要 Spring 上下文时再使用 @SpringBootTest(启动慢,慎用全量上下文);
  3. dispatch / 事件类测试可参考 *DispatchPublishProbeTest、*EventPublishPortImplTest 命名与断言方式;
  4. 改完逻辑后至少跑 所在模块 ./mvnw -pl <module> -am test,再提交。

与本地联调的关系 ​

  • ./mvnw test 验证 逻辑回归,不替代 spring-boot:run + curl 的 HTTP 联调(见 调试、快速入门);
  • 数据库相关测试若依赖 H2 / Testcontainers,以各模块现有测试为准,勿假设全局统一测试库配置。

相关章节 ​