Docker화된 Spring Boot 애플리케이션 테스트
물론 Docker 이미지가 작동하는지 확인하고 싶으므로 Testcontainers 🤩을 사용하여 테스트합니다.
스포일러 경고! 👇
로저비나스 / 스프링 부트 도커
🐳 도커를 사용한 스프링 부트
준비가 된? 갑시다!
1) Spring Initialzr에서 시작하여 Webflux 및 Kotlin으로 빈 Spring Boot 프로젝트를 생성합니다.
2) 그런 다음 이 간단한 테스트를 추가합니다.
@SpringBootTest(webEnvironment = RANDOM_PORT)
class ApplicationTests {
@LocalServerPort
private var port: Int = 0
@Test
fun `should say hello`() {
val responseBody = WebClient.builder()
.baseUrl("http://localhost:$port").build()
.get().uri("/hello")
.exchangeToMono { response ->
assertThat(response.statusCode()).isEqualTo(HttpStatus.OK)
response.bodyToMono(String::class.java)
}.block()
assertThat(responseBody).isEqualTo("hello!")
}
}
3) 그리고 우리는 이 간단한 구현을 추가합니다...
@RestController
class HelloController {
@GetMapping("/hello")
fun hello() = "hello!"
}
... 그리고 이제 우리의 테스트는 🟩👏입니다.
4) 다음으로 도커 이미지를 생성해야 합니다... 🤔
일부 대안은 Spring Boot with Docker 및 Topical Guide on Docker에 문서화되어 있습니다.
다행히도 Spring Boot's Gradle plugin의 작업
bootBuildImage
을 사용하는 것만큼 쉽습니다../gradlew bootBuildImage
여태까지는 그런대로 잘됐다! 😁
이제 생성된 도커 이미지를 테스트해야 합니다...
5) 먼저 org.unbroken-dome.test-sets를 사용하여 container-test라는 새 테스트 소스 루트를 만듭니다.
plugins {
id("org.unbroken-dome.test-sets") version "4.0.0"
}
testSets {
"container-test"()
}
tasks.get("container-test").dependsOn("bootBuildImage")
bootBuildImage
작업은 container-test
작업보다 먼저 실행되므로 현재 소스 코드에서 방금 빌드한 도커 이미지를 항상 테스트하고 있는지 확인합니다.6) 그런 다음 Testcontainers 및 JUnit5를 사용하여 테스트를 만듭니다.
@Testcontainers
class ApplicationContainerTests {
companion object {
private const val appPort = 8080
@Container
private val app = KGenericContainer(System.getProperty("docker.image"))
.withExposedPorts(appPort)
}
@Test
fun `should say hello`() {
// ...
}
}
7) 마지막으로 해야 할 일은 테스트를 실행하기 전에 시스템 속성 docker.image의 값을 설정하는 것입니다.
tasks.withType<Test> {
useJUnitPlatform()
systemProperty("docker.image", "${project.name}:${project.version}")
}
${project.name}:${project.version}
는 bootBuildImage
작업에서 사용하는 기본값이므로그게 다야! 즐거운 코딩하세요! 💙
Reference
이 문제에 관하여(Docker화된 Spring Boot 애플리케이션 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rogervinas/testing-a-dockerized-spring-boot-application-4h2h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)