안드로이드에서 테스트 코드를 작성 후 실행할 때 자신의 빌드타입에 맞춰서 테스트를 진행하고 싶은 경우가 있을 것이다.
나의 경우 Debug 환경과 Release 환경에서 모두 테스트를 진행해보고 싶었고, 가끔 Release 에서만 발생하는 버그가 존재했기에 Release 도 테스트를 진행하려고 하였다.
하지만 이상하게도 Build Variants 를 Release 로 바꾸어 Android Test 를 진행하려고 하면 자꾸 Android Test 폴더가 사라지는 문제가 가 발생하였고, 이를 해결하기 위한 방법을 찾았다.
# TestBuildType 설정
방법은 생각보다 간단했다.
자신이 테스트하려고 하는 모듈의 Build.gradle.kts 로 이동하여 android Scope 내에 testBuildType 을 설정해주면 되는 것이었다.
Module - build.gradle.kts 에 testbuildType 설정한 모습
위처럼 testBuildType 을 Release 로 설정하면 다음과 같이 BuildVarientType 을 Release 타입으로 변경했을때 AndroidTest 폴더를 확인할 수 있게 된다.
단, 이러는 경우 한 가지 귀찮은 부분이 생긴다.
debug 를 테스트 할때는 testBuildType 을 "debug" 로 입력해줘야하고, release 는 "release" 로 매번 입력해줘야한다.
여간 귀찮은 일이 아니다.
그렇기에 나는 Gradle Task 와 확장을 통해 TestBuildType 을 동적으로 변경하고, 명령어를 통한 손쉬운 테스트를 진행할 수 있게 처리하였다.
# Gradle Task 등록 및 TestBuildType 명령어에 맞춰 동적 변경
우선 Project - Build.gradle.kts 로 이동한다.
그 다음 ext Scope 를 코드 최상위에 선언해주고, 내에서 변수를 설정해준다.
이름은 아무렇게나 설정하고, 설정값은 프로젝트의 프로퍼티 testBuildType 으로 설정해준다. 기본값도 추가 설정한다.
그리고 모듈에는 다음과 같이 입력해준다.
다음은 태스크를 등록할 단계이다.
마찬가지로 Project - Build.gradle.kts 에서 with(tasks) 스코프도 최상위에 선언해주고 아래와 같이 명령어를 등록해주자.
우선 register 를 통해 명령어를 task 에 등록해주자. 이름은 각자 원하는 대로 설정하면 된다
그리고 내부에 exec 블록 내에서 commandline 함수를 통해 실행될 명령어들을 설정해주도록 한다.
설정된 DataModuleDebugAndroidTestTask 를 실행하면 다음과 같은 작업이 진행된다
- 커맨드 명령어로 ./gradlew :data:connectedDebugAndroidTest -PtestBuildtype=debug 가 실행된다.
- 그래들이 실행되며 Data 모듈의 안드로이드 테스트가 실행되며, testBuildType 속성을 debug 로 설정한다.
ReleaseAndroidTestTask 의 경우에도 비슷하지만 이것은 testBuildType 을 release 로 설정하므로, 명령어만 실행하면 Release AndroidTest 가 실행된다.
이렇게 2가지 태스크는 각각 실행시킬 수 있고, 이를 한 번에 실행시키고 싶은 경우 DataModuleAndroidTestTask 를 실행하면 된다.
DataModuleAndroidTestTask 는 depensOn 으로 설정된 두 태스크에 의존하기 때문에, 두 태스크를 먼저 순서대로 실행하기 때문이다.
이렇게 TestBuildType 과 동적으로 테스트를 실행하는 법을 알아보았다.
이 게시글에서는 쉬운 테스트 방법 뿐이 아닌 태스크 등록 방법도 알려주었으니, 이를 이용하여 추후 다른 명령어들을 추가하고 개발 편의성을 증대시키면 좋을 것이다.
끝 !