728x90
재직중인 회사에 이전에 작업된 부분중에 테스트 필터링이 적용되어 있는 부분을 확인하였다. 이 부분에 대하여 공부 겸 정리를 할려고한다.
Tag annotation
공식문서의 설명은 이렇다.
Tags are a JUnit Platform concept for marking and filtering tests. The programming model for adding tags to containers and tests is defined by the testing framework. For example, in JUnit Jupiter based tests, the @Tag annotation (see Tagging and Filtering ) should be used.
즉, Tag 어노테이션의 목적은 테스트에 어떤 테스트인지 표기하는 동시에 필터링하는 것입니다.
Tag 어노테이션 사용 사례
아래는 여러개를 동시에 적용
Filtering
가끔 테스트를 하다보면
특정 테스트만 실행하고 싶은 경우
가 있습니다. 특정 feature에 대해서만 테스트를 하고 싶다거나, 시간이 오래걸리는 통합 테스트는 제외시키고 테스트하고 싶다거나 말이죠. 이런 경우에 필터링해서 실행시킬 수 있습니다. 이를 위해서는 gradle 수정이 필요합니다.
위의 task 안에 inclueTag와 excludeTag 값을 통해 설정할 수 있습니다.
예시같이 설정한 경우, unit Tag 가 들어가면서 bar Tag 가 들어가지 않은 경우의 테스트를 수행하게 됩니다.
하지만 위와 같이 적용 시 gradle 설정에만 의존하여 테스트를 구성해야함
*// build.gradle*
*// `gradle test`: integration tag가 붙은 테스트는 제외*
tasks.named('test') {
useJUnitPlatform {
excludeTags 'integration'
}
}
*// `gradle integrationTest`: integration tag가 붙은 테스트만 수행*
task integrationTest(type: Test) {
useJUnitPlatform {
includeTags 'integration'
}
}
이를 탈피하기 위해 위와 같이 적용 가능
위의 설정을 풀어보자면
- integration tag가 붙지 않은 테스트 실행: gradle test
- integration tag가 붙은 테스트 실행: gradle integrationTest
사용하면서 느낀 점은 꼭 필요할때 써야하는데 불필요하게 붙는 경우가 많은 것 같다(테스트 코드를 제외시킬거라면 굳이 작성할 필요가 있을까..)
나의 경우에는 필요하지 않다 판단되면 disabled처리를 이용하는 편이다.
728x90
'코드 > dev' 카테고리의 다른 글
mariadb(mysql) 테이블 깨짐 복구 (Table 'product_images' is marked as crashed and should be repaired) (2) | 2023.11.22 |
---|---|
java dateTime 타임존 (2) | 2023.11.22 |
비동기처리 시 Spring security 문제 (0) | 2023.11.16 |
저장소에 올라간 브랜치 되돌리기 (2) | 2023.11.15 |
spring AOP & AspectJ (1) | 2023.11.15 |