我正在尝试使用Robolectric在一个项目构建中使用gradle在新的ide for android:Android studio中,但我面临一个奇怪的问题,我已经正确导入了所有库并在"src"中创建了"test"文件夹"事实是,每当我运行IDE一直说测试"类未找到:??'com.example.myandroidproject.test’我在做什么错了,我需要改变一些东西在gradle.build这里是我的目录结构体:
@Aldo Borrero,最后似乎有人找到了使用Robolectric和Gradle在"Android Studio"下测试android项目的方法.请看看这个答案Robolectric with Gradle
更新:来自广场的人已经发布了一个插件,让Robolectric与Gradle和Android Studio一起开箱即用,这个功能将在v2中与Robolectric集成,同时你可以在这里获取插件:Gradle Android测试插件
我尝试了不同的appraoaches结合android studio&robolectric和espresso.我结束了这个示例项目设置https://github.com/nenick/android-gradle-template
这里有一些不同方法的解释:
应用模块+ espresso + robolectricrobolectric维护者支持一个示例https://github.com/robolectric/deckard-gradle.这是基于插件https://github.com/robolectric/gradle-android-test-plugin.但这有一个缺点,在https://github.com/robolectric/gradle-android-test-plugin/issues/17上报告了依赖性污染,导致esspresso测试编译时间和执行时间变慢.
buildscript { repositories { mavenLocal() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.10.+' classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.10.+' } } apply plugin: 'android' apply plugin: 'android-test' android { defaultConfig { testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner" } } androidTest { include '**/*Test.class' exclude '**/espresso/**/*.class' } dependencies { androidTestCompile('junit:junit:4.11') androidTestCompile('org.robolectric:robolectric:2.3-SNAPSHOT') androidTestCompile 'com.jakewharton.espresso:espresso:1.1-r2' }单独的浓咖啡
一个例子由https://github.com/stephanenicolas/Quality-Tools-for-Android显示,但它已经过时并且也有一些缺点.它将重新编译并使android studio表现得很奇怪.它将应用程序模块源标记为espresso测试模块的(根源).这有效但不直观.
dependencies { androidTestCompile 'com.jakewharton.espresso:espresso:1.1-r2' } android { sourceSets { main { manifest.srcFile '../AndroidSample/AndroidManifest.xml' java.srcDirs += ['../AndroidSample/src/main/java'] resources.srcDirs = ['../AndroidSample/res'] res.srcDirs = ['../AndroidSample/res'] } } defaultConfig { testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner" } }spereate robolectric
存在一个插件https://github.com/novoda/gradle-android-test-plugin,它使我们能够将robolectric测试放入sperate包中.这个项目设置对我很有用:
- MyProject |- app (with espresso tests) |- - build.gradle (app) |- robolectric (unit tests) |- - build.gradle (robo)
dependencies { androidTestCompile 'com.jakewharton.espresso:espresso:1.1-r2' } android { defaultConfig { testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner" } }
buildscript { repositories { mavenCentral() maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } } dependencies { classpath 'com.android.tools.build:gradle:0.9.+' classpath "com.novoda:gradle-android-test-plugin:0.9.8-SNAPSHOT" } } android { projectUnderTest ':AndroidSample' } apply plugin: 'java' apply plugin: 'android-test' dependencies { testCompile 'junit:junit:4.11' testCompile 'org.mockito:mockito-core:1.9.5' testCompile 'com.squareup:fest-android:1.0.+') testCompile ('org.robolectric:robolectric:2.3-SNAPSHOT') }
尝试设置此项目设置时会有一些陷阱,所以只需从一个工作示例开始:https: //github.com/nenick/android-gradle-template
这不太可能开箱即用,因为src/test没有自动使用.您需要自动创建一个测试任务,编译此源集,设置正确的依赖项并运行它.
我们打算在将来支持这一点,但现在您需要手动执行此操作.