从默认 "test" 目录更改 Spring 合约的合约和基础 class 测试

Changing from the default "test" directory for Spring Contract's contracts and base class tests

我已尝试更改基本测试 classes 的默认测试目录名称,如下所示:

旧:

bignibou-server/src/test/java/com/bignibou/signup

新:

bignibou-server/src/contracts/java/com/bignibou/signup

这是我的合约所在的目录:

新:

bignibou-server/src/contracts/resources/contracts/signup

这是我的 gradle 配置:

contracts {
    packageWithBaseClasses = 'com.bignibou'
    baseClassMappings {
        baseClassMapping(".*signup*.", "com.bignibou.signup.SignupBase")
    }
}

我对 合同测试和集成测试 使用相同的 gradle 配置。参见:

sourceSets {

    integrationTest {
        java.srcDirs = ['src/it/java', 'src/contracts/java']
        resources.srcDirs = ['src/it/resources', 'src/contracts/resources']
        compileClasspath = sourceSets.main.output + configurations.testRuntime
        runtimeClasspath = output + compileClasspath
    }
}

但是,由于我将基础 class 测试和合同从 test 目录中移出,合同测试也不会 运行...

编辑

查找文档后发现contractsDslDir属性可以这样使用:

contracts {
    packageWithBaseClasses = 'com.bignibou'
    contractsDslDir = new File("${project.rootDir}/src/contracts/resources/contracts")
    baseClassMappings {
        baseClassMapping(".*signup*.", "com.bignibou.signup.SignupBase")
    }
}

但是,测试仍然没有运行...我还缺少什么?

以下是我尝试 运行 测试的方法:

./gradlew clean check

编辑 2:

我能够使用 contractsDslDir 的以下值找到我的合同 Spring Cloud Contract:

contractsDslDir = new File("./src/contracts/resources/contracts")

现在的问题是我的测试找不到测试基地:

> Task :bignibou-server:compileTestJava FAILED
/Users/julien/Documents/projects/bignibou/bignibou-server/build/generated-test-sources/contracts/com/bignibou/SignupTest.java:3: error: package com.bignibou.signup does not exist
import com.bignibou.signup.SignupBase;
                          ^
/Users/julien/Documents/projects/bignibou/bignibou-server/build/generated-test-sources/contracts/com/bignibou/SignupTest.java:20: error: cannot find symbol
public class SignupTest extends SignupBase {
                                ^
  symbol: class SignupBase
2 errors

FAILURE: Build failed with an exception.

编辑 3:很奇怪:Spring Cloud Contracts 似乎仍然绑定到 test gradle 任务(而不是我的自定义 integrationTest 一)...

当我 运行 ./gradlew clean integrationTest 甚至没有搜索合同...但是当我 运行 ./gradlew clean test 我得到上面的错误表明 Spring Cloud Contract 正在寻找基地 class 但没有找到。

如何告诉 Spring Cloud Contract 绑定到我的自定义 integrationTest gradle 任务?

暂时不支持。如果找不到问题,请随意查找问题或创建一个新问题