Плагин Spring Облачные контракты изменить исходный код - PullRequest
0 голосов
/ 19 января 2019

Я начал использовать Spring Cloud Contracts ('2.0.2.RELEASE') в моем проекте, и у меня следующая структура

src
|
  -- main
  -- test
  -- integrationTest
  -- contractTest

Когда я проверял свои контракты и базовый тестовый класс, он работал нормально. Я хочу переместить тесты контракта, которые я написал, в отдельный набор источников, источники contractTest. Однако это не сработает, так как задача плагина generateContractTests все равно будет выглядеть в тестовом наборе исходных кодов при попытке запуска.

Я внес следующие изменения в мой файл Gradle

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, однако я не уверен и не могу найти пример, чтобы плагин работал с этим другим набором исходных кодов

TLDR; Я хочу, чтобы мои контрактные тесты можно было запускать в другой папке

ОБНОВЛЕНИЕ - я не уверен, но я думаю, что это невозможно, как в плагине Gradle в файле " GenerateServerTestsTask.groovy ", который может указывать на то, что sourceSet жестко задан для тест по всему коду

project.sourceSets.test.groovy {
    project.logger.
            info("Registering ${getConfigProperties().generatedTestSourcesDir} as test source directory")
    srcDir getConfigProperties().getGeneratedTestSourcesDir()
}

1 Ответ

0 голосов
/ 19 июля 2019

Для дальнейшего использования я смог заставить его работать, создав пользовательскую задачу для отмены регистрации сгенерированных источников из тестового набора исходных кодов, чтобы они не компилировались compileTestJava и могли запускаться через мою собственную задачу contractTests.

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'
}

...