본문 바로가기

ANDROID/Testing

[Jacoco] Jacoco와 gradle로 프로젝트 코드 커버리지 확인하기(Gradle 3.6 버전 이상의 경우)

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 파일을 확인할 수 있고, 이를 통해 전체 프로젝트의 코드 커버리지 확인이 가능하다.

 

 프로젝트 폴더 내에 생성된 jacoco 리포트 파일.

 

index.html을 실행했을 때 보여지는 리포트 화면. 갈길이 멀다는 걸 함께 확인 할  수 있다..

 

전체 프로젝트는 물론 html 파일 내에서 브라우징해 상세 클래스들의 커버리지들도 확인 할 수 있으니 참고하자!

 

 

 

< 참조 >

 

https://www.androidhuman.com/lecture/quality/2016/02/13/jacoco_unit_test_android/

 

JaCoCo를 사용하여 안드로이드 프로젝트 유닛 테스트 커버리지 측정하기

#Android, #Koltin, and #Tesla

www.androidhuman.com

https://proandroiddev.com/unified-code-coverage-for-android-revisited-44789c9b722f

 

Unified Code Coverage for Android: Revisited

My post Setting up a unified coverage report in Android with Jacoco, Robolectric, and Espresso got a lot of readers in the last years but…

proandroiddev.com