我使用的是杰克的Android单元测试插件摇篮:github/JakeWharton/gradle-android-test-plugin
我的build.gradle看起来是这样的:
相关性{ //分析 编译(com.crittercism:crittercism-机器人:3.0.11) //改造 编译(com.squareup.retrofit:改造:1.2.2) 编译(com.squareup.okhttp:okhttp:1.2.1) // 匕首 编译(com.squareup.dagger:短剑:1.1.0) 编译(com.squareup.dagger:匕首编译:1.1.0) // 兼容性 编译(androidpatibility:Android的支持:V4-R13) 编译(com.actionbarsherlock:actionbarsherlock:4.4.0@aar) //毕加索 编译(com.squareup.picasso:毕加索:2.1.1) //奥托 编译(com.squareup:奥托:1.3.4) //测试 testCompile'的JUnit:JUnit的:4.10 testCompileorg.robolectric:robolectric:2.2 testCompileorg.powermock:powermock-API的Mockito:1.5.1 testCompileorg.easytesting:巨星断言核心:2.0M10 }
不幸的是,我不能够运行所有或特定的单元测试形式的Android工作室。我得到的错误:
在线程异常主要java.lang.NoClassDefFoundError的:JUnit的/文本界面/ ResultPrinter 在java.lang.Class.forName0(本机方法) 在java.lang.Class.forName(Class.java:171) 在com.intellij.rt.execution.application.AppMain.main(AppMain.java:113) 致:抛出java.lang.ClassNotFoundException:junit.textui.ResultPrinter 在java.URLClassLoader的$ 1.运行(URLClassLoader.java:202) 在java.security.AccessController.doPrivileged(本机方法) 在java.URLClassLoader.findClass(URLClassLoader.java:190) 在java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301) 在java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 3更多
这是正确的,因为运行命令行不包括我的JUnit依赖:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -ea -Didea.launcher.port = 7533-Didea.launcher。 bin.path = /应用/ Android的Studio.app /箱-Dfile.encoding = UTF-8 -classpath/应用/ Android的Studio.app / lib中/ idea_rt.jar:/应用/ Android的Studio.app/plugins/junit/lib/junit-rt.jar:/Users/eugen/Development/SDK/android-sdk-macosx/platforms/android-18/android.jar:/Users/eugen/Development/SDK/android-sdk-macosx/platforms/android-18/data/res:/Users/eugen/Development/SDK/android-sdk-macosx/tools/support/annotations.jar:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/classes/alpha/debug:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.retrofit/retrofit/1.2.2/jar/cdf7b60568092fbcc7a254371c345e92f733c03c/retrofit-1.2.2.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.google.$c$c.gson/gson/2.2.4/jar/a60a5e993c98c864010053cb901b7eab25306568/gson-2.2.4.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.okhttp/okhttp/1.2.1/jar/c3562574496bb4d452d6fc45b817577e98d08afe/okhttp-1.2.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup/javawriter/2.1.1/jar/67ff45d9ae02e583d0f9b3432a5ebbe05c30c966/javawriter-2.1.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.dagger/dagger/1.1.0/jar/49f2061c938987c8e56679a731d74fd8448d8742/dagger-1.1.0.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.picasso/picasso/2.1.1/jar/ab19bfb23f641f189b6dca9a4d393f8dc291103a/picasso-2.1.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup/otto/1.3.4/jar/4d72fb811c7b3c0e7f412112020d4430f044e510/otto-1.3.4.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.dagger/dagger-compiler/1.1.0/jar/ddb38c2be31deeb7a001177f7c358665e350d646/dagger-compiler-1.1.0.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/javax.inject/javax.inject/1/jar/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/exploded-bundles/ComActionbarsherlockActionbarsherlock440.aar/res:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/exploded-bundles/ComActionbarsherlockActionbarsherlock440.aar/classes.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.okhttp/okhttp-protocols/1.2.1/jar/ec2beaefef3bd4f680c17fad8e72e66f2a006f1/okhttp-protocols-1.2.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.crittercism/crittercism-android/3.0.11/jar/e30c21ae491d780622ecaee2752969be98140c3/crittercism-android-3.0.11.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/androidpatibility/android-support/v4-r13/jar/bd6479f5dd592790607e0504e66e0f31c2b4d308/android-support-v4-r13.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 @ /私营/无功/文件夹/ WQ / knhztnf105v2_p1t580tj8h80000gp / T / idea_junit701450667388095664.tmp @w@/private/var/folders/wq/knhztnf105v2_p1t580tj8h80000gp/T/idea_working_dirs_junit4927192380605663413.tmp -socket63849
我不知道是否有人能在Android的Studio中运行单元测试?而且如果可能的话怎么做呢?
解决方案更新AS 1.1+,Android的摇篮插件1.1 +
最后有可能没有花样繁多。下面是例子项目,说明如何建立 Robolectric 测试 Android的工作室V1.1 + 和 Android的摇篮插件V1.1 + : github/nenick/AndroidStudioAndRobolectric
您还可以找到有可能的问题和解决方法。是的, Robolectric 是复杂的,而不是由谷歌官方支持,因此还是有一些问题。但大部分作品和时间带来巨大的价值,你的项目。
我也建议你开始使用 Robolectric V3 + 。这几乎是释放,不够稳定。
有关AS 0.X和1.0倍和Android摇篮的插件版本低于1.1 旧的答案
我设法在朋友帮助下做到这一点。
所以基本上你需要做下一个改变运行Android的工作室Robolectric单元测试:
至于我的新的类路径的开始是这样的:
/Users/emartynov/Development/Projects/work/android.project/build/test-classes:/Users/emartynov/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar
问题:
我有机器人工作室0.6版本。这又是我的 build.gradle 文件的一部分:
buildscript { 库{ mavenCentral() 行家{URLgithub/rockerhieu/mvn-repo/raw/master/'} } 依赖{ 类路径com.android.tools.build:gradle:0.11.+ 类路径com.neenbedankt.gradle.plugins:Android的贴切:1.3 //类路径org.robolectric.gradle:摇篮,Android的测试插件:0.10.1 类路径org.robolectric.gradle:摇篮,Android的测试插件:0.10.1-快照 类路径com.jakewharton.sdkmanager:摇篮 - 插件:0.10 +。 } } 应用插件:Android的SDK管理器 应用插件:'机器人' 应用插件:Android的容易 应用插件:Android的测试 库{ mavenCentral() } 安卓{ compileSdkVersion 19 buildToolsVersion19.1.0 packagingOptions { 不包括META-INF /注意事项 不包括META-INF / NOTICE.txt 不包括META-INF / notice.txt 不包括META-INF /许可证 不包括META-INF / LICENSE.TXT 不包括META-INF / LICENSE.TXT 不包括META-INF / ASL2.0 排除的LICENSE.txt } defaultConfig { 的minSdkVersion 14 targetSdkVersion 19 版本code 1 VERSIONNAME0.9.0 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } sourceSets { androidTest.setRoot(SRC /测试) } } 依赖{ // 牛油刀 编译com.jakewharton:butterknife:5.0.0 // 匕首 编译com.squareup.dagger:短剑:1.2.1 // 易于 易'com.squareup.dagger:匕首编译:1 +' // AS测试 androidTestCompile'的JUnit:JUnit的:4 + androidTestCompile('org.robolectric:robolectric:2.3'){ 排除组:共享记录 排除组:org.apache.httpcomponents } androidTestCompilecom.squareup:巨星-机器人:1 +' androidTestCompileorg.mockito:的Mockito全:1.9 +。 androidTestCompileorg.easytesting:巨星断言核心:2.0M10 androidTestCompile('org.skyscreamer:jsonassert:1.2 +'){ 排除组:org.json } //测试 testCompile'的JUnit:JUnit的:4 + testCompile('org.robolectric:robolectric:2.3'){ 排除组:共享记录 排除组:org.apache.httpcomponents } testCompilecom.squareup:巨星-机器人:1 +' testCompileorg.mockito:的Mockito全:1.9 +。 testCompileorg.easytesting:巨星断言核心:2.0M10 testCompilecom.squareup.dagger:匕首编译:1 +' testCompile('org.skyscreamer:jsonassert:1.2 +'){ 排除组:org.json } }I'm using Jake's Android unit tests plugin for gradle: github/JakeWharton/gradle-android-test-plugin
My build.gradle looks like this:
dependencies { // analytics compile('com.crittercism:crittercism-android:3.0.11') // retrofit compile('com.squareup.retrofit:retrofit:1.2.2') compile('com.squareup.okhttp:okhttp:1.2.1') // dagger compile('com.squareup.dagger:dagger:1.1.0') compile('com.squareup.dagger:dagger-compiler:1.1.0') // compatibility compile('androidpatibility:android-support:v4-r13') compile('com.actionbarsherlock:actionbarsherlock:4.4.0@aar') // Picasso compile('com.squareup.picasso:picasso:2.1.1') // Otto compile('com.squareup:otto:1.3.4') // Tests testCompile 'junit:junit:4.10' testCompile 'org.robolectric:robolectric:2.2' testCompile 'org.powermock:powermock-api-mockito:1.5.1' testCompile 'org.easytesting:fest-assert-core:2.0M10' }Unfortunately I'm not able to run all or specific unit test form Android Studio. I'm getting error:
Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:171) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113) Caused by: java.lang.ClassNotFoundException: junit.textui.ResultPrinter at java.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 3 moreAnd this is correct because running command line doesn't include my JUnit dependency:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -ea -Didea.launcher.port=7533 "-Didea.launcher.bin.path=/Applications/Android Studio.app/bin" -Dfile.encoding=UTF-8 -classpath "/Applications/Android Studio.app/lib/idea_rt.jar:/Applications/Android Studio.app/plugins/junit/lib/junit-rt.jar:/Users/eugen/Development/SDK/android-sdk-macosx/platforms/android-18/android.jar:/Users/eugen/Development/SDK/android-sdk-macosx/platforms/android-18/data/res:/Users/eugen/Development/SDK/android-sdk-macosx/tools/support/annotations.jar:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/classes/alpha/debug:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.retrofit/retrofit/1.2.2/jar/cdf7b60568092fbcc7a254371c345e92f733c03c/retrofit-1.2.2.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.google.code.gson/gson/2.2.4/jar/a60a5e993c98c864010053cb901b7eab25306568/gson-2.2.4.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.okhttp/okhttp/1.2.1/jar/c3562574496bb4d452d6fc45b817577e98d08afe/okhttp-1.2.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup/javawriter/2.1.1/jar/67ff45d9ae02e583d0f9b3432a5ebbe05c30c966/javawriter-2.1.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.dagger/dagger/1.1.0/jar/49f2061c938987c8e56679a731d74fd8448d8742/dagger-1.1.0.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.picasso/picasso/2.1.1/jar/ab19bfb23f641f189b6dca9a4d393f8dc291103a/picasso-2.1.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup/otto/1.3.4/jar/4d72fb811c7b3c0e7f412112020d4430f044e510/otto-1.3.4.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.dagger/dagger-compiler/1.1.0/jar/ddb38c2be31deeb7a001177f7c358665e350d646/dagger-compiler-1.1.0.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/javax.inject/javax.inject/1/jar/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/exploded-bundles/ComActionbarsherlockActionbarsherlock440.aar/res:/Users/eugen/Development/Projects/eBuddy/xms/android/xms3-android/build/exploded-bundles/ComActionbarsherlockActionbarsherlock440.aar/classes.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.squareup.okhttp/okhttp-protocols/1.2.1/jar/ec2beaefef3bd4f680c17fad8e72e66f2a006f1/okhttp-protocols-1.2.1.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/com.crittercism/crittercism-android/3.0.11/jar/e30c21ae491d780622ecaee2752969be98140c3/crittercism-android-3.0.11.jar:/Users/eugen/.gradle/caches/artifacts-26/filestore/androidpatibility/android-support/v4-r13/jar/bd6479f5dd592790607e0504e66e0f31c2b4d308/android-support-v4-r13.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 @/private/var/folders/wq/knhztnf105v2_p1t580tj8h80000gp/T/idea_junit701450667388095664.tmp @w@/private/var/folders/wq/knhztnf105v2_p1t580tj8h80000gp/T/idea_working_dirs_junit4927192380605663413.tmp -socket63849I wonder if anyone was able to run unit tests in Android Studio? And if it is possible how make it?
解决方案Update for AS 1.1+, android gradle plugin 1.1+
Finally it is possible without many tricks. Here is example of project that shows how to setup Robolectric test in Android Studio v1.1+ and android gradle plugin v1.1+: github/nenick/AndroidStudioAndRobolectric
You can find also there possible issue and workarounds. Yes, Robolectric is complex and not officially supported by Google so it still has some issues. But most of the time it works and brings huge value to your project.
I would also encourage you to start using Robolectric v3+. It is almost released and stable enough.
Old answer for AS 0.x and 1.0x and android gradle plugin version below 1.1
I managed to make it with help of friends.
So basically you need to make next changes to run Robolectric unit tests in Android Studio:
As for me the start of new classpath looks like this:
/Users/emartynov/Development/Projects/work/android.project/build/test-classes:/Users/emartynov/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jarProblems:
I have Android Studio 0.6 version. Here is again part of my build.gradle file:
buildscript { repositories { mavenCentral() maven { url 'github/rockerhieu/mvn-repo/raw/master/' } } dependencies { classpath 'com.android.tools.build:gradle:0.11.+' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.3' // classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.10.1' classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.10.1-SNAPSHOT' classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.10.+' } } apply plugin: 'android-sdk-manager' apply plugin: 'android' apply plugin: 'android-apt' apply plugin: 'android-test' repositories { mavenCentral() } android { compileSdkVersion 19 buildToolsVersion "19.1.0" packagingOptions { exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/notice.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/license.txt' exclude 'META-INF/ASL2.0' exclude 'LICENSE.txt' } defaultConfig { minSdkVersion 14 targetSdkVersion 19 versionCode 1 versionName "0.9.0" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } sourceSets { androidTest.setRoot( 'src/test' ) } } dependencies { // butter knife compile 'com.jakewharton:butterknife:5.0.0' // dagger compile 'com.squareup.dagger:dagger:1.2.1' // apt apt 'com.squareup.dagger:dagger-compiler:1.+' // AS tests androidTestCompile 'junit:junit:4.+' androidTestCompile( 'org.robolectric:robolectric:2.3' ) { exclude group: 'commons-logging' exclude group: 'org.apache.httpcomponents' } androidTestCompile 'com.squareup:fest-android:1.+' androidTestCompile 'org.mockito:mockito-all:1.9.+' androidTestCompile 'org.easytesting:fest-assert-core:2.0M10' androidTestCompile( 'org.skyscreamer:jsonassert:1.2.+' ) { exclude group: 'org.json' } // tests testCompile 'junit:junit:4.+' testCompile( 'org.robolectric:robolectric:2.3' ) { exclude group: 'commons-logging' exclude group: 'org.apache.httpcomponents' } testCompile 'com.squareup:fest-android:1.+' testCompile 'org.mockito:mockito-all:1.9.+' testCompile 'org.easytesting:fest-assert-core:2.0M10' testCompile 'com.squareup.dagger:dagger-compiler:1.+' testCompile( 'org.skyscreamer:jsonassert:1.2.+' ) { exclude group: 'org.json' } }
更多推荐
如何运行单元测试与Android工作室
发布评论