2016-04-22 3 views
4

Ich habe eine Anwendung mit Hunderten von Komponententest mit Robolectric, nachdem ich Parse SDK in meiner Anwendung Parse.initialize(this, "", ""); alle Test gestartet, um mit Fehler causing java.lang.VerifyError: Bad type on operand stack fehlgeschlagen, obwohl die Anwendung funktioniert ohne Problem.Parse + Robolectric verursacht java.lang.VerifyError: Falscher Typ auf Operandenstack

Bearbeiten: Ich bin mir der Problemumgehungen bekannt, meine Tests ohne Parse auszuführen. Ich möchte in der Lage sein, Tests auszuführen, die das Parse-Framework verwenden.

Der komplette Stack-Trace wird unten angezeigt.

/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/java -ea -Didea.launcher.port=7532 "-Didea.launcher.bin.path=/Applications/Android Studio.app/Contents/bin" -Didea.junit.sm_runner -Dfile.encoding=UTF-8 -classpath "/Applications/Android Studio.app/Contents/lib/idea_rt.jar:/Applications/Android Studio.app/Contents/plugins/junit/lib/junit-rt.jar:/Users/guilhermecastro/Library/Android/sdk/platforms/android-23/data/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/classes/test/enem/debug:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/classes/enem/debug:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.robolectric/robolectric-annotations/3.1-SNAPSHOT/b766a056ea427a742dd79506bdbb63252393a1cf/robolectric-annotations-3.1-SNAPSHOT.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-auth/8.4.0/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-auth/8.4.0/res:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-library/1.3/4785a3c21320980282f9f33d0d1264a69040538f/hamcrest-library-1.3.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-commons/5.0.1/7b7147a390a93a14d2edfdcf3f7b0e87a0939c3e/asm-commons-5.0.1.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.google.android.apps.common.testing.accessibility.framework/accessibility-test-framework/2.1/c2d6267c3ad0435ddf9e27a94a0e0af4ca3fdfbb/accessibility-test-framework-2.1.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-base/8.4.0/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-base/8.4.0/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-measurement/8.4.0/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-measurement/8.4.0/res:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/5.0.1/2fd56467a018aafe6ec6a73ccba520be4a7e1565/asm-5.0.1.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.3.0/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.3.0/res:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.androidannotations/rest-spring-api/4.0-SNAPSHOT/437f51d0168f1fc7276228c632f40a580e4cd032/rest-spring-api-4.0-SNAPSHOT.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-vision/8.4.0/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-vision/8.4.0/res:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.jayway.awaitility/awaitility/1.7.0/e4fa7955cab67d880e4868a0795cce3498ea7bf2/awaitility-1.7.0.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.6.0/a0990e2e812ac6639b6ce955c91b13228500476e/jackson-annotations-2.6.0.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.robolectric/shadows-core/3.1-SNAPSHOT/b82376c4080f576f9ae7dd8d5e69d4e9ad015e08/shadows-core-3.1-SNAPSHOT.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/labelledspinner-release/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/labelledspinner-release/jars/classes.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.robolectric/robolectric/3.1-SNAPSHOT/6473b51558001a1f38d905947eff5108e90280cf/robolectric-3.1-SNAPSHOT.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-android/1.2.0/6ee2953ccf51ce72b6d548c30c4633b99eb4f9dd/bolts-android-1.2.0.jar:/Users/guilhermecastro/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/23.3.0/support-annotations-23.3.0.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/23.3.0/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/23.3.0/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/23.3.0/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/23.3.0/res:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/xmlpull/xmlpull/1.1.3.1/2b8e230d2ab644e4ecaa94db7cdedbc40c805dfa/xmlpull-1.1.3.1.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.parse/parse-android/1.13.0/58a7d54b6a4f28be11f0cecec93097eddf473e6f/parse-android-1.13.0.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.3.0/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.3.0/jars/classes.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.3/fd32786786e2adb664d5ecc965da47629dca14ba/commons-codec-1.3.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.ibm.icu/icu4j/53.1/786d9055d4ca8c1aab4a7d4ac8283f973fd7e41f/icu4j-53.1.jar:/Applications/Android Studio.app/Contents/gradle/m2repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/beta/1.1.4/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/beta/1.1.4/res:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/cglib/cglib-nodep/3.1/aa83efbd1aedc4f26bdf00e7ea78191483f2c9b3/cglib-nodep-3.1.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/0.282/745a7e2f35fdbe6336922e0d492c979dbbfa74fb/sqlite4java-0.282.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-tree/5.0.1/1b1e6e9d869acd704056d0a4223071a511c619e6/asm-tree-5.0.1.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.robolectric/shadows-support-v4/3.1-SNAPSHOT/48ece111d7d02dc991f2fa43ca427fb3cda211f0/shadows-support-v4-3.1-SNAPSHOT.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/answers/1.3.6/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/answers/1.3.6/res:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.springframework.android/spring-android-core/1.0.1.RELEASE/e68f0e8e4b636ee30c4de58953be38d9b72a5e3b/spring-android-core-1.0.1.RELEASE.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.apache.maven/maven-ant-tasks/2.1.3/b09be554228d66d208e5fef5266844aacf443abc/maven-ant-tasks-2.1.3.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.apache.ant/ant/1.8.0/7b456ca6b93900f96e58cc8371f03d90a9c1c8d1/ant-1.8.0.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/19.0-rc2/93e17f60bc524c2610b41c494bb829c11ca89436/guava-19.0-rc2.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.mikhaellopez/circularimageview/2.1.1/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.mikhaellopez/circularimageview/2.1.1/res:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.apache.ant/ant-launcher/1.8.0/8b53ba16fa62fb1034da8f1de200ddc407c8381/ant-launcher-1.8.0.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/xpp3/xpp3_min/1.1.4c/19d4e90b43059058f6e056f794f0ea4030d60b86/xpp3_min-1.1.4c.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-tasks/1.4.0/d85884acf6810a3bbbecb587f239005cbc846dc4/bolts-tasks-1.4.0.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.robolectric/robolectric-utils/3.1-SNAPSHOT/b52242aa999e3c7069f9e0ff573bf4ecbc8dec07/robolectric-utils-3.1-SNAPSHOT.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.androidannotations/androidannotations-api/4.0-SNAPSHOT/6df845decdeef73e5b631cdaa82306a6a03b199b/androidannotations-api-4.0-SNAPSHOT.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics/8.4.0/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics/8.4.0/jars/classes.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.thoughtworks.xstream/xstream/1.4.8/520d90f30f36a0d6ba2dc929d980831631ad6a92/xstream-1.4.8.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/support-v4/23.3.0/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/support-v4/23.3.0/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/support-v4/23.3.0/jars/libs/internal_impl-23.3.0.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-all/1.10.19/539df70269cc254a58cccc5d8e43286b4a73bf30/mockito-all-1.10.19.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-util/5.0.1/7c8caddfbd0b2d7b844f8fcc75175b9cb9cf4724/asm-util-5.0.1.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.bouncycastle/bcprov-jdk16/1.46/ce091790943599535cbb4de8ede84535b0c1260c/bcprov-jdk16-1.46.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/glide/3.7.0/9e9eeaf9948ee4d6c3ab354e8dc14368f16994a4/glide-3.7.0.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.objenesis/objenesis/2.1/87c0ea803b69252868d09308b4618f766f135a96/objenesis-2.1.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.0.3/fcacc35075d9c3114da4c4122b42d78786135c90/httpclient-4.0.3.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/io.fabric.sdk.android/fabric/1.3.10/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/io.fabric.sdk.android/fabric/1.3.10/jars/classes.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.6.3/142ce64dcd709a4b5f6e7d71305a31d3893d077/jackson-core-2.6.3.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.0.1/e813b8722c387b22e1adccf7914729db09bcb4a9/httpcore-4.0.1.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics/2.5.5/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics/2.5.5/res:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.robolectric/robolectric-resources/3.1-SNAPSHOT/945b87482365c347080c5b78fd268f1bd8567bd4/robolectric-resources-3.1-SNAPSHOT.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics-core/2.3.8/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics-core/2.3.8/jars/classes.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.springframework.android/spring-android-rest-template/1.0.1.RELEASE/e132d929bd181941f79b0d63edafb8a86ae6fd33/spring-android-rest-template-1.0.1.RELEASE.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.6.3/5c4fcae53dd82e2c549b8322d78c6ff47c94c8a8/jackson-databind-2.6.3.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/design/23.3.0/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/design/23.3.0/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/cardview-v7/23.3.0/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.android.support/cardview-v7/23.3.0/jars/classes.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-analysis/5.0.1/e286fbee48efacb4e7c175f7948d9d8b2ab52352/asm-analysis-5.0.1.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protobuf-java/2.6.1/d9521f2aecb909835746b7a5facf612af5e890e8/protobuf-java-2.6.1.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.6.0/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.6.0/jars/classes.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/org.robolectric/shadows-httpclient/3.1-SNAPSHOT/6b20423f62a6afa8c8eaefa7735f13fa7599497c/shadows-httpclient-3.1-SNAPSHOT.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/com.ximpleware/vtd-xml/2.11/ee5bcf62c1acf76434ee9f1c67a840bafef72a6d/vtd-xml-2.11.jar:/Users/guilhermecastro/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-basement/8.4.0/res:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-basement/8.4.0/jars/classes.jar:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/sourceFolderJavaResources/test/enem/debug:/Users/guilhermecastro/Documents/appprova-android/app/build/intermediates/sourceFolderJavaResources/enem/debug:/Users/guilhermecastro/Documents/appprova-android/build/generated/mockable-android-23.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 com.appprova.core.activity.AnswerActivityTest,testWrongAnswer 
Exception in thread "pool-3-thread-1" java.lang.VerifyError: Bad type on operand stack 
Exception Details: 
    Location: 
    com/parse/ParsePinningEventuallyQueue.resume()V @20: putfield 
    Reason: 
    Type 'bolts/Task$TaskCompletionSource' (current frame, stack[1]) is not assignable to 'bolts/TaskCompletionSource' 
    Current Frame: 
    bci: @20 
    flags: { } 
    locals: { 'com/parse/ParsePinningEventuallyQueue' } 
    stack: { 'com/parse/ParsePinningEventuallyQueue', 'bolts/Task$TaskCompletionSource' } 
    Bytecode: 
    0x0000000: 2ab6 0028 9900 1f2a b400 1a01 b600 2a57 
    0x0000010: 2ab8 002b b500 1a2a b400 1a01 b600 2a57 
    0x0000020: a700 0a2a b800 2bb5 001a 2ab7 000c 57b1 
    0x0000030:           
    Stackmap Table: 
    same_frame(@35) 
    same_frame(@42) 

    at com.parse.Parse.getEventuallyQueue(Parse.java:616) 
    at com.parse.Parse.access$800(Parse.java:42) 
    at com.parse.Parse$1.call(Parse.java:410) 
    at com.parse.Parse$1.call(Parse.java:407) 
    at bolts.Task$3.run(Task.java:249) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

java.lang.VerifyError: Bad type on operand stack 
Exception Details: 
    Location: 
    com/parse/ParseQuery.checkIfRunning(Z)V @37: putfield 
    Reason: 
    Type 'bolts/Task$TaskCompletionSource' (current frame, stack[1]) is not assignable to 'bolts/TaskCompletionSource' 
    Current Frame: 
    bci: @37 
    flags: { } 
    locals: { 'com/parse/ParseQuery', integer, 'java/lang/Object' } 
    stack: { 'com/parse/ParseQuery', 'bolts/Task$TaskCompletionSource' } 
    Bytecode: 
    0x0000000: 2ab4 0005 594d c22a b400 0499 000d bb00 
    0x0000010: 2f59 1230 b700 31bf 1b99 000f 2a04 b500 
    0x0000020: 042a b800 32b5 0003 2cc3 a700 084e 2cc3 
    0x0000030: 2dbf b1         
    Exception Handler Table: 
    bci [7, 42] => handler: 45 
    bci [45, 48] => handler: 45 
    Stackmap Table: 
    append_frame(@24,Object[#266]) 
    same_frame(@40) 
    same_locals_1_stack_item_frame(@45,Object[#267]) 
    chop_frame(@50,1) 


    at com.parse.OfflineObjectStore.getAsync(OfflineObjectStore.java:73) 
    at com.parse.CachedCurrentUserController$5$1.then(CachedCurrentUserController.java:240) 
    at com.parse.CachedCurrentUserController$5$1.then(CachedCurrentUserController.java:219) 
    at bolts.Task$14.run(Task.java:796) 
    at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105) 
    at bolts.Task.completeAfterTask(Task.java:787) 
    at bolts.Task.continueWithTask(Task.java:599) 
    at bolts.Task.continueWithTask(Task.java:610) 
    at com.parse.CachedCurrentUserController$5.then(CachedCurrentUserController.java:219) 
    at com.parse.CachedCurrentUserController$5.then(CachedCurrentUserController.java:216) 
    at com.parse.TaskQueue.enqueue(TaskQueue.java:69) 
    at com.parse.CachedCurrentUserController.getAsync(CachedCurrentUserController.java:216) 
    at com.parse.CachedCurrentUserController.getAsync(CachedCurrentUserController.java:105) 
    at com.parse.ParseUser.getCurrentUserAsync(ParseUser.java:883) 
    at com.parse.Parse$3.then(Parse.java:430) 
    at com.parse.Parse$3.then(Parse.java:426) 
    at bolts.Task$14.run(Task.java:796) 
    at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105) 
    at bolts.Task.completeAfterTask(Task.java:787) 
    at bolts.Task.continueWithTask(Task.java:599) 
    at bolts.Task.continueWithTask(Task.java:610) 
    at com.parse.Parse.initialize(Parse.java:426) 
    at com.parse.Parse.initialize(Parse.java:364) 
    at com.appprova.core.app.AppProvaApplication.onCreate(AppProvaApplication.java:40) 
    at com.appprova.core.app.AppProvaApplication_.onCreate(AppProvaApplication_.java:38) 
    at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:160) 
    at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:454) 
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:252) 
    at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:193) 
    at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:56) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:159) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 


Process finished with exit code 255 
+0

Vasiliys Antwort ist korrekt. Robolectric hilft bei der Durchführung von Android-Tests mit JVM, ist aber kein Allheilmittel. Einige Dinge müssen Sie auf realen Geräten oder zumindest Emulatoren testen. Wie er vorgeschlagen hat, sollten Sie die Parse-Abhängigkeit von der gesamten Anwendung umbrechen, und in diesem Fall können Sie die Anwendung mit mockigem Parse testen. Allerdings, wenn Sie die Integration mit Parse testen möchten, sollte es Instrumententest sein –

+0

Ok, Lesen von Kommentaren unter der Antwort Ich denke, ich werde eine andere Antwort geben –

Antwort

0

nach bestem Wissen, wenn Sie Tests ausführen Robolectric Test Läufer verwendet wird, wird es Ihnen Anwendungsklasse instanziiert und seine onCreate() Methode ausführen.

Nun, in dieser Methode initiieren Sie Parse, aber Parse SDK hängt wahrscheinlich von Android-Framework, aber es gibt keine - Robolectric ersetzt Teil der Android-Klassen mit seinen eigenen Implementierungen, und lässt andere nicht implementiert. Dies ist wahrscheinlich die Ursache für die Ausnahme, die Sie beobachten.

Sie könnten versuchen, die angegebene Problemumgehung here zu verwenden und eine "Test" -Version Ihrer Anwendungsunterklasse bereitzustellen, die Parse SDK nicht initialisiert (wahrscheinlich sollten Sie alle Interaktionen mit diesem SDK beim Komponententest trotzdem vortäuschen).

Folgende Frage des edit:

Wenn Sie einen Blick auf this question nehmen, werden Sie feststellen, dass diese Ausnahme wahrscheinlich, weil Parse SDK gegen einige Klassen kompiliert wurde geworfen wird, die durch Robolectric „verspottet“ werden. Mit anderen Worten, Abhängigkeitsklassen werden gefunden, aber ihr Bytecode unterscheidet sich von den erwarteten.

Jetzt könnten Sie gehen und versuchen, einen Workaround für dieses Problem zu finden (was überhaupt nicht trivial wäre), aber ich sehe keinen Grund, dies zu tun. Wenn ich es richtig verstanden habe, möchten Sie die Integration Ihrer Anwendung in Parse testen, was in Ordnung ist. Sie benötigen jedoch nicht das eigentliche Parse-SDK, um das zu tun - Sie könnten es (und IMHO sollten es) nachahmen. Andernfalls hängt Ihr Komponententest von der Funktionalität dieses SDK ab, was im Allgemeinen eine schlechte Idee ist und zu "flockigen" Tests führen würde. Wenn Sie dieses SDK für Komponententests vortäuschen, müssen Sie es nicht wirklich in der Unterklasse von Application initialisieren, und mein erster Rat gilt immer noch.

+0

Das Problem ist nicht mit Robolectric unimplementierten Methoden verwandt. –

+0

@GuilhermeTorresCastro, hat nicht das Problem mit nicht implementierten Methoden gesagt, aber das Problem ist, dass Parse SDK wahrscheinlich Android Framework Klassen, die nicht vorhanden sind, wenn Sie Tests mit Robolectric ausführen. Haben Sie versucht, die Application-Klasse "test" wie im Link beschrieben bereitzustellen? – Vasiliy

+0

Das Verwenden der Testanwendung funktioniert, aber ich kann meine Klassen, die Parse verwenden, nicht testen. Das ist der Schwerpunkt der Verwendung von Robolectric. Und das Problem bezieht sich nicht auf ** Android-Framework-Klassen, die nicht vorhanden sind, wenn Sie Tests mit Robolectric ** ausführen. –

0

Eines der Probleme mit Parse Verwendung, die Sie erweitern müssen ParseObject. Es gibt zwei Ansätze, wie man es angehen kann.

Schnittstellen für Kernobjekte

interface User{} 

interface UserCreator { 
    @NonNull 
    User createUser(); 
} 

und Klassen Umsetzung in Speicherschicht

public class ParseUser extends ParseObject implements User {} 

public class ParseUserCreator {} 

wir diesen Ansatz hatten in einem Projekt und ich war ständig füllen, dass es komplex ist und nicht bequem. Immerhin fand ich einen Artikel, der meine Füllung bewies.

"Vervielfältigung" Kernobjekte class User {}

und in der Speicherschicht

class ParseUser { 
    public void fromUser(@NonNull final User user){} 
    @NonNull 
    public User toUser(){} 
} 

class Storage { 
    @NonNull 
    public User loadUser() { 
     ParseUser user = ...; 
     return 
    } 
} 

Dieser Ansatz, den ich viel mehr mögen, aber zur gleichen Zeit, ich bin nicht zuversichtlich, dass es der beste Ansatz ist. Beide Varianten verstecken sich vollständig Parse von Rest-Anwendung, die Code-Reiniger macht und ersetzt Parse, wenn Sie sich entschieden, mit einem anderen Framework oder Bibliothek zu gehen.

Glückliche Codierung!

Verwandte Themen