2015-10-16 36 views
6

tôi phải đối mặt với các vấn đề sau đây:Android Espresso UI thử nghiệm - Thử nghiệm chạy thất bại: Instrumentation chạy thất bại do 'java.lang.IllegalAccessError'

Khi tôi cố gắng để bắt đầu một thử nghiệm giao diện người dùng độc lập sử dụng Espresso i luôn nhận được thông báo lỗi bàn điều khiển sau mà không cần chạy thử nghiệm.

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

Vì vậy, tôi đã cố gắng để chạy lệnh:

gradle -q dependencies 

Và tôi thu được kết quả sau:

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 

tôi đã cố gắng tìm ra một số giải pháp về vấn đề này, nhưng nếu không có sự may mắn.

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

Tôi không biết chính xác mình nên cập nhật để làm bài kiểm tra.

Dưới đây là file cấu hình app.gradle

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' 

    } 

Và mẫu của lớp 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"); 
    } 

} 

gì nên tôi phải thay đổi để làm cho làm việc này xin vui lòng? Tôi sẽ vui mừng vì bất kỳ sự giúp đỡ nào.

+0

bạn có quản lý để sửa lỗi đó không? Tôi đang chạy vào cùng một vấn đề. thử nghiệm của tôi đã thực sự mở rộng AndroidTestCase thay thế. –

+0

Tôi đang gặp phải vấn đề tương tự. Bất kỳ giải pháp về điều đó? –

Trả lời

0

ActivityInstrumentationTestCase2 bị phản đối bạn phải sử dụng ActivityTestRule thay vì:

@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

Đây là một lỗi với MultiDex Gradle, như đã thảo luận trong Android issue 194609:

m ... @ felixschulze.de:
... có vẻ như phụ thuộc 'multidex' được thêm vào ứng dụng và APK androidTestCompile: (

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

...

Tìm thấy một workaround, thêm video này vào tập tin build.gradle của bạn:

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

Và, không sử dụng MultiDexTestRunner.

-1

Điều này có nghĩa là bạn gặp sự cố trong tệp Gradle. Bạn sử dụng phụ thuộc sai.

tôi sử dụng robotium và JUnit 4 dependebcies tôi:

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

Tôi chạy vào một vấn đề rất giống nhau.

Mỏ được gây ra bởi một số vô danh InterruptedException trong một số chuỗi công nhân đã ngừng quá trình thử nghiệm. Stacktrace hiển thị trong Android Monitor ...Tôi đã có thể giải quyết vấn đề của mình bằng cách bắt ngoại lệ.

Các vấn đề liên quan