발단
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
'Test' 카테고리의 다른 글
[kerdy] 테스트 시간 최적화 및 sourceSets를 사용하여 테스트 분리 (4) | 2023.08.29 |
---|---|
Testcontainers 설정 (0) | 2022.07.30 |
Testcontainers? (0) | 2022.07.30 |