Robolectric의 코드 커버리지 분석은 어떻게 수행하나요?
_____A1: Robolectric 테스트는 Android 환경을 에뮬레이트하는 단위 테스트 프레임워크로, 코드 커버리지는 테스트 실행 중 실제로 실행된 코드의 비율을 측정합니다. 이를 통해 어떤 부분의 코드가 테스트되었는지 파악할 수 있습니다.
Q2: Robolectric 테스트에서 코드 커버리지를 수집하기 위해 어떤 도구를 사용하나요?
A2: 주로 JaCoCo(Java Code Coverage)나 IntelliJ IDEA, Gradle과 연동된 커버리지 도구를 사용합니다. JaCoCo가 가장 널리 사용됩니다.
Q3: Robolectric과 JaCoCo를 연동해서 코드 커버리지를 측정하려면 어떻게 설정하나요?
A3:
1. build.gradle에 JaCoCo 플러그인 적용
```gradle
apply plugin: 'jacoco'
```
2. Robolectric 테스트에 JaCoCo 설정 추가
```gradle
jacoco {
toolVersion = "0.8.7"
}
test {
useJUnitPlatform() // JUnit5 사용 시
jacoco.includeNoLocationClasses = true
jacoco.excludes = ['jdk.internal.*']
}
```
3. coverage 리포트 생성 작업 추가
```gradle
jacocoTestReport {
dependsOn test
xml.enabled true
html.enabled true
}
sourceDirectories.setFrom files('src/main/java')
classDirectories.setFrom files('build/intermediates/classes/debug')
executionData.setFrom fileTree(dir: 'build/jacoco', include: ' /*.exec')
}
```
4. Gradle 명령어로 테스트 실행 및 리포트 생성
```bash
./gradlew testDebug jacocoTestReport
```
Q4: Robolectric 테스트 커버리지 분석 시 주의할 점은 무엇인가요?
A4:
- 바이트코드 조작 제한 확인 : JaCoCo가 일부 Android 바이트코드 조작을 제대로 커버하지 못할 수 있으므로, Java 코드 중심으로 커버리지를 확인하는 게 좋습니다.
- 테스트 범위 명확히 하기 : Robolectric은 JVM 환경에서 동작하므로, 실제 디바이스와 다르게 느껴질 수 있는 UI나 하드웨어 관련 코드는 제외하고 커버리지를 평가하는 게 정확합니다.
- 리소스 및 멀티모듈 프로젝트 설정 : 멀티모듈 프로젝트나 리소스가 많은 경우, sourceDirectories, classDirectories 경로를 정확히 지정해야 합니다.
Q5: Android Studio에서 Robolectric 커버리지를 쉽게 확인하는 방법은?
A5: Android Studio에서 Robolectric 테스트를 실행한 후, ‘Run’ 창의 ‘Coverage’ 탭에서 실행된 코드 커버리지 결과를 시각적으로 확인 가능합니다. ‘Edit Configurations’에서 ‘Enable code coverage’ 옵션을 활성화하면 손쉽게 커버리지 수집이 가능합니다.
Q6: Robolectric 코드 커버리지와 Espresso(Instrumentation) 커버리지는 어떻게 다르나요?
A6: Robolectric은 JVM에서 실행되므로 빠르고 단위 테스트용이며, JaCoCo 등 JVM용 커버리지 툴과 잘 연동됩니다. 반면 Espresso는 실제 디바이스 또는 에뮬레이터에서 동작하며, Android 프로파일러나 Firebase Test Lab 등 실제 실행 환경 기반 커버리지 수집 방식을 사용합니다.
---
요약하면, Robolectric 테스트 코드 커버리지 분석은 JaCoCo 같은 JVM 기반 커버리지 도구와 Gradle 플러그인을 활용해 테스트 실행 시 커버리지 데이터를 수집 및 보고서를 생성하는 방식으로 수행됩니다. 올바른 Gradle 설정 및 테스트 환경 구성이 중요합니다.
Robolectric 테스트의 코드 커버리지 분석을 수행하는 것은 일반 Android 테스트의 커버리지 측정과 유사하지만, 몇 가지 주의점과 설정 방법이 있습니다.
1. 커버리지 도구 선택 Android 프로젝트에서 가장 흔히 사용하는 커버리지 도구는 JaCoCo입니다.
JaCoCo는 Gradle과 쉽게 연동되며, JVM 기반 테스트와 Android Instrumentation 테스트 모두에 적용할 수 있습니다.
Robolectric 테스트는 JVM에서 돌아가기 때문에 JaCoCo로 커버리지 수집이 가능합니다.
2. 기본적인 JaCoCo 설정 프로젝트의 `build.gradle` 파일에서 JaCoCo를 활성화합니다.
예를 들어: ```groovy apply plugin: 'jacoco' jacoco { toolVersion = "0.8.8" // 원하는 버전 사용 } tasks.withType(Test) { finalizedBy jacocoTestReport // 테스트 후 보고서 생성 jacoco.includeNoLocationClasses = true } jacocoTestReport { dependsOn testDebugUnitTest // 테스트 결과 기반 reports { xml.enabled true html.enabled true } } ``` 여기서 `testDebugUnitTest`는 Robolectric 테스트가 실행되는 기본 Gradle 태스크입니다.
3. Robolectric 테스트와 커버리지 수집 Robolectric 테스트는 일반적으로 `src/test/java`에 위치하며, Gradle의 `testDebugUnitTest` 또는 단순히 `test` 태스크로 실행됩니다.
JaCoCo는 이 JVM 테스트 런너를 감지하여 커버리지 데이터를 생성합니다.
4. 커버리지 보고서 생성 `./gradlew jacocoTestReport` 명령어로 커버리지 보고서를 생성합니다.
생성된 보고서는 보통 `build/reports/jacoco/jacocoTestReport/html/index.html` 경로에서 확인할 수 있습니다.
여기서 테스트가 커버한 클래스와 메서드, 라인별 커버리지 정보를 시각적으로 확인할 수 있습니다.
5. 주의사항 및 팁 - Android 라이브러리 항목 제외 : Robolectric은 JVM 환경이므로 Android 프레임워크 코드는 포함되지 않습니다.
커버리지 분석 시에는 대개 애플리케이션 코드나 라이브러리 모듈에 집중합니다.
- mockito inline 또는 기타 mocking 프레임워크 사용 시 : 커버리지 누락 현상이 발생할 수 있는데, 이 경우 Gradle 위임과 Jacoco 및 Mockito 설정을 점검해야 합니다.
- multi-module 프로젝트 : 각 모듈별로 JaCoCo 보고서를 별도로 설정하거나, Jacoco 커버리지 병합 작업을 추가하여 통합 보고서를 만들 수 있습니다.
- Gradle 버전 및 플러그인 이슈 : Gradle과 Android Gradle Plugin 버전에 따라 Jacoco 설정 방법이나 테스트 태스크 이름이 다를 수 있으니, 공식 문서와 최신 정보를 참고하는 것이 좋습니다.
6. 예제 ```groovy android { ... testOptions { unitTests.all { jacoco { includeNoLocationClasses = true } } } } jacoco { toolVersion = "0.8.8" } tasks.withType(Test).configureEach { finalizedBy("jacocoTestReport") } tasks.register("jacocoTestReport", JacocoReport) { dependsOn("testDebugUnitTest") reports { html.required.set(true) xml.required.set(true) } val fileTree = fileTree("${buildDir}/intermediates/javac/debug/classes") classDirectories.setFrom(fileTree) sourceDirectories.setFrom(files("src/main/java")) executionData.setFrom(files("${buildDir}/jacoco/testDebugUnitTest.exec")) } ``` 이 설정을 적용하면 Robolectric unit test를 실행할 때 JaCoCo가 커버리지 정보를 수집하고, `jacocoTestReport` 태스크를 통해 보고서를 생성합니다.
--- 요약 : Robolectric 테스트에 대한 코드 커버리지 분석은 JaCoCo 같은 JVM용 커버리지 도구를 활용해 진행합니다.
Gradle 설정에 JaCoCo를 활성화하고, unit test 태스크와 연결하여 테스트 실행 시 커버리지 데이터를 수집 및 보고서를 생성할 수 있습니다.
JVM 환경에서 동작하는 Robolectric 특성상, Android Instrumentation 테스트와 달리 일반 JVM 단위 테스트 방식으로 커버리지가 수집됩니다.
작성자:
최서은 [비회원]
| 작성일자: 1년 전
2025-05-26 03:51:34
조회수: 560 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 560 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.