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

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

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

РЕДАКТИРОВАТЬ: В частности, проект библиотеки, от которого я завишу, имеет очень длинные тесты, поскольку они предназначены для запуска на сервере сборки в 2 часа ночи, поэтому я сижу здесь, ожидая, пока краска высохнет, просто чтобы запустить мой очень короткий тесты.

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

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

root
-some_library_project
-main_project
-settings.gradle

Строка main_project 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
    }
}

person snotyak    schedule 11.07.2014    source источник
comment
Странно то, что они не должны выполняться, когда вы квалифицируете задачу с помощью :app: таким образом. Вы можете попробовать явно пропустить задачу библиотеки следующим образом: ./gradlew connectedAndroidTest -x :mylib:connectedAndroidTest   -  person Krylez    schedule 15.07.2014
comment
Вы смогли выяснить, как пропустить тесты в библиотечных проектах?   -  person rahulrv    schedule 30.07.2016


Ответы (2)


У вас есть плагин 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
     }
  }

Бежать

Все тесты:

ложка

Конкретный тестовый класс

градуированная ложка -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"

Шаг 3. Предоставьте скрипту разрешения

  1. cd к сценарию
  2. введите chmod u+x runAllTest.sh

Итак, что это делает:

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

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

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

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

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


Дополнительно: вам будет неудобно открывать каждую папку, чтобы открыть 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
}

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

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

person Chad Bingham    schedule 21.07.2014
comment
Не могли бы вы уточнить, какой плагин Gradle для Spoon вы на самом деле используете? Один от stanfy и один от x2on. Я в замешательстве, потому что вы используете testSizes, который, кажется, является функцией только последнего, но вы также используете className, который, кажется, является функцией только первого. - person sschuberth; 28.11.2014
comment
@sschuberth Я использовал плагин Stanfy. Я не уверен, как я заставил работать размеры тестов... Я больше не работаю над этим проектом, иначе я бы посмотрел, но я думаю, что, возможно, реализовал другую тестовую библиотеку, чтобы указать размеры тестов. Я думал, что это включено в stanfy. Извините, я больше не помогу. - person Chad Bingham; 28.11.2014

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

  1. как Крылез упомянул об этом в своем комментарии, вы можете просто пропустить конкретное тестовое задание с ./gradlew connectedAndroidTest -x :mylib:connectedAndroidTest
  2. вы фильтруете свои тесты в закрытии теста, как это объяснено здесь: http://www.gradle.org/docs/current/userguide/java_plugin.html#sec:java_test
person The End    schedule 16.07.2014
comment
№1 не работает, к сожалению. # 2 не работает, если я не помещаю его в неправильное место. Я также пытался заменить test на androidTest - person snotyak; 16.07.2014
comment
gradle выполнял тестовые задачи, даже когда вы говорите ему пропустить эти задачи? Можете ли вы добавить структуру папок ваших проектов и build.gradle, пожалуйста. - person The End; 17.07.2014
comment
Ага. Добавлен. И да, каталоги на одном уровне - person snotyak; 19.07.2014