You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Contract生产者端未生成契约测试的问题排查

Spring Cloud Contract Java契约测试未生成问题解决方案

问题核心

使用Java编写Spring Cloud Contract契约,Gradle构建时未生成对应测试方法,仅生成空的RestTest类;执行./gradlew clean build -x test时触发IllegalStateException: No tests were found异常。

修复步骤

1. 修正Contracts配置冲突与模式指定

你的build.gradle中重复设置了contractsDslDir,且未明确指定Java契约模式,导致插件无法正确识别Java契约类。修改contracts块配置:

contracts {
    contractsDslDir = new File(project.rootDir, "src/test/java/contracts")
    testFramework = "JUNIT"
    packageWithBaseClasses = 'com.epam.training.microservicefoundation.resourceservice'
    // 指定使用Java契约模式
    contractsMode = "java"
    baseClassMappings {
        // 调整匹配规则,确保契约类能关联到基类
        baseClassMapping(".*", "com.epam.training.microservicefoundation.resourceservice.RestBase")
    }
}

2. 规范契约类命名与结构

Java契约类需符合Spring Cloud Contract识别规则,建议类名以Contract结尾,同时确保契约类的包路径能被baseClassMapping匹配:

// 重命名为GetResourceContract.java(可选但更规范)
public class GetResourceContract implements Supplier<Contract> {
    @Override
    public Contract get() {
        return Contract.make(contract -> {
            contract.request(request -> {
                request.method("GET");
                request.url("/api/v1/resources/123");
                request.headers(headers -> headers.accept(ResourceType.MP3.getMimeType()));
            });
            contract.response(response -> {
                response.status(response.OK());
                // 修正资源路径为classpath格式
                response.body(response.fileAsBytes("classpath:files/mpthreetest.mp3"));
                response.headers(headers -> headers.contentType(ResourceType.MP3.getMimeType()));
            });
        });
    }
}

3. 绑定契约测试生成任务

确保contractTest任务依赖测试生成任务,在build.gradle中添加:

contractTest.dependsOn generateContractTests

4. 验证资源文件路径

确认mpthreetest.mp3文件位于src/test/resources/files/目录下,避免因文件缺失导致测试生成失败。

5. 手动触发测试生成验证

执行命令生成测试类,检查输出目录:

./gradlew generateContractTests

查看build/generated-test-sources/contractTest/java下的RestTest类,此时应生成对应GET请求的测试方法。

额外注意事项

  • 确保Spring Cloud Contract Gradle插件与Spring Boot版本兼容,使用官方推荐版本组合
  • 基类中的@BeforeEach需为JUnit 5的org.junit.jupiter.api.BeforeEach注解,适配useJUnitPlatform()配置

内容的提问来源于stack exchange,提问作者Yusuf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:10:18