Gradle Зависимость тестирования

У меня есть два проекта, проект A и проект B. Оба они написаны в groovy и используют gradle в качестве своей системы сборки.

Проект A требует проекта B. Это выполняется как для кода компиляции, так и для проверки.

Как настроить, чтобы тестовые классы проекта A имели доступ к тестовым классам проекта B?

Ответ 1

Вы можете предоставить тестовые классы через конфигурацию "тесты", а затем определить зависимость testCompile от этой конфигурации.

У меня есть этот блок для всех java-проектов, который содержит все тестовые коды:

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

configurations {
    tests
}

artifacts {
    tests testJar
}

Затем, когда у меня есть тестовый код, я хочу получить доступ к проектам, которые я использую

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

Это для Java; Я предполагаю, что он должен работать и для groovy.

Ответ 3

Это работает для меня (Java)

// use test classes 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.classes.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 classes 
testRuntime project(":spring-common")

Ответ 4

Вышеупомянутое решение работает, но не для последней версии 1.0-rc3 из Gradle.

     task testJar(type: Jar, dependsOn: testClasses) {
       baseName = "test-${project.archivesBaseName}"

       // in the latest version of Gradle 1.0-rc3
       // sourceSets.test.classes no longer works
       // It has been replaced with 
       // sourceSets.test.output

       from sourceSets.test.output
     }

Ответ 5

Для Android в последней версии gradle (я в настоящее время на 2.14.1) вам просто нужно добавить ниже в Project B, чтобы получить все тестовые зависимости из проекта A.

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

Ответ 6

Для Gradle 1.5

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