2014-12-15 12 views
7

Sto cercando di ottenere Gradle (2.1) e IntelliJ (14.0.2) per riprodurre correttamente. Nello specifico, ho importato un progetto Gradle di esempio contenente un set sorgente separato per i test di integrazione in IntelliJ.Sorgente personalizzata impostata in Gradle importata in IntelliJ 14

Il progetto si integra utilizzando Gradle sulla riga di comando e sono in grado di eseguire correttamente i test di integrazione. D'altra parte, quando si esegue all'interno di IntelliJ, ho due problemi:

1) La compilazione all'interno di IntelliJ non riesce, a causa di una dipendenza nel test di integrazione a una libreria di terze parti (commons-collections) che non riesce a risolvere.

2) Se rimuovo la dipendenza sopra e compile, non sono in grado di eseguire il test di integrazione in IntelliJ. Ottengo il seguente messaggio di errore:

struttura

No tests found for given includes: [org.gradle.PersonIntegrationTest.canConstructAPersonWithAName]

Il file è simile al seguente:

src 
    integration-test 
    java 
    resources 
    main 
    java 
    resources 
    test 
    java 
    resources 
build.gradle 

E build.gradle:

apply plugin: 'java' 

repositories { 
    mavenCentral() 
} 

sourceSets { 
    integrationTest { 
     java.srcDir file('src/integration-test/java') 
     resources.srcDir file('src/integration-test/resources') 
    } 
} 

dependencies { 
    testCompile 'junit:junit:4.11' 
    integrationTestCompile 'commons-collections:commons-collections:3.2' 
    integrationTestCompile sourceSets.main.output 
    integrationTestCompile configurations.testCompile 
    integrationTestCompile sourceSets.test.output 
    integrationTestRuntime configurations.testRuntime 
} 

task integrationTest(type: Test, dependsOn: jar) { 
    testClassesDir = sourceSets.integrationTest.output.classesDir 
    classpath = sourceSets.integrationTest.runtimeClasspath 
    systemProperties['jar.path'] = jar.archivePath 
} 

check.dependsOn integrationTest 

Tutte le idee su come fare questo lavoro sarebbe molto apprezzato.

Il progetto completo di esempio Gradle è disponibile nella distribuzione Gradle, sotto Samples/java/withIntegrationTests

risposta

7

Dovete dire IDEA per mappare le voci dalla vostra configurazione integrationTest nel progetto come dipendenze TEST. Non sono sicuro se sia necessario aggiungere anche le directory radice di origine. La parte importante è:

idea { 
    module { 
    //and some extra test source dirs 
    testSourceDirs += file('some-extra-test-dir') 
    generatedSourceDirs += file('some-extra-source-folder') 
    scopes.TEST.plus += [ configurations.integrationTest ] 
    } 
} 

Più è descritto in http://www.gradle.org/docs/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html


modifiche in modo da riflettere i commenti di Daniel: generatedSourceDirs è è 2.2+ Gradle. Per impostare il compito di prova che verrà utilizzato come compito

task integTest(type: Test) { 
    description = 'Runs the integration tests.' 
    group = 'verification' 
    testClassesDir = sourceSets.integTest.output.classesDir 
    classpath = sourceSets.integTest.runtimeClasspath 
    reports.junitXml.destination = file("${project.testResultsDir}/$name") 
    reports.html.destination = file("${project.reporting.baseDir}/$name") 
    shouldRunAfter test 
} 
check.dependsOn integTest 
+0

Grazie, ma non posso farlo funzionare. Ottengo il seguente errore: Impossibile trovare la proprietà 'generateSourceDirs' su org.gradle.plugins.ide.idea.model.IdeaModule_Decorated. Inoltre, dovrei aggiungere una configurazione di integrationTest affinché funzioni. – Daniel

+0

L'ultima frase nel mio commento precedente doveva terminare con un punto interrogativo, cioè dovrei aggiungere una configurazione 'integrationTest' perché funzioni? – Daniel

Problemi correlati