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.
Ответ 2
Это более простое решение, которое не требует промежуточного файла jar:
dependencies {
...
testCompile project(':aProject').sourceSets.test.output
}
В этом вопросе больше обсуждений: Многострановые тестовые зависимости с gradle
Ответ 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"
}