2015-10-16 7 views
6

ich mit folgendem Problem konfrontiert:Android Espresso UI-Test - Test fehlgeschlagen läuft: Instrumentation Lauf kann wegen 'java.lang.IllegalAccessError'

Wenn ich einen Stand-alone-UI Test mit Espresso zu starten versucht, mich immer Erhalten Sie die folgende Konsolenfehlermeldung, ohne den Test auszuführen.

Test running startedTest running failed: Instrumentation run failed due to 'java.lang.IllegalAccessError' 
Empty test suite. 

Also habe ich versucht, Befehl auszuführen:

gradle -q dependencies 

und ich erhielt folgendes Ergebnis:

androidTestCompile - Classpath for compiling the androidTest sources. 
+--- com.android.support:support-annotations:23.0.1 
+--- com.android.support.test:runner:0.3 
| +--- com.android.support.test:exposed-instrumentation-api-publish:0.3 
| +--- junit:junit:4.12 
| | \--- org.hamcrest:hamcrest-core:1.3 
| \--- com.android.support:support-annotations:22.2.0 -> 23.0.1 
+--- com.android.support.test:rules:0.3 
| \--- com.android.support.test:runner:0.3 (*) 
+--- com.android.support.test.espresso:espresso-core:2.1 -> 2.2 
| +--- com.android.support.test.espresso:espresso-idling-resource:2.2 
| +--- com.squareup:javawriter:2.1.1 
| +--- javax.inject:javax.inject:1 
| +--- org.hamcrest:hamcrest-library:1.3 
| | \--- org.hamcrest:hamcrest-core:1.3 
| +--- com.android.support.test:rules:0.3 (*) 
| +--- org.hamcrest:hamcrest-integration:1.3 
| | \--- org.hamcrest:hamcrest-library:1.3 (*) 
| +--- com.google.code.findbugs:jsr305:2.0.1 
| +--- javax.annotation:javax.annotation-api:1.2 
| \--- com.android.support.test:runner:0.3 (*) 
+--- com.android.support.test.espresso:espresso-intents:2.2 
| \--- com.android.support.test.espresso:espresso-core:2.2 (*) 
+--- com.android.support.test.espresso:espresso-web:2.2 
| +--- org.ccil.cowan.tagsoup:tagsoup:1.2 
| +--- com.android.support:support-annotations:22.2.0 -> 23.0.1 
| \--- com.android.support.test.espresso:espresso-core:2.2 (*) 
+--- com.android.support.test.uiautomator:uiautomator-v18:2.1.1 
+--- com.android.support.test.espresso:espresso-contrib:2.2 
| +--- com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework:2.0 
| | \--- org.hamcrest:hamcrest-core:1.3 
| +--- com.android.support:support-v4:22.2.0 
| | \--- com.android.support:support-annotations:22.2.0 -> 23.0.1 
| +--- com.android.support:recyclerview-v7:22.2.0 
| | +--- com.android.support:support-annotations:22.2.0 -> 23.0.1 
| | \--- com.android.support:support-v4:22.2.0 (*) 
| \--- com.android.support.test.espresso:espresso-core:2.2 (*) 
\--- com.android.support:multidex-instrumentation:1.0.1 

Ich versuchte, die eine Lösung zu diesem Thema, aber ohne Glück zu finden.

Tests fail after Espresso 2 upgrade (failed: Instrumentation run failed due to 'java.lang.IllegalAccessError')

Ich weiß nicht, was genau ich sollte aktualisieren Testarbeits zu machen.

Hier ist die app.gradle Konfigurationsdatei

android { 
     compileSdkVersion 23 
     buildToolsVersion "23.0.0" 

     defaultConfig { 
      applicationId "test.my.app" 
      minSdkVersion 18 
      targetSdkVersion 23 
      versionCode 1 
      versionName "1.0" 
      testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
      // Enabling multidex support. 
      multiDexEnabled true 
     } 
     buildTypes { 
      release { 
       minifyEnabled false 
       proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      } 
     } 
     lintOptions { 
      abortOnError false 
     } 
     packagingOptions { 
      exclude 'LICENSE.txt' 
      exclude 'META-INF/LICENSE.txt' 
      exclude 'META-INF/NOTICE.txt' 
     } 
    } 


    repositories { 
     jcenter() 
     mavenCentral() 
     maven { url "https://repo.commonsware.com.s3.amazonaws.com" } 
     maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } 
     maven { url "https://jitpack.io" } 
    } 

    dependencies { 
     compile fileTree(dir: 'libs', include: ['*.jar']) 
     compile 'com.android.support:appcompat-v7:23.0.1' 
     compile 'com.google.android.gms:play-services:7.8.0' 
     compile 'com.mcxiaoke.volley:library:1.0.18' 
     compile 'com.orhanobut:logger:1.11' 
     compile 'com.google.code.gson:gson:2.3.1' 
     compile 'com.android.support:design:23.0.1' 
     // UI TESTING DEPENDENCIES 
     androidTestCompile 'com.android.support:support-annotations:23.0.1' 
     androidTestCompile 'com.android.support.test:runner:0.3' 
     androidTestCompile 'com.android.support.test:rules:0.3' 
     //androidTestCompile 'com.android.support.test:testing-support-lib:0.1' 
     androidTestCompile 'com.android.support.test.espresso:espresso-core:2.1' 
     androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2' 
     androidTestCompile 'com.android.support.test.espresso:espresso-web:2.2' 
     androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' 
     androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2' 
     androidTestCompile('com.android.support:multidex-instrumentation:1.0.1') { 
      exclude group: 'com.android.support', module: 'multidex' 
     } 
     // ORM DATABASE DEPENDENCIES 
     compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' 
     // STETHO CORE 
     compile 'com.facebook.stetho:stetho:1.1.1' 
     compile 'com.facebook.stetho:stetho-urlconnection:1.1.1' 
     compile 'com.facebook.stetho:stetho-okhttp:1.1.1' 
     // GOOGLE ANALYTICS 
     compile 'com.google.android.gms:play-services-analytics:7.8.0' 
     // JODA TIME FOR ANDROID 
     compile 'net.danlew:android.joda:2.8.2' 
     // SECURE SHARED PREFERENCES 
     compile 'com.scottyab:secure-preferences-lib:0.1.3' 
     // MATERIAL DIALOG 
     compile 'com.avast:android-styled-dialogs:2.2.0' 
     // SQL CIPHER 
     compile 'com.commonsware.cwac:sqlcipher-for-android:3.3.1' 
     // HTML PARSER 
     compile 'org.jsoup:jsoup:1.8.3' 
     // MULTIDEX SUPPORT 
     compile 'com.android.support:multidex:1.0.1' 
     // SECOND MATERIAL DIALOG 
     compile('com.afollestad.material-dialogs:core:[email protected]') { 
      transitive = true 
     } 
     compile('com.afollestad.material-dialogs:commons:[email protected]') { 
      transitive = true 
     } 
     // ANDROID BOOTSTRAP 
     compile 'com.beardedhen:androidbootstrap:2.0.0' 

    } 

Und Probe der Testklasse:

@RunWith(AndroidJUnit4.class) 
public class SignInActivityTest extends ActivityInstrumentationTestCase2<SignInActivity> { 

    public TestHelper tl = new TestHelper(); 
    public SignInActivityTest() { 
     super(SignInActivity.class); 
    } 

    @Before 
    public void setUp() throws Exception { 
     super.setUp(); 
     injectInstrumentation(InstrumentationRegistry.getInstrumentation()); 
     SignInActivity lActivity = getActivity(); 
    } 

    // Insert scenario methods here 
    @Test 
    public void processTest() throws InterruptedException { 

     // TODO: strings which are inserted into inputs should be defined as the string constants 
     // Discuss it with Jan Sedlacek. 
     tl.insertTextIntoInput(R.id.login_txv_username, "test"); 
     tl.insertTextIntoInput(R.id.login_txv_password, "test"); 
    } 

} 

Was soll ich bitte diese Arbeit machen ändern? Ich werde mich für jede Hilfe freuen.

+0

hast du es geschafft, das zu beheben? Ich laufe auf das gleiche Problem. Mein Test bestand eigentlich darin, stattdessen AndroidTestCase zu erweitern. –

+0

Ich leide an dem gleichen Problem. Irgendeine Lösung dafür? –

Antwort

0

ActivityInstrumentationTestCase2 ist veraltet Sie ActivityTestRule stattdessen verwenden:

@RunWith(AndroidJUnit4.class) 
public class SignInActivityTest { 
    @Rule 
    public ActivityTestRule<SignInActivity> mActivityRule = new ActivityTestRule(SignInActivity.class); 

    public TestHelper tl = new TestHelper(); 

    @Before 
    public void setUp() throws Exception { 
     //currently you don't use Activity instance in your tests 
     //I just put it here as an example how to get the activity from ActivityTestRule 
     SignInActivity lActivity = mActivityRule.getActivity(); 
    } 

    // Insert scenario methods here 
    @Test 
    public void processTest() throws InterruptedException { 
     tl.insertTextIntoInput(R.id.login_txv_username, "test"); 
     tl.insertTextIntoInput(R.id.login_txv_password, "test"); 
    } 

    @After 
    public void tearDown() throws Exception { 
     //do some stuff if needed 
    } 
} 
1

Dies ist ein Gradle Fehler mit MultiDex, diskutiert wie in Android issue 194609:

m ... @ felixschulze.de:
... es scheint, dass die Abhängigkeit 'multiidex' der App selbst und der androidTestCompile apk hinzugefügt wird :(

See: https://android.googlesource.com/platform/tools/base/+/studio-1.5/build-system/gradle-core/src/main/groovy/com/android/build/gradle/internal/VariantManager.java#419

...

eine Abhilfe gefunden, fügen Sie diese zu Ihrer build.gradle Datei:

// Workaround for Multidex bug in gradle-android-plugin 
// Replace Multidex dependency with some dummy dependency to avoid dex problems 
// @see https://code.google.com/p/android/issues/detail?id=194609 
project.getConfigurations().all { config -> 
    if (config.name.contains("AndroidTest")) { 
     config.resolutionStrategy.eachDependency { DependencyResolveDetails details -> 
      if (details.requested.name == "multidex") { 
       details.useTarget("de.felixschulze.teamcity:teamcity-status-message-helper:1.2") 
      } 
     } 
    } 
} 

Und Sie MultiDexTestRunner nicht verwenden.

-1

Dies bedeutet, dass Sie ein Problem in Gradle-Datei haben. Sie verwenden falsche Abhängigkeiten.

Ich benutze Robotium und JUnit 4 my dependebcies:

dependencies { 
    androidTestCompile fileTree(dir: 'libs', include: 'robotium-solo-5.5.4.jar') 
    androidTestCompile 'junit:junit:4.12' 
    androidTestCompile 'com.android.support.test:runner:0.4' 
    // Set this dependency to use JUnit 4 rules 
    androidTestCompile 'com.android.support.test:rules:0.4' 
} 
0

ich in ein sehr ähnliches Problem lief.

Mine wurde durch eine nicht erfasste InterruptedException in einigen Worker Thread verursacht, die den Testprozess gestoppt. Der Stacktrace erscheint in der Android Monitor ...Ich konnte mein Problem lösen, indem ich die Ausnahme abfing.