首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring cloud contracts plugin change sourceset

Spring cloud contracts plugin change sourceset
EN

Stack Overflow用户
提问于 2019-01-19 23:08:20
回答 1查看 825关注 0票数 1

我已经开始在我的项目中使用Spring Cloud Contracts ('2.0.2.RELEASE'),我有以下结构

代码语言:javascript
复制
src
|
  -- main
  -- test
  -- integrationTest
  -- contractTest

当我测试我的契约和我的基本测试类时,它运行得很好。我想将我编写的契约测试移到一个单独的源集,即contractTest源中。然而,这将不起作用,因为插件generateContractTests任务在尝试运行时仍然会在测试源集中查找。

我对Gradle文件进行了以下更改

代码语言:javascript
复制
task contractTest(type: Test) {
    description = 'Runs contract tests.'
    group = 'verification'

    testClassesDirs = sourceSets.contractTest.output.classesDirs
    classpath = sourceSets.contractTest.runtimeClasspath
    shouldRunAfter integrationTest
}
configurations {
    contractTestImplementation.extendsFrom implementation
    contractTestRuntimeOnly.extendsFrom runtimeOnly
}
sourceSets {
    contractTest {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}
contracts {
//    testFramework = 'JUNIT5'
    packageWithBaseClasses = 'com.test.testapi.contracts'
    contractsDslDir = new File("${project.rootDir}/src/contractTest/resources/contracts/")
}
contractTestImplementation 'org.codehaus.groovy:groovy-all:2.4.6'
contractTestImplementation 'org.springframework.cloud:spring-cloud-starter-contract-verifier'
contractTestImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api'
contractTestImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine'

我认为我需要设置约定插件的属性contractDependency,但是,我不确定也找不到一个示例来让插件与这个不同的源集一起工作

我希望能够在不同的文件夹中运行我的合约测试

更新-我不确定,但我认为这是不可能的,因为在"GenerateServerTestsTask.groovy“文件中的Gradle插件中有以下内容,这似乎意味着sourceSet是硬编码的,可以在整个代码中进行测试

代码语言:javascript
复制
project.sourceSets.test.groovy {
    project.logger.
            info("Registering ${getConfigProperties().generatedTestSourcesDir} as test source directory")
    srcDir getConfigProperties().getGeneratedTestSourcesDir()
}
EN

回答 1

Stack Overflow用户

发布于 2019-07-19 20:37:50

为了便于将来参考,我创建了一个自定义任务,从测试源集取消注册生成的源代码,这样它们就不会被compileTestJava编译,而可以通过我自己的contractTests任务运行。

代码语言:javascript
复制
sourceSets {
     contractTest {
        java {
            compileClasspath += sourceSets.main.output + sourceSets.test.output
            runtimeClasspath += sourceSets.main.output + sourceSets.test.output
            srcDir file('src/contractTest/java')
            srcDirs += file("${buildDir}/generated-contract-sources/")
        }
        resources.srcDir file('src/contractTest/resources')
    }
}

task deregisterContractTestSources() {
    doLast {
        project.sourceSets.test.java {
            project.logger.info('Removing any *Spec classes from the test sources')
            exclude '**/*Spec*'
        }
    }
}
compileTestJava.dependsOn deregisterContractTestSources

task contractTests(type: Test) {
    description = 'Runs contract tests'
    group = 'verification'

    testClassesDirs = sourceSets.contractTest.output.classesDirs
    classpath = sourceSets.contractTest.runtimeClasspath
}

contracts {
    baseClassForTests = 'com'
    generatedTestSourcesDir = file("${buildDir}/generated-contract-sources")
    generatedTestResourcesDir = file("${buildDir}/generated-contract-resources/")
    testFramework = "JUNIT5"
    contractsDslDir = new File("${projectDir}/src/contractTest/resources/contracts/")
    nameSuffixForTests = 'Spec'
    basePackageForTests = 'com'
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54268428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档