Android Gradle의 testCompile 및 androidTestCompile에 대해 혼동


87

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

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

답변:


120

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

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


감사. 이것이 제가 처음에 알아 낸 것입니다. 그러나 이것이 testCompile과 일부는 androidTestCompile과 함께 robolectric 의존성을 참조하는 경우입니다. 통합 테스트를 작성하는 데 도움이되는 라이브러리 아닌가요? 그렇다면 androidTestCompile로 참조하면 안되나요? 그러나 robolectric의 공식 가이드조차도 testCompile을 사용하도록 지시합니다. 죄송합니다.하지만이 시점에서 보시다시피 너무 혼란 스럽습니다.
Lucas

3
명명 규칙이 약간 이상합니다. 기본적으로 단위 테스트 (기기에서 실행되지 않는 테스트)를 작성하는 경우 'src / test'에 존재하므로 해당 종속성이 testCompile구성에 속합니다 . androidTestCompile구성에 추가 된 종속성 은 실제로 APK에 빌드되고 기기에 배포되는 'src / androidTest'의 소스에서만 사용할 수 있습니다.
Mark Vieira

방향을 알려 주셔서 감사합니다. 모든 질문에 답하지는 못했지만 연구하는 동안 도움이되었습니다. 당신이 말한 것을 명확히하기 위해, 단위 테스트는 테스트 폴더에있는 것만이 아닙니다 (기본적으로). 아이러니하게도 Google은 때때로 androidTest에있는 테스트를 단위 테스트라고도합니다. 물론 특정 테스트의 목적에 따라 다르지만 여전히 혼란을 더합니다.
Lucas

1
이것은 주로 의미론이므로 나는 그것에 매달리지 않을 것입니다. Roboelectric으로 작성된 많은 테스트는 통합 테스트이며 어쨌든 단위 테스트가 아닙니다. 즉,이 둘의 주요 차이점은 'src / test'는 표준 JVM의 개발자 컴퓨터에서 실행되고 'src / androidTest'는 APK로 패키징되어 실제 기기 (또는 에뮬레이터)에서 실행된다는 것입니다.
Mark Vieira

1
이전에 보신 'src / test'에 대한 지원은 단순히 표준 Gradle Java 플러그인을 통해 제공되는 것입니다. 따라서 빌드 플레이버 또는 유형에 대한 지원이 없었습니다. 이제 Android 플러그인은 단위 테스트를 완벽하게 지원하여 가변 단위 테스트 소스 세트를 포함합니다.
Mark Vieira 2015 년

3

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

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

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

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

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

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


1

// 단위 테스트

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에서 읽는 것이 좋습니다.


0

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

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

dependencies {
    testCompile gradleTestKit()
}

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.