Roboelectric和Android Studio

我一直试图做几天,没有结果。 我需要在Android Studio(0.8.9,最新版本)中设置Robolectric。 我跟着不同的教程Android单元和集成testing , unit testingRoboelectric安装 , Roboelectric Android机器人Gradle应用程序 , 如何运行Roboelectric JUnittesting,但总是有一些错误。

所以我创build了专门用于testing的模块:

在这里输入图像说明

在这里输入图像说明

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() } } 

应用程序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-test 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 testingbuild.gradle ,它要求'android'插件 。 我添加后,它抱怨没有清单,并没有build立。 我不确定这是否是正确的configuration,因为它从来没有真正的工作。 任何人都可以给一些build议如何在Android Studio中设置Robolectric?

编辑:

我试了下面的答案,但仍然坚持“类未find”的错误:

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

Solutions Collecting From Web of "Roboelectric和Android Studio"

Robolectric已经有了不同的项目模板。 你有没有尝试https://github.com/nenick/android-gradle-template

我想你可能会在主“应用”模块之外创buildtesting模块,使自己的生活变得更加困难和复杂。 我见过的大多数教程都在应用程序模块中有一个androidTest文件夹,可以包含您的Robolectrictesting。 所有基于Eclipse的旧版教程,我都看到,似乎指示我们创build独立于主项目的testing模块。

如果我使用Robolectric,我会设置项目像我为你创build的https://github.com/marcthomas2013/Kedzoh 。 我会使用androidTest文件夹来放置我的testing和configurationgradle文件,如下所示。

请注意,使用androidTestCompile声明包含了testing的依赖关系,并且应用程序依赖关系仅使用compile进行声明。

在这个gradle文件中的另一个项目是robolectric部分,在androidTest文件夹中包含和排除类。 任何不在espresso文件夹中的东西都将使用gradlewtesting目标运行,当调用gradlew connectedAndroidTest目标时,包括espresso文件夹在内的所有东西都将运行。

 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.+' } 

项目构build文件在这里,我们包括robolectric类path,以便我们可以在上面的configuration文件中使用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() } } 

你能解释一下你有什么样的错误,因为根据你的工作方式可能有很多可能的错误,还有创build一个单独的testing模块的特殊原因。

我提供的这个项目是基于deck-gradle设置的( https://github.com/robolectric/deckard-gradle ),在这里有一些关于JUnit冲突的技巧,你可能会遇到麻烦。

一旦你已经得到了这么多,以便能够debugging应用程序中的unit testing,您将不得不手动调整类path启动testing时(根本不漂亮!),基于本文中的信息https:// github.com/codepath/android_guides/wiki/Robolectric-Installation-for-Unit-Testing

你将需要运行你的unit testing,等待它失败,复制-classpath参数和它的值(这将是相当长的,并开始和完成“),并将其复制到您的虚拟机选项在运行configuration,然后在该类path的结尾添加一个;或一个:取决于您的操作系统path分隔符,并添加到您的testing类的path,这将是类似于<ABSOLUTE_PATH_TO_PROJECT>/build/test-classes这将添加您的testing类到类path和那么Android Studio应该可以运行它们。

这也假设运行gradle testClasses的步骤已经从文章http://blog.blundell-apps.com/how-to-run-robolectric-junit-tests-in-android-studio/