web-dev-qa-db-fra.com

gradle ne trouve pas le constructeur généré par lombok dans le test d'intégration

J'ai un test d'intégration qui a une classe interne avec des annotations lombok. Ça ressemble à ça

@Test(dataProvider = "jsonDiff")
public class JaversDiffIntegrationTest {

    public void shouldCompareEntities(Person input1, Person input2, String expectedJson)
        throws JSONException {
        Person p1 = new Person("p_id", "Jack");
        Person p2 = new Person("p_id", "Michael");
        ....
    }

    @TypeName("TestEntityPerson")
    @Data
    @AllArgsConstructor
    private class Person {
        private String id;
        private String name;
    }

Dans Idea j'ai activé le traitement des annotations et au moins il est capable de compiler. Lorsque j'essaie d'exécuter clean build via gradlew J'obtiens l'erreur

constructor Person in class JaversDiffIntegrationTest.Person cannot be applied to given types;
    Person p2 = new Person("p_id", "Michael");
                    ^
    required: no arguments
    found: String,String

Il semble qu'il ne voit pas les constructeurs générés par lombok. Ma build.gradle ressemble à ceci (j'utilise gradle5)

apply plugin: 'idea'

// TODO: move to integration-test.gradle
sourceSets {
    integrationTest {
        Java.srcDir 'src/testInteg/Java'
        resources.srcDir 'src/testInteg/resources'
    }
}

configurations {
    integrationTestImplementation.extendsFrom implementation
    integrationTestRuntimeOnly.extendsFrom runtimeOnly
}

task integrationTest(type: Test) {
    testClassesDirs = sourceSets.integrationTest.output.classesDirs
    classpath = sourceSets.integrationTest.runtimeClasspath + sourceSets.test.runtimeClasspath
    outputs.upToDateWhen { false }
    mustRunAfter test

    useTestNG() {
        suites 'src/testInteg/resources/testng.xml'
    }

    testLogging {
        showStandardStreams = true
    }
}

check.dependsOn integrationTest

dependencies {
    implementation "javax.validation:validation-api:1.1.0.Final"
    testImplementation "junit:junit:4.11"

    testImplementation "org.spockframework:spock-core:1.3-groovy-2.5"
    testImplementation "org.codehaus.groovy:groovy-all:2.5.6"

    implementation "org.javers:javers-core:5.3.2"
    annotationProcessor "org.projectlombok:lombok:1.18.6"
    implementation "org.projectlombok:lombok:1.18.6"

    integrationTestImplementation "org.testng:testng:6.14.3"
    integrationTestImplementation "org.skyscreamer:jsonassert:1.5.0"
    integrationTestImplementation "com.google.code.gson:gson:2.8.5"
    integrationTestImplementation "commons-io:commons-io:2.6"
}

Quel est le problème? Peut-être que j'ai un problème avec la configuration de integrationTest?

5
lapots

J'ai également trouvé le même problème et corrigé en ajoutant testAnnotationProcessor à côté de annotationProcessor à build.gradle:

annotationProcessor "org.projectlombok:lombok:${lombok_version}"
testAnnotationProcessor "org.projectlombok:lombok:${lombok_version}"
2
nordeen