[TIL] JUnit 5 사용자 정의 테스트 명명엔 @DisplayName
by 배부른코딩로그이 글은 스프링의 JUnit 5를 기준으로 작성하지만, 스프링뿐만 아니라 자바스크립트나 파이썬 등 프로그래밍에서 테스트 코드는 항상 중요하다. 의도가 분명하고 깔끔한 테스트를 작성하는 것은 추후 변경이나 유지보수에 필요한 비용을 크게 줄일 수 있다.
JUnit 5부터 테스트를 작성함에 있어서 유용한 어노테이션들이 추가됐다. 그 중에 하나가 바로 @DisplayName 이다. JUnit 4에서 테스트 클래스나 메서드를 작성하면, 테스트 항목에 대한 이름은 클래스명이나 메서드명으로 표시됐다. 이는 가독성 측면에서 매우 좋지 않았고, 오히려 무엇을 테스트하려고 했더라? 하면서 다시 되돌아보게 만들었다. 이를 개선하고자 JUnit 5부터 @DisplayName이 등장했다.
@DisplayName
@DisplayName
어노테이션을 선언함으로써 테스트 클래스나 메서드명이 아닌 사용자가 정의한 명칭으로 변경할 수 있는 기능을 제공한다. @DisplayName 사용자 정의 이름을 사용함에 따라 테스트 각 항목에 대해 자세히 설명할 수 있기 때문에 다양한 테스트 항목 각각에 대한 가독성을 높일 수 있다. 사용자 정의 디스플레이 이름은 공백과 특수문자, 이모지까지 다양하게 사용 가능하다.
- 출처 -
[공식문서] https://junit.org/junit5/docs/current/user-guide/
[참고자료] https://mkyong.com/junit5/junit-5-display-names/
unit.org 공식 페이지에 나와있는 예제가 대박이다. 잘 사용하면, 정말 자세하고 명료한 테스트를 구성할 수 있을 것 같다. 그 예시는 아래와 같다. @ParameterizedTest라는 어노테이션을 활용하여 테스트 명칭과 함께 테스트에 필요한 항목을 집어넣을 수 있다. JUnit 4에서도 됐었는데 내가 몰랐던 걸 수 있지만 그래도 신박하다..!! 물론, 그 반대일 경우는 더 복잡해보일 수 있겠다 싶다 ㅎㅎ..
class DisplayNameGeneratorDemo {
@Nested
@IndicativeSentencesGeneration(separator="->", generator=DisplayNameGenerator.ReplaceUnderscores.class)
class A_year_is_a_leap_year {
@Test
void if_it_is_divisible_by_4_but_not_by_100() {
}
@ParameterizedTest(name = "Year {0} is a leap year.")
@ValueSource(ints = { 2016, 2020, 2048 })
void if_it_is_one_of_the_following_years(int year) {
}
}
}
+-- DisplayNameGeneratorDemo [OK]
+-- A year is a leap year [OK]
| +-- A year is a leap year -> if it is divisible by 4 but not by 100. [OK]
| +-- A year is a leap year -> if it is one of the following years. [OK]
| | +-- Year 2016 is a leap year. [OK]
| | +-- Year 2048 is a leap year. [OK]
' ' '-- Year 2020 is a leap year. [OK]
2021.05.20(목) TIL
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] IntelliJ cannot resolve symbol 에러 해결 (0) | 2021.05.26 |
---|---|
[TIL] JUnit 5 계층 구조의 테스트 작성엔 @Nested (0) | 2021.05.21 |
[TIL] Java String, StringBuffer, StringBuilder 뽀개기 (1) | 2021.05.18 |
[TIL] String 이어붙이기 (0) | 2021.05.14 |
[TIL] Spring boot - Location of application.yml (0) | 2021.05.14 |
블로그의 정보
배부른코딩로그
배부른코딩로그