test - android junit @rule



에뮬레이터 connectedAndroidTest에 대한 JUnit Espresso의 Gradle java.lang.IncompatibleClassChangeError (1)

간단한 응답 :

이것은 java.lang.IncompatibleClassChangeError 에 대한 좋은 링크 인 것 같습니다. 그리고 당신이 CI에서 그것을 시도한다면 :

에뮬레이터가 대기 상태에서 완전히 부팅되지 않았기 때문에 테스트 준비가되지 않았고 시간 제한으로 인해 앱이 설치되지 않았기 때문에 테스트가 수행되지 않았으며 빌드가 실패했음을 알려주는 새로운 동작이 추가됨에 따라 빌드가 실패합니다.

adb wait-for-device adb -e shell getprop init.svc.bootanim adb wait-for-device 를 public 상태 에서이 스크립트 가 수행 할 stopped 상태 (완전히 부팅 됨)를 기다리는 루프로 대체하여 adb -e shell getprop init.svc.bootanim 을 점검 할 수 있습니다. 여기에 대한 자세한 정보 .

가능한 CI 문제, Double Espresso는 더 이상 사용되지 않으며 Espresso 2.0이 출시되었습니다.

CI 정보 및 테스트 없음 :

나는 Travis-ci에 대해 다른 질문에 대답했다. 유사한 오류가 있지만 사용 된 스크립트가 도청당했습니다. gradle installDebug --debug 를 실행하면 오류에 대한 자세한 내용을 알 수 있습니다 (여기에 로그 공유).

그러나 CI 서버에서 동일한 단계를 실행하면, 맞습니다. 2 분의 INSTALL_TIMEOUT 때문에 ShellCommandUnresponsiveException에 의한 InstallException이 표시됩니다. 환경 변수 ADB_INSTALL_TIMEOUT=6 # ADB_INSTALL_TIMEOUT=6 사용하여이 값을 늘릴 수 있지만, 지금은 문제가 아닙니다.

먼저 로컬에서 실행하고 있다면, -no-window (보기) 또는 -no-boot-anim (속도를 높이지만 에뮬레이터 대기 스크립트와 호환되지 않음)을 추가하거나 adb wait-for-device && sleep 300 (에뮬레이터가 완전히 부팅되었는지).

Espresso 소개 :

Double Espresso는 현재 Espresso 2.0을 사용할 수 있으므로 더 이상 사용되지 않습니다 . Double Espresso는 Espresso 1.1의 순수한 Gradle 포트이며 Jake Wharton은 2 주 전에 2.0 버전이 게시되면이를 더 이상 사용하지 않습니다.

그들은 wikiJavaDoc을 업데이트했습니다 (그들은 android.com으로 이동합니다) .

이제 Android 지원 리포지토리를 사용하여 최신 버전을 다운로드 할 수 있습니다.

그리고 Google 은 새로운 샘플을 발표했습니다.

샘플 전제 조건 : Android SDK v21, Android Build Tools v21.1.2, Android 지원 리포지토리.

이 샘플은 Gradle 빌드 시스템을 사용합니다. 프로젝트를 빌드하려면 프로젝트 디렉토리를 입력하고 ./gradlew 어셈블 명령을 사용하거나 Android Studio에서 "프로젝트 가져 오기"를 사용하십시오. ./gradlew connectedCheck를 사용하면 연결된 에뮬레이터 또는 장치에서 테스트를 실행할 수 있습니다.

Gradle 작업 정보 :

Android 작업테스트 실행 (Gradle Plugin User Guide) :

  • assemble 프로젝트의 결과물을 모으는 작업.
  • connectedCheck 연결된 장치 나 에뮬레이터가 필요한 검사를 실행합니다.

connectedCheck라는 앵커 태스크를 사용하여 연결된 장치가 필요한 검사가 시작됩니다. 이 작업은 androidTest 작업에 따라 다르므로 실행합니다. 이 작업은 다음을 수행합니다.

  • 응용 프로그램과 테스트 응용 프로그램이 빌드되었는지 확인하십시오 (assembleDebug 및 assembleTest에 따라 다름)
  • 두 앱 설치
  • 테스트 실행
  • 두 앱을 모두 제거하십시오.

그래서 나는 생각한다:

  • Espresso 2.0으로 마이그레이션하고 종속성 문제를 피하는 것이 좋은 순간입니다.
  • 에뮬레이터가 중지 된 상태가 될 때까지 기다려야 하고이 링크 를 이해하는 것이 좋습니다.
  • 특정 install* 작업이 필요하지 않으며 build ( lint 포함)로 assemble 을 대체하고 connectedCheck ( connectedAndroidTest 포함)를 사용할 수 있습니다.
  • 하나 이상의 ABI가 설치되어 있다면 하나를 선택해야합니다 (그리고 no로 응답해야합니다) : - echo no | android create avd -f -n test -t $ANDROID_TARGET -b $ANDROID_ABI - echo no | android create avd -f -n test -t $ANDROID_TARGET -b $ANDROID_ABI
  • 목표를 따르는 두 번째 단계로 선택한 CI 서버에서 샘플을 시험해 봅니다.

https://ffff65535.com

정적 메서드에 대한 간단한 단위 테스트 및 에뮬레이터에서 실행하고 있습니다. (목표는 클라우드 CI에서 실행되므로 에뮬레이터를 테스트하고 있습니다.)

Gradle 2.2.1 에뮬레이터 안드로이드 5.0

콘솔에서이 단계를 사용합니다.

  1. android create avd - 힘 - n 테스트 -t "android-21"
  2. 에뮬레이터 -avd 테스트 -no-skin -no-audio -no-window &
  3. 디바이스 대기 대기
  4. adb 셸 입력 키 이벤트 82 &
  5. gradle clean installDebug
  6. gradle connectedAndroidTest

build.gradle

dependencies {
    ...

    androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
        exclude group: 'com.squareup.dagger'
        exclude group: 'com.squareup.dagger:dagger:1.2.1'
    }
}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 21

        testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }

    sourceSets {
        androidTest.setRoot('src/androidTest')
    }
}

오류 로그는 다음과 같습니다.

Tests on test(AVD) - 5.0 failed: Instrumentation run failed due to 'java.lang.IncompatibleClassChangeError'

com.android.builder.testing.ConnectedDevice > hasTests[test(AVD) - 5.0] FAILED
No tests found.

이 오류는 무엇이 발생할 수 있습니까?





android-espresso