JVM/Spring

[Spring] 통합테스트 환경 분리 설정 - Gradle Kotlin DSL

Hyo Kim 2022. 6. 30. 22:39
728x90
반응형

🧐 서론

테스트를 돌릴 때 통합테스트는 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.yml

저의 경우 application-test.yml 로 설정하게 되면 class에 @profile("test") 을 붙여주는 것 보단

개별로 resources 안에서 관리하는 게 좋을 것 같아서 이렇게 yml을 별도로 추가하였습니다.


😊 결론

통합테스트 / 유닛테스트 둘 다 작성하지만, 통합테스트를 계속 돌리는 것보다 유닛테스트를 돌릴 경우가 더 많다고 느꼈고,

통합테스트가 진행되는 시간이 오래 걸려 이처럼 분리를 진행해봤습니다.

 

잘못된 부분이 있으면 댓글 남겨주시면 감사하겠습니다!

 

참고

 

728x90
반응형