Dipendenza dal Gradle Test

Ho due progetti, il progetto A e il Progetto B. Entrambi sono scritti in groovy e usano gradle come loro sistema di compilazione.

Il progetto A richiede il progetto B. Ciò vale sia per il codice di compilazione che di test.

Come posso configurare che le classi di test del progetto A abbiano accesso alle classi di test del progetto B?

È ansible esporre le classi di test tramite una configurazione di ‘test’ e quindi definire una dipendenza testCompile su tale configurazione.

Ho questo blocco per tutti i progetti java, che riempie tutto il codice di test:

task testJar(type: Jar, dependsOn: testClasses) { baseName = "test-${project.archivesBaseName}" from sourceSets.test.output } configurations { tests } artifacts { tests testJar } 

Poi quando ho il codice di prova voglio accedere tra i progetti che uso

 dependencies { testCompile project(path: ':aProject', configuration: 'tests') } 

Questo è per Java; Suppongo che dovrebbe funzionare anche per groovy.

Questa è una soluzione più semplice che non richiede un file jar intermedio:

 dependencies { ... testCompile project(':aProject').sourceSets.test.output } 

C’è più discussione in questa domanda: dipendenze di test multi-progetto con gradle

Questo funziona per me (Java)

 // use test classs from spring-common as dependency to tests of current module testCompile files(this.project(':spring-common').sourceSets.test.output) testCompile files(this.project(':spring-common').sourceSets.test.runtimeClasspath) // filter dublicated dependency for IDEA export def isClassesDependency(module) { (module instanceof org.gradle.plugins.ide.idea.model.ModuleLibrary) && module.classs.iterator()[0].url.toString().contains(rootProject.name) } idea { module { iml.whenMerged { module -> module.dependencies.removeAll(module.dependencies.grep{isClassesDependency(it)}) module.dependencies*.exported = true } } } ..... // and somewhere to include test classs testRuntime project(":spring-common") 

La soluzione di cui sopra funziona, ma non per l’ultima versione 1.0-rc3 di Gradle.

  task testJar(type: Jar, dependsOn: testClasses) { baseName = "test-${project.archivesBaseName}" // in the latest version of Gradle 1.0-rc3 // sourceSets.test.classs no longer works // It has been replaced with // sourceSets.test.output from sourceSets.test.output } 

Per Android sull’ultima versione gradle (sono attualmente su 2.14.1) devi solo aggiungere il sotto nel Progetto B per ottenere tutte le dipendenze di test dal Progetto A.

 dependencies { androidTestComplie project(path: ':ProjectA') } 

Per Gradle 1.5

 task testJar(type: Jar, dependsOn: testClasses) { from sourceSets.test.java classifier "tests" }