2016-05-05 4 views
5

Я изменил свой проект, чтобы стать мультиплатформенным.Gradle: Как запустить тесты из зависимости модуля?

Предыдущее состояние: Только один модуль (проект) с одним build.gradle. Все тесты были в тестовой папке, и когда я запустил gradlew testDebug, все мои 500 тестов были запущены.

Новое состояние: У меня есть главный Gradle проект, который ничего не делает, но проведение 3-х модулей

  • ядро ​​
  • androidversion
  • rasberryPiVersion

Каждый из них модули имеют собственный файл gradle, но могут быть созданы только модули android и rasberryPi. В своих зависимостях (в соответствующем файле build.gradle) они компилируются против «основного» модуля. Например:

dependencies { 
    compile project(':clapcore') 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.google.android:android:4.1.1.4' 
} 

Все мои 500 тестов теперь находятся в ядре. Поэтому, когда я делаю gradlew clean assembleDebug testDebug на модуле Android, тест не обнаружен, и папка тестового результата пуста.

Я попытался запустить testDebug команды на основном модуле непосредственно, но так как он не строит сам по себе, я получаю сообщение об ошибке:

FAILURE: Build failed with an exception. 

* What went wrong: 
Task 'testDebug' not found in project ':core'. 

Так что мой вопрос: есть ли способ, в gradle, чтобы сообщить команде «testDebug» выполнить все тесты, которые находятся в его зависимости от модуля (ядро)?

Я также попытался добавить testCompile в зависимости от андроида модуля, но он не работает, как это:

dependencies { 
    compile project(':clapcore') 
    testCompile project(':clapcore') 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.google.android:android:4.1.1.4' 
} 

Спасибо!

EDIT Я обнаружил, что я могу сделать команду gradlew build на ядре, и он будет работать тест в модуле «основной». Но мне хотелось бы запустить этот тест, если это возможно.

* EDIT 2 * Я обнаружил, что я могу сделать команду gradlew buildNeeded на «андроид» модуль и он будет делать сборки для андроида модуля и ядра. К сожалению, он только строится в выпуске! Если кто-то может указать мне способ использовать эту функцию, но при отладке это будет потрясающе. Мне нужно его отлаживать, потому что релиз сборки запускает гораздо больше задач, таких как смена версии, фиксация на git, push и т. Д. Это только для ночной сборки, поэтому ее нужно отлаживать.

ответ

0

После прочтения документации на веб-сайте Gradle я обнаружил, что очень приятная функция buildNeeded просто запускает весь buildType, и вы не можете изменить. Единственными функциями, которые дают вам возможность выбрать buildType, являются assembleDebug и assembleRelease соответственно.

С момента моего выпуска (создание тега, обновление версии, нажатие на git и т. Д.).) бежал сразу после assembleRelease, я застрял, потому что запуск buildNeeded в ночной сборке вызвал бы процесс выпуска.

Поэтому я изменил свой файл build.gradle, чтобы создать задачу с именем releaseVersion, которая зависит от zipalignRelease. Поэтому, когда я действительно хочу создать выпуск, я вызываю releaseVersion, но когда я просто хочу построить/протестировать в ночной сборке, я вызываю команду buildNeeded.

Замечания: результаты испытаний будут в каждой из «сборных» папок каждого модуля. Будьте внимательны, чтобы очистить весь модуль, если вы используете CI.

Смежные вопросы