2016-01-05 3 views
4

У меня есть несколько модулей Gradle проект, который выглядит следующим образом:Gradle - добавить зависимость к тестам другого модуля

Parent 
|--server 
|--application (android module) 
+--common 

Тесты сервера имеет зависимость от общих тестов модулей. Для этого я добавил

testCompile files(project(':common').sourceSets.test.output.classesDi 
compileTestJava.dependsOn tasks.getByPath(':common:testClasses') 

и он отлично работал. К сожалению, когда я попытался сделать то же самое для модуля приложения, который также имеет зависимость от общих тестов модулей, это не сработает. Она терпит неудачу с:

Build file 'application\build.gradle' line: 103 
A problem occurred evaluating project ':application'. 
Could not find property 'sourceSets' on project ':common' 

После прибегая к помощи немного, я также попытался

project.evaluationDependsOn(':common') 
    testCompile files(project(':common').sourceSets.test.output.classesDir) 

, но не с другим исключением:

Project application: Only Jar-type local dependencies are supported. Cannot handle: common\build\classes\test 

Любые идеи о том, как это исправить?

ответ

7

Существует несколько подходов к решению проблемы импорта тестовых классов в этой статье. https://softnoise.wordpress.com/2014/09/07/gradle-sub-project-test-dependencies-in-multi-project-builds/ Один я использовал:

код в модуль общего:

task jarTest (type: Jar) { 
    from sourceSets.test.output 
    classifier = 'test' 
} 

configurations { 
    testOutput 
} 

artifacts { 
    testOutput jarTest 
} 

код в модуле в зависимости от общего модуля: dependencies{ testCompile project(path: ':common', configuration: 'testOutput') }

И там, кажется, плагин для него, как хорошо! https://plugins.gradle.org/plugin/com.github.hauner.jarTest/1.0

+0

работает как шарм @sakis kaliakoudas –

+2

, когда я определяю новую задачу я получаю сообщение об ошибке: «Не удалось получить неизвестное свойство„тест“для SourceSet контейнер ", но я не знаю, что это значит – Apperside

+1

@Apperside Проверьте [ответ by droidpl] (http://stackoverflow.com/a/36062014/1427177), который не вызывает эту ошибку. – jenzz

3

Следуя подходу sakis, это должна быть конфигурация, необходимая для получения тестов из другого проекта на платформе Android (для варианта отладки). Общий модуль:

task jarTests(type: Jar, dependsOn: "assembleDebugUnitTest") { 
    classifier = 'tests' 
    from "$buildDir/intermediates/classes/test/debug" 
} 
configurations { 
    unitTestArtifact 
} 
artifacts { 
    unitTestArtifact jarTests 
} 

Ваш модуль:

dependencies { 
    testCompile project(path: ":libName", configuration: "unitTestArtifact") 
} 
Смежные вопросы