Android Gradle приложение: connectedCheck запускает тесты из зависимостей

У меня есть проект библиотеки, который имеет свои собственные тесты. Я не отвечаю за этот проект библиотеки и не забочусь о его тестах, однако, когда я запускаю gradle :app:connectedCheck он запускает мои тесты, но он также запускает тесты зависимостей. Есть ли способ предотвратить это?

Я должен упомянуть, что мои зависимости не входят в модуль app я говорю.

EDIT: В частности, проект библиотеки, в котором я вхожу, имеет очень длинные тесты, поскольку они предназначены для работы на сервере сборки в 2 часа ночи, поэтому я сижу здесь, ожидая, пока краска высохнет, чтобы запустить мой действительно короткий тесты.

EDIT2: Я также пытался использовать Spoon. У меня есть настройка прямо сейчас и вы можете запускать отдельные классы, но я бы хотел запустить все в одном пакете. Это возможно?

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

 root -some_library_project -main_project -settings.gradle 

Основной_проект build.gradle выглядит так. Я должен упомянуть, что ложка в данный момент ничего не делает, но мои варианты открыты:

 buildscript{ repositories { jcenter() } dependencies{ classpath 'com.stanfy.spoon:spoon-gradle-plugin:0.10.+' } } apply plugin: 'com.android.application' apply plugin: 'spoon' android { compileSdkVersion 20 buildToolsVersion '20.0.0' defaultConfig { applicationId "com.something.main_project" minSdkVersion 17 targetSdkVersion 20 versionCode 1 versionName "1.0" testPackageName "com.something.main_project.test" testInstrumentationRunner "android.test.InstrumentationTestRunner" } signingConfigs { debug { storeFile file("debug.keystore") } release { storeFile file("release.keystore") storePassword "something" keyAlias "something" keyPassword "something" } } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } debug{ signingConfig signingConfigs.debug } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':some_library_project') androidTestCompile 'com.squareup.spoon:spoon-client:1.1.0' } spoon { if (project.hasProperty('spoonClassName')){ className = project.spoonClassName } } 

Solutions Collecting From Web of "Android Gradle приложение: connectedCheck запускает тесты из зависимостей"

У вас есть плагин Spoon, но работает с помощью gradle :app:connectedCheck . Во-первых, внесите эти изменения, затем запустите с помощью gradle spoon

Комментировать androidTest.setRoot любой другой build.gradle другой, что основной пакет

Добавьте их в build.gradle основного пакета:

Под тегом android

 sourceSets { //this one may not be needed. But wont hurt. androidTest.setRoot('src/androidTest') } 

Измените тег spoon :

  spoon { debug = true testSizes = ['small', 'medium', 'large'] <<--- Change this to run specific test sizes if (project.hasProperty('spoonClassName')){ className = project.spoonClassName } } 

Бежать

Все тесты:

Град-ложка

Специфический тестовый класс

Gradle spoon -PspoonClassName = [THE.PACKAGE.NAME]


редактировать

После прочтения вашего редактирования «Edit2» я вижу, что это будет указывать только определенный класс для запуска, а не конкретный пакет. К сожалению, я не нашел решения для этого, только обход. Я построил скрипт bash, и в нем я добавил свои классы для тестирования, например:

Шаг 1. Создайте файл в корне вашего Android-проекта: runAllTests.sh

Шаг 2. Редактируем .sh чтобы выглядеть так:

  #!/bin/sh date +%b-%dT%H.%M > timestamp.out sites="$HOME"/path/to/project/root timestamp="$(cat "$sites"/timestamp.out)" result_folder="$sites"/results destdir="$result_folder/Results-$timestamp" mkdir -p "$destdir" echo "Directory created: ${destdir##*/}" <---------- Here you start running the test ---------------> echo "Starting Master Setup" gradle spoon -PspoonClassName=com.espresso.test.MasterSetup cp -r "$sites"/app/build/spoon "$destdir"/MasterSetup echo "Results saved to MasterSetup" echo "Starting WorkoutSchedule" gradle spoon -PspoonClassName=com.espresso.test.CupcakeSchedule cp -f "$sites"/app/build/spoon "$destdir"/WorkoutSchedule echo "Results saved to WorkoutSchedule" echo "Starting Setting.test" gradle spoon -PspoonClassName=com.espresso.test.Settings cp -r "$sites"/app/build/spoon "$destdir"/Settings echo "Results saved to Settings" на конкретные  #!/bin/sh date +%b-%dT%H.%M > timestamp.out sites="$HOME"/path/to/project/root timestamp="$(cat "$sites"/timestamp.out)" result_folder="$sites"/results destdir="$result_folder/Results-$timestamp" mkdir -p "$destdir" echo "Directory created: ${destdir##*/}" <---------- Here you start running the test ---------------> echo "Starting Master Setup" gradle spoon -PspoonClassName=com.espresso.test.MasterSetup cp -r "$sites"/app/build/spoon "$destdir"/MasterSetup echo "Results saved to MasterSetup" echo "Starting WorkoutSchedule" gradle spoon -PspoonClassName=com.espresso.test.CupcakeSchedule cp -f "$sites"/app/build/spoon "$destdir"/WorkoutSchedule echo "Results saved to WorkoutSchedule" echo "Starting Setting.test" gradle spoon -PspoonClassName=com.espresso.test.Settings cp -r "$sites"/app/build/spoon "$destdir"/Settings echo "Results saved to Settings" 

Шаг 3: Дайте разрешения на сценарий

  1. cd к скрипту
  2. Тип chmod u+x runAllTest.sh

Итак, что это:

  1. Во-первых, он создает timestamp.out. Я использую это, чтобы сохранить результаты в файл снова и снова, не перезаписывая предыдущие результаты. Эта часть вам не нужна.

  2. Затем он создает папку результатов в корне вашего проекта, если она еще не существует.

  3. Затем он создаст папку внутри папки результатов с именем Results-SOME-DATE.

  4. Наконец, каждый тест будет выполняться, сохраняя результаты в обычном месте вашего проекта. (Внутренняя сборка / ложка). После завершения теста она скопирует результаты в папку результатов и соответствующим образом назовет каждый результат теста, поэтому легко увидеть, что все ваши тесты запущены.

ПРИМЕЧАНИЕ. Этот сценарий был написан для MAC. Если ваш на окнах или что-то еще, этот скрипт может нуждаться в модификациях.


Кроме того: вы обнаружите, что неудобно открывать в каждую папку, чтобы открыть index.html . Поэтому я написал этот скрипт для добавления в ваш bash_profile :

 function open-results () { # the browser to open up `index.html' in. browser='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' # let the user know what directory we're looking in printf "looking in %s" "$(pwd)" echo ... for paths in $(find ./ -name 'debug' -type d); do for files in $(find "$paths" -name 'index.html'); do open -a "$browser" "$files" done done echo done } 

Теперь, cd для Results-SOME-DATE , и введите open-results . Опять же , это было написано для bash. Возможно, вам придется изменять в зависимости от вашей ОС. Но структура должна быть одинаковой

Надеюсь, это поможет.

Если у вас есть зависимость проекта от этой библиотеки, gradle хочет ее построить и протестировать, так как оба являются обычным процессом сборки java-проекта. Чтобы избежать этого теста, вы можете сделать следующее:

  1. Как и Krylez упомянул об этом в своем комментарии, вы можете просто пропустить конкретную тестовую задачу с помощью ./gradlew connectedAndroidTest -x :mylib:connectedAndroidTest
  2. Вы отфильтровываете свои тесты в закрытии теста, как это описано здесь: http://www.gradle.org/docs/current/userguide/java_plugin.html#sec:java_test