1. 발단
testcontainers를 공부하면서 unit test, integration test에 관심을 가지게 됐습니다
그래서 나중에 unit test만 실행시키고, integration test만 실행시키는 방법이 없을까해서 구글링을 하다가 찾게 되어 글을 쓰고자 합니다
2. build.gradle 수정
<code />
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
}
스크립트의 간단한 설명을 드리겠습니다
2.1. test
./gradlew clean test 를 입력하면 integration이라는 태그를 제외한 테스트를 진행합니다.
2.2. integration
./gradlew clean integration 를 입력하면 integration 태그만을 테스트합니다
2.3. check
./gradlew clean check 를 입력하면 test → integration 테스트를 진행합니다
3. @Tag 어노테이션 사용
integration test를 진행하기 위해서는 application-test.yml 파일을 이용해야하기 때문에 @ActiveProfiles를 사용해야합니다.
또한, @Tag을 이용하여 integration을 나타내줍니다
하지만 모든 integration test에 아래와 같은 어노테이션을 매번 붙이는 것이 귀찮기 때문에 integration test를 위한 추상 클래스를 만들어서 해당 클래스를 상속하면 됩니다
<code />
@ActiveProfiles("test")
@SpringBootTest
@Transactional
@Tag(value = "integration")
///...
3.1. integration test를 위한 추상 클래스 생성
모든 integration에 어노테이션을 붙이는 것이 매우 귀찮은 일이기 때문에 추상 클래스를 생성하여 integration test에 필요한 설정들을 모아놓고 해당 클래스를 상속하도록 합니다
<code />
@ActiveProfiles("test")
@SpringBootTest
@Transactional
@Tag(value = "integration")
public abstract class AbstractIntegrationTest {
}
4. Test 결과
4.1. ./gradlew clean test

4.2. ./gradlew clean integration

4.3. ./gradlew clean check

4.4. 터미널에서 CLI를 통해 통합 테스트 실행 시 환경변수는 어떻게 설정할 수 있나요?
YAPP 프로젝트에서 저는 jasypt 라이브러리를 이용하여 암호화를 했습니다. 그래서 test yml에 jwt나 s3의 jasypt로 암호화한 키 값들이 들어있습니다. 통합 테스트 실행 시 jasypt 키 값을 넣어줘야하는데 어떡할까요?
./gradlew clean integration 할 때 앞 쪽에 “[키 값을 받을 변수]=키 값” 을 넣어주시면 됩니다
<java />PASSWORD=key ./gradlew clean integration
5. REFERENCES
'Test' 카테고리의 다른 글
[kerdy] 테스트 시간 최적화 및 sourceSets를 사용하여 테스트 분리 (4) | 2023.08.29 |
---|---|
Testcontainers 설정 (0) | 2022.07.30 |
Testcontainers? (0) | 2022.07.30 |