[android] Android Gradle의 testCompile 및 androidTestCompile에 대해 혼동

나는 테스트 세계에 익숙하지 않고 Android 테스트 세계에 더 익숙합니다. 안드로이드 테스트에 도움이되는 Robolectric에 대한 연구를하는 동안 가장 혼란스러운 점이 있습니다. 때로는 웹 testCompile에서 Robolectric을 참조 할 때 다른 사람들이 androidTestCompile. 확실히 둘 다 유효 할 수 없습니까?

누군가 Robolectric을 사용할 때 사용되어야하는 것과 둘 다의 차이점을 설명 할 수 있습니까?



답변

단순히 testCompile단위 테스트의 구성 ( src / test에 있음 )이며 androidTestCompile테스트 API ( src / androidTest에 있음 )에 사용됩니다. 단위 테스트를 작성하려고하므로 testCompile.

업데이트 : 둘 사이의 주요 차이점은 test소스 세트는 일반 Java JVM에서 androidTest실행 되는 반면 소스 세트 테스트는 Android 기기 (또는 에뮬레이터)에서 실행된다는 것입니다.


답변

질문에 답하려면-robolectric에 testCompile 사용

robolectric은 모든 안드로이드 장치 동작을 조롱하는 JVM에서 실행되기 때문입니다.

testCompile 및 androidTestCompile은 Android 플러그인에서 제공하는 작업을 실행하는 동안 gradle이 사용하는 “일반적인”Android 폴더입니다.

androidTestDebug는 androidTest 폴더에서 테스트를 선택하고 testDebug는 테스트 폴더에서 테스트를 선택합니다.

다시 이것들은 관례에 의해서만 이러한 구성에 대한 소스 세트를 제공 할 수 있습니다.

참고 : 에스프레소는 robolectric에서 벗어나려고하는 멋진 라이브러리입니다. 🙂


답변

// 단위 테스트

testCompile 'junit:junit:4.12'

위 코드는 android studio의 build.gradle 파일에있는 JUnit 4의 종속성입니다. JUnit이 JVM에서 실행되고 실행하는 데 장치 또는 에뮬레이터가 필요하지 않기 때문에 testCompile이 있음을 알 수 있습니다. 이는 또한 JUnit 테스트를 실행하는 데 애플리케이션 컨텍스트가 필요하지 않으며 필요한 경우 “MOCK”해야 함을 의미합니다.

// 구조화 된 단위 테스트

androidTestCompile('com.android.support.test:runner:0.5', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

이제 여기에 androidTestCompile이 표시됩니다. 이번에는 테스트에 기기 또는 에뮬레이터를 사용하려고하기 때문에 계측 테스트입니다. 더 명확한 설명을 위해 developer.android.com에서 읽는 것이 좋습니다.


답변

JVM 테스트 또는 단위 테스트에 대한 종속성을 추가하려면 (테스트는 Java 환경에만 의존하므로 Android 환경이 필요하지 않습니다).

testCompile 지시문을 사용합니다. 예:

dependencies {
    testCompile gradleTestKit()
}

계측 테스트에 대한 종속성을 추가하기 위해 (이 테스트는 주로 Android 환경에 의존) androidTestCompile지시문 을 사용합니다 .


답변