Roboelectric и Android Studio

Я пытался сделать это в течение нескольких дней, без каких-либо результатов. Мне нужно настроить Robolectric в Android Studio (0.8.9, последняя версия). Я следил за различными учебными программами Android Unit и Integration , Roboelectric для тестирования модулей , Android Gradle с Roboelectric , как запускать тесты Roboelectric JUnit, но всегда получал какую-то ошибку.

Поэтому я создал модуль специально для тестирования:

Введите описание изображения здесь

Введите описание изображения здесь

Kedzoh (Project) build.gradle :

// Top-level build file where you can add configuration options common to all sub- projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' classpath 'org.robolectric:robolectric-gradle-plugin:0.12.+' } } allprojects { repositories { jcenter() } } 

App build.gradle:

 apply plugin: 'com.android.application' apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion '19.1.0' defaultConfig { applicationId 'com.dev.kedzoh' minSdkVersion 9 targetSdkVersion 19 versionCode 14 versionName '1.6.7' } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors { } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:19.+' compile 'com.google.android.gms:play-services:4.2.42' compile 'com.squareup.retrofit:retrofit:1.6.1' compile 'com.squareup.okhttp:okhttp:2.0.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' compile 'com.google.code.gson:gson:2.2.4' compile 'com.squareup.picasso:picasso:2.3.3' // You must install or update the Support Repository through the SDK manager to use this dependency. compile 'com.android.support:support-v4:19.+' compile 'com.google.guava:guava:18.0-rc1' compile 'com.sothree.slidinguppanel:library:+' compile 'com.larswerkman:HoloColorPicker:1.4' } 

Kedzoh-tests build.gradle:

 apply plugin: 'java' dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.squareup.retrofit:retrofit:1.6.1' compile 'com.squareup.okhttp:okhttp:2.0.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' compile 'com.google.code.gson:gson:2.2.4' compile 'com.squareup.picasso:picasso:2.3.3' // You must install or update the Support Repository through the SDK manager to use this dependency. compile 'com.google.guava:guava:18.0-rc1' compile 'com.sothree.slidinguppanel:library:+' compile 'com.larswerkman:HoloColorPicker:1.4' testCompile 'junit:junit:4.+' testCompile 'org.robolectric:robolectric:2.2' } 

На данный момент я не могу импортировать классы Robolectric, это дает мне ошибку. Когда я добавляю плагин приложения: «robolectric» в kedzoh-tests build.gradle , он запрашивает плагин «android» . После того, как я добавлю, он жалуется, что нет манифеста и не удается построить. Я не уверен, что это правильная конфигурация, так как она никогда не срабатывала. Может ли кто-нибудь дать совет, как установить Robolectric в Android Studio, пожалуйста?

РЕДАКТИРОВАТЬ:

Я попытался ответить ниже, но все еще придерживался ошибки «Класс не найден»:

Введите описание изображения здесь

Введите описание изображения здесь

Введите описание изображения здесь

Solutions Collecting From Web of "Roboelectric и Android Studio"

Там уже разные шаблоны проектов для robolectric. Вы попробовали https://github.com/nenick/android-gradle-template ?

Я думаю, что вы, возможно, затрудняете и усложняете свою жизнь, создавая свой тестовый модуль вне основного модуля «приложение». В большинстве обучающих программ, которые я видел, есть папка androidTest в модуле приложения, которая может содержать ваши тесты Robolectric. Все старые обучающие программы, основанные на Eclipse, которые я видел, по-видимому, инструктируют нас создавать тестовые модули отдельно от основного проекта.

Если бы я использовал Robolectric, я бы настроил проект, как я создал для вас https://github.com/marcthomas2013/Kedzoh . Я бы использовал папку androidTest, чтобы поместить мои тесты и настроить файлы градиента следующим образом.

Обратите внимание, что зависимости для тестов включаются с использованием объявлений androidTestCompile и зависимостей приложений объявляются с помощью компиляции.

Еще один элемент в этом файле градиента – это раздел robolectric, в котором он включает и исключает классы в папке androidTest. Все, что не находится в папке эспрессо, будет запускаться с использованием целевой тестовой программы gradlew, и все, включая папку espresso, будет запущено при вызове целевой функции connectledAndroidTest.

 app gradle file apply plugin: 'com.android.application' apply plugin: 'robolectric' android { packagingOptions { exclude 'LICENSE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE' } compileSdkVersion 19 buildToolsVersion "19.1.0" defaultConfig { minSdkVersion 18 targetSdkVersion 18 versionCode 2 versionName "1.0.0-SNAPSHOT" testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner" } buildTypes { release { runProguard false } } sourceSets { androidTest { setRoot('src/androidTest') } } } robolectric { include '**/*Test.class' exclude '**/espresso/**/*.class' } dependencies { repositories { mavenCentral() } compile 'com.sothree.slidinguppanel:library:2.0.1' androidTestCompile('junit:junit:4.11') { exclude module: 'hamcrest-core' } // Espresso androidTestCompile files('libs/espresso-1.1.jar') androidTestCompile files('libs/testrunner-1.1.jar') androidTestCompile files('libs/testrunner-runtime-1.1.jar') androidTestCompile 'com.google.guava:guava:14.0.1' androidTestCompile 'com.squareup.dagger:dagger:1.1.0' androidTestCompile 'org.hamcrest:hamcrest-integration:1.1' androidTestCompile 'org.hamcrest:hamcrest-core:1.1' androidTestCompile 'org.hamcrest:hamcrest-library:1.1' androidTestCompile('org.robolectric:robolectric:2.3') { exclude module: 'classworlds' exclude module: 'commons-logging' exclude module: 'httpclient' exclude module: 'maven-artifact' exclude module: 'maven-artifact-manager' exclude module: 'maven-error-diagnostics' exclude module: 'maven-model' exclude module: 'maven-project' exclude module: 'maven-settings' exclude module: 'plexus-container-default' exclude module: 'plexus-interpolation' exclude module: 'plexus-utils' exclude module: 'wagon-file' exclude module: 'wagon-http-lightweight' exclude module: 'wagon-provider-api' } androidTestCompile 'com.squareup:fest-android:1.0.+' } 

Файл сборки проекта Здесь мы включаем путь класса robolectric, чтобы мы могли использовать команды robolectric gradle в файле конфигурации выше.

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.2' classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() mavenCentral() } } 

Можете ли вы объяснить, какие ошибки вы испытываете, поскольку может быть много возможных ошибок, основанных на том, как вы работаете, также есть особая причина для создания отдельного тестового модуля.

Проект, который я предоставил, основан на настройке колоды ( https://github.com/robolectric/deckard-gradle ), здесь есть несколько советов о конфликтах JUnit и т. Д., С которыми вы можете столкнуться.

После того, как вы добрались настолько далеко, чтобы иметь возможность отлаживать модульный тест в приложении, вам придется вручную настроить путь к классу при запуске теста (не довольный вообще!), На основе информации в этой статье https: // github.com/codepath/android_guides/wiki/Robolectric-Installation-for-Unit-Testing

Вам нужно будет запустить ваш модульный тест, дождаться его сбоя, скопировать параметр -classpath и его значение (оно будет довольно длинным и начнется и закончится с ») и скопировать его в ваши параметры виртуальной машины в вашей конфигурации запуска, а затем Конец этого класса path добавляет a или a: в зависимости от вашего маршрута пути к ОС и добавляет путь к вашим тестовым классам, который будет чем-то вроде <ABSOLUTE_PATH_TO_PROJECT>/build/test-classes это добавит ваши тестовые классы в путь класса и То Android Studio должна иметь возможность запускать их.

Это также предполагает, что шаги для запуска gradle testClasses были сделаны из статьи http://blog.blundell-apps.com/how-to-run-robolectric-junit-tests-in-android-studio/