Unit test를 도입하게 되면서 같이 도출하고 싶어 했던 지표는 물론 프로젝트의 코드 커버리지였다.
전반적인 프로젝트가 얼마나 테스트 되었는지, 어디가 테스트가 부족한지를 쉽게 알 수 있는 코드 커버리지 도출은
필요한 것이고 직접 눈으로 보고 싶은 것이기도 했다. (배그 한판이 끝날 때마다 OPGG를 리프레시하는 심정이랄까)
0. 실행환경
- 최근 Android studio와 함께 업데이트 된 최신 Gradle Version 3.6.1 이 사용되었다.
- 프로젝트의 언어는 Kotlin으로 짜여져있다.
1. 설정하기
app level의 gradle 코드에 아래 코드들을 추가한다.
- 기본설정
// jacoco와 application plugin 추가
apply plugin: 'com.android.application'
apply plugin: 'jacoco'
...
// jacoco의 toolVersion 추가.
// 20년 3월 23일 기준 jacoco의 최신 버전은 0.8.5이다.(19.10.12)
jacoco {
toolVersion = '0.8.5'
}
// Test 타입을 가진 모든 파일을 찾기 위해 includeNoLocationClasses를 true로 설정한다.
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
}
- testReport 설정
task coverageReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
// 코드를 통해 추가할 Gradle 기능의 디렉토리(group) 및 설명을 지정.
// (필수는 아닌 과정으로 보임)
group = "Reporting"
description = "Generate Jacoco coverage reports"
reports {
xml.enabled = true
html.enabled = true
}
// fileFilter, debugTree, mainSrc의 설정으로 커버리지 책정 및 디버깅에 사용할 프로젝트 파일들을 지정.
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
def debugTree = fileTree(dir: "$project.buildDir/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "$project.projectDir/src/main/java"
// 특정 Gradle Version부터 .from을 붙여주지 않으면 deprecated 경고를 볼 수 있으니
// .from을 붙이기를 권장한다.
sourceDirectories.from = files([mainSrc])
classDirectories.from = files([debugTree])
executionData.from = fileTree(dir: project.buildDir, includes: [
'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec'
])
}
설정을 마치면 gradle build를 진행하자.
2. Android Studio의 Gradle Menu로 진입, coverageReport 실행
Android Studio의 우측 Gradle 메뉴를 눌러 reporting 디렉토리의 coverageReport를 실행한다.
정상적으로 수행이 되고 나면 안드로이드 앱의 프로젝트 폴더 내 app/build/reports/coverageReport 위치에 생성된
index.html 파일을 확인할 수 있고, 이를 통해 전체 프로젝트의 코드 커버리지 확인이 가능하다.
전체 프로젝트는 물론 html 파일 내에서 브라우징해 상세 클래스들의 커버리지들도 확인 할 수 있으니 참고하자!
< 참조 >
https://www.androidhuman.com/lecture/quality/2016/02/13/jacoco_unit_test_android/
https://proandroiddev.com/unified-code-coverage-for-android-revisited-44789c9b722f
'ANDROID > Testing' 카테고리의 다른 글
[Testing/Unit-test] Context를 포함하는 ViewModel의 Unit Test (0) | 2022.01.14 |
---|---|
[Kotlin/UnitTesting] LiveData Mocking하기 (0) | 2022.01.06 |
[안드로이드] 람다 Function을 파라미터로 가지는 로직의 Unit Testing! (0) | 2021.01.11 |
[안드로이드/Firebase] adb를 Android studio 터미널에 설정하기, adb 이용해 Firebase event 디버깅하기 (0) | 2020.12.14 |
[Testing] 테스트 피라미드를 통해 테스팅의 세가지 범주 살펴보기 (0) | 2020.03.15 |