Kotlin, Rest-assured 조합으로 통합 테스트 작성 시 JUnit 5에 @Tag 어노테이션을 사용하여 Test를 필터링한다.
JUnit 5 Tag
@Tag 어노테이션을 클래스 또는 메서드 수준에서 테스트를 필터링 할 수 있는 기능이다.
Used to declare tags for filtering tests, either at the class or method level; analogous to test groups in TestNG or Categories in JUnit 4. Such annotations are inherited at the class level but not at the method level.
참고 : https://junit.org/junit5/docs/current/user-guide/
Example
통합 테스트를 작성하다보면 개발중인 API와 실제 서비수 중인 API에 대하여 통합 테스트를 작성 할 수 있다. Kotlin Rest-assured를 사용하여 테스트 코드를 작성하면 아래와 같이 작성 할 수 있다.
@Tag("Production")
class ProductionApiTest {
@Test
fun api() {
Given {
queryParam("param", "test")
contentType(ContentType.JSON)
header("Authorization", "Header value"
log().uri()
} When {
get("{production test url}")
} Then {
statudCode(200)
contentType(ContentType.JSON)
body("status", "OK")
log().body()
}
}
}
보통은 package를 구분하여 서비스중인 API와 개발 중인 API에 대한 테스트 코드를 작성하고 Jenkins 등을 통하여 망별로 테스트를 별도로 실행한다. maven의 경우 실행 옵션에서 Tag에 사용할 값을 정의 하여 실행 할 수 있지만 Gradle에서는 별도의 설정으로 Tag옵션을 지정하여 필터링을 수핸한다.
build.gradle.kts
plugins {
......
}
dependencies {
......
}
task.withType<Test> {
useJunitPlatform()
}
task.register<Test>("productionTest") {
useJunitPlatform() {
includeTags("production")
}
}
task.register<Test>("developTest") {
useJunitPlatform() {
includeTags("develop")
}
}
테스트 코드로 작성한 @Tag에 값을 Gradle에 정의해주고 Gradle로 테스트 실행 시 아래와 같이 실행할 테스트 Tag 명을 명시해주면 해당 Tag의 테스트만 수행하게 된다.
$> gradlew clean productionTest
'dev > kotlin' 카테고리의 다른 글
[Kotlin] REST Assured로 통합 테스트 작성하기 (2) | 2024.09.25 |
---|