🧐 서론
테스트를 돌릴 때 통합테스트는 Spring을 올리기 때문에 생각보다 긴 시간을 잡아먹습니다.
현재 프로젝트에서 통합테스트가 별로 없음에도 통합테스트와 유닛테스트 구분 없이 한 번에 돌리다보니
시간이 비효율적이라고 느꼈고, 환경을 분리해야겠다고 생각이 들어 내용을 정리해보겠습니다.
참고
참고로 gradle은 Groovy 가 아닌 Kotlin 으로 진행된 점 참고하여 봐주시길 바랍니다!
😎 본론
build.gradle.kts 설정
sourceSets {
create("intTest") {
compileClasspath += sourceSets.main.get().output
runtimeClasspath += sourceSets.main.get().output
}
}
val intTestImplementation by configurations.getting {
extendsFrom(configurations.implementation.get())
}
configurations["intTestRuntimeOnly"].extendsFrom(configurations.runtimeOnly.get())
configurations["intTestImplementation"].extendsFrom(configurations.testImplementation.get())
val integrationTest = task<Test>("integrationTest") {
description = "Runs integration tests."
group = "verification"
testClassesDirs = sourceSets["intTest"].output.classesDirs
classpath = sourceSets["intTest"].runtimeClasspath
shouldRunAfter("test")
}
tasks.check { dependsOn(integrationTest) }
사실 이 설정이 98% 입니다.
제가 참고한 곳은 공식사이트 에서 보고 진행했습니다.
혹시 Groovy 언어를 사용하시는 분은 공식사이트에 있는 코드를 보시면 될 것 같습니다.
sourceSets: "intTest" 디렉토리를 build할 수 있도록 등록해줍니다.
configurations...: runtimeOnly, testImplementation 디펜던시를 intTest 에서 읽을 수 있도록 등록해줍니다.
tests.check: integrationTest 변수에 등록된 task 정보로 task를 실행할 수 있도록 등록해줍니다.
통합테스트에서만 별도로 디펜던시를 추가하고 싶으시면 아래 코드처럼 추가하시면 됩니다.
dependencies {
intTestImplementation("junit:junit:4.13") // 추가하고 싶은 의존성
}
application.yml 추가
저의 경우 application-test.yml 로 설정하게 되면 class에 @profile("test") 을 붙여주는 것 보단
개별로 resources 안에서 관리하는 게 좋을 것 같아서 이렇게 yml을 별도로 추가하였습니다.
😊 결론
통합테스트 / 유닛테스트 둘 다 작성하지만, 통합테스트를 계속 돌리는 것보다 유닛테스트를 돌릴 경우가 더 많다고 느꼈고,
통합테스트가 진행되는 시간이 오래 걸려 이처럼 분리를 진행해봤습니다.
잘못된 부분이 있으면 댓글 남겨주시면 감사하겠습니다!
참고
'JVM > Spring' 카테고리의 다른 글
[Spring] Spring Cloud Feign logging 설정 (0) | 2022.07.13 |
---|---|
[Spring] Error creating bean with name 'configurationPropertiesBeans' defined in class path resource - Spring Cloud (0) | 2022.07.13 |
[Spring] Exception 어떻게 처리할까? (0) | 2022.06.26 |
[Spring] enum으로 @Secured 권한 관리 (0) | 2022.06.18 |
[Spring] @PropertySource yaml 파일 Load 하는 방법 (0) | 2022.06.16 |