자바생
article thumbnail
Published 2022. 8. 4. 21:10
gradle task를 이용하여 Test 분리 Test
728x90

발단

testcontainers를 공부하면서 unit test, integration test에 관심을 가지게 됐습니다

그래서 나중에 unit test만 실행시키고, integration test만 실행시키는 방법이 없을까해서 구글링을 하다가 찾게 되어 글을 쓰고자 합니다

 

build.gradle 수정

def test = tasks.named('test') {
    useJUnitPlatform() {
        excludeTags "integration"
    }
    testLogging {
        events "PASSED", "FAILED", "SKIPPED"
    }
}

def integration = tasks.register("integration", Test) {
    useJUnitPlatform {
        includeTags "integration"
    }
    testLogging {
        events "PASSED", "FAILED", "SKIPPED"
    }
}

tasks.named("check") {
    dependsOn integration
}

스크립트의 간단한 설명을 드리겠습니다

 

test

./gradlew clean test 를 입력하면 integration이라는 태그를 제외한 테스트를 진행합니다.

 

integration

./gradlew clean integration 를 입력하면 integration 태그만을 테스트합니다

 

check

./gradlew clean check 를 입력하면 test → integration 테스트를 진행합니다

 

@Tag 어노테이션 사용

integration test를 진행하기 위해서는 application-test.yml 파일을 이용해야하기 때문에 @ActiveProfiles를 사용해야합니다.

또한, @Tag을 이용하여 integration을 나타내줍니다

하지만 모든 integration test에 아래와 같은 어노테이션을 매번 붙이는 것이 귀찮기 때문에 integration test를 위한 추상 클래스를 만들어서 해당 클래스를 상속하면 됩니다

@ActiveProfiles("test")
@SpringBootTest
@Transactional
@Tag(value = "integration")
///...

 

integration test를 위한 추상 클래스 생성

모든 integration에 어노테이션을 붙이는 것이 매우 귀찮은 일이기 때문에 추상 클래스를 생성하여 integration test에 필요한 설정들을 모아놓고 해당 클래스를 상속하도록 합니다

@ActiveProfiles("test")
@SpringBootTest
@Transactional
@Tag(value = "integration")
public abstract class AbstractIntegrationTest {
}

 

 

Test 결과

 

./gradlew clean test

 

./gradlew clean integration

 

./gradlew clean check

 

 

터미널에서 CLI를 통해 통합 테스트 실행 시 환경변수는 어떻게 설정할 수 있나요?

YAPP 프로젝트에서 저는 jasypt 라이브러리를 이용하여 암호화를 했습니다. 그래서 test yml에 jwt나 s3의 jasypt로 암호화한 키 값들이 들어있습니다. 통합 테스트 실행 시 jasypt 키 값을 넣어줘야하는데 어떡할까요?

./gradlew clean integration 할 때 앞 쪽에 “[키 값을 받을 변수]=키 값” 을 넣어주시면 됩니다

PASSWORD=key ./gradlew clean integration

 

REFERENCES

gradle Task 설정

728x90

'Test' 카테고리의 다른 글

[kerdy] 테스트 시간 최적화 및 sourceSets를 사용하여 테스트 분리  (4) 2023.08.29
Testcontainers 설정  (0) 2022.07.30
Testcontainers?  (0) 2022.07.30
profile

자바생

@자바생

틀린 부분이 있다면 댓글 부탁드립니다~😀

검색 태그