Зависимость Теста Gradle
У меня есть два проекта, проект A и проект B. Оба написаны в groovy и используют gradle в качестве своей системы сборки.
для проекта A требуется проект B. Это справедливо как для компиляции, так и для тестового кода.
Как я могу настроить, что тестовые классы проекта A имеют доступ к тестовым классам проекта B?
6 ответов:
вы можете предоставить тестовые классы через конфигурацию "тесты", а затем определить зависимость testCompile от этой конфигурации.
у меня есть этот блок для всех java-проектов, который jars весь тестовый код:
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.
Это более простое решение, которое не требует промежуточного файла jar:
dependencies { ... testCompile project(':aProject').sourceSets.test.output }
в этом вопросе больше обсуждения:многопроектные тестовые зависимости с gradle
это работает для меня (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")
выше решение работает, но не для последней версии
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 }