2015-10-16 15 views
6

mam do czynienia z następującym problemem:Android Espresso UI - Test uruchomiony powiodło się: bieg Instrumentation powiodło się z powodu „java.lang.IllegalAccessError”

Kiedy próbuje uruchomić test UI autonomicznego korzystania Espresso zawsze uzyskać następujący komunikat o błędzie konsoli bez uruchamiania testu.

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

więc próbowałem uruchomić polecenie:

gradle -q dependencies 

I i uzyskano następujące wyniki:

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 

próbowałem znaleźć jakieś rozwiązanie na ten temat, ale bez powodzenia.

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

nie wiem co dokładnie powinienem zaktualizować do pracy testowej.

Oto app.gradle plik konfiguracyjny

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' 

    } 

i przykładowe klasy Test:

@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"); 
    } 

} 

Co należy zmienić, aby ta roboczego proszę? Cieszę się z wszelkiej pomocy.

+0

udało Ci się to naprawić? Występuję w tym samym problemie. mój test faktycznie zastąpił AndroidTestCase. –

+0

Cierpię z powodu tego samego problemu. Jakieś rozwiązanie? –

Odpowiedz

0

ActivityInstrumentationTestCase2 jest przestarzała trzeba użyć ActivityTestRule zamiast:

@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

Jest to błąd Gradle z MultiDex, jak to omówiono w Android issue 194609:

m ... @ felixschulze.de: ... wydaje się, że zależność "multidex" jest dodawana do samej aplikacji i zestawu androidTestCompile: (

Patrz: 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

...

Znaleziono obejście, dodać to do pliku build.gradle:

// 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") 
      } 
     } 
    } 
} 

I nie używaj MultiDexTestRunner.

-1

Oznacza to, że masz problem z plikiem Gradle. Używasz niewłaściwych zależności.

używam robotium i 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

wpadłem na bardzo podobnym problemem.

Kopalnia została spowodowana przez nieprzechwycony InterruptedException w jakimś wątku roboczym, który zatrzymał proces testowania. Wskaźnik stacktrace pojawia się w Android Monitor ...Byłem w stanie rozwiązać mój problem, łapiąc wyjątek.

Powiązane problemy