Gradle 및 -D를 통해 내 테스트에 시스템 속성 제공하는 방법

dragonappear·2022년 7월 9일
2

Gradle

목록 보기
3/5

출처

제목: "[java] Gradle 및 -D를 통해 내 테스트에 시스템 속성을 제공하는 방법"
작성자: daplus.net
작성자 수정일: 
링크: http://daplus.net/java-gradle-%EB%B0%8F-d%EB%A5%BC-%ED%86%B5%ED%95%B4-%EB%82%B4-%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%97%90-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%86%8D%EC%84%B1%EC%9D%84-%EC%A0%9C%EA%B3%B5%ED%95%98%EB%8A%94/
작성일: 2022년7월9일

글 작성 계기

  • 환경변수로 주입해서 사용하는 변수에는 JVM 옵션(-D)를 사용한다. CI 툴에서 빌드하기 전에 그래들 테스트를(./gradlew --info test) 돌리는데 테스트를 실패하길래 에러 로그를 봤더니, 변수에 @Value 주입이 안된다는 메시지가 나왔다.
  • 오류 메시지를 보고 테스트 옵션에 -D 를 추가하여서 테스트를 진행하였는데, 그래도 @Value에 값을 못읽어온다.
  • 그래서 그래들 빌드에서 테스트 환경을 따로 설정을 해줘야 하나? 싶어서 구글링 한 결과 위 출처의 글을 보고 문제를 해결하였다.

-P vs -D

  • -P 플래그는 gradle 속성용이고, -D 플래그는 JVM 속성용이다.
  • 테스트가 새 JVM에서 분기 될 수 있기 때문에 gradle에 -D 인수는 테스트로 전파되지 않는다.

그래서 gradle 파일에서 따로 설정을 해줘야 한다.

  1. -P와 함께 전달하여 들어오는 gradle 속성을 기반으로 하는 경우
test{
	systemProperty "youtube.api.key", project.getProperty("youtube.api.key")
}
  1. -D를 통해 전달하는 경우
systemProperty "youtube.api.key", System.getProperty("youtube.api.key")

모든 시스템 속성을 테스트에 보내는 방법

task integrationTest(type: Test) {
    useTestNG()
    options {
        systemProperties(System.getProperties())
    }
}

필요한 속성만 전달하는 방법

task integrationTest(type: Test) {
    // ... Do stuff here ...
    systemProperties System.getProperties().subMap(['PROP1', 'PROP2'])
}

위 방법에서 gradle의 JVM에 존재하는 경우에만 PROP1,PROP2가 전달된다.

0개의 댓글