반응형
@ParameterizedTest
JUnit5에서 추가된 새로운 기능 중 하나이다.
매개변수를 사용해서 단일 테스트를 여러 번 실행할 수 있다.
먼저 @ParameterizedTest 를 사용하기 위해서는 pom.xml / build.gradle 에 Junit-jupiter-params의존성을 추가해주어야 한다.
Maven 의존성 추가
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
Gradle 의존성 추가
testCompile("org.junit.jupiter:junit-jupiter-params:5.7.0")
Example
public Class Example{
private set<Integer> numbers;
@BeforeEach
void setUp() {
numbers = new HashSet<>();
numbers.add(1);
numbers.add(1);
numbers.add(2);
numbers.add(3);
}
}
@ValueSource를 활용한 단순 값 비교
numbers 변수 안에 1,2,3 값이 들어있는지 확인하는 단위 테스트를 작성해보자
@Test
@DisplayName("numbers 1,2,3 값이 존재하는지 확인")
void contains() {
assertThat(numbers.contains(1)).isTrue();
assertThat(numbers.contains(2)).isTrue();
assertThat(numbers.contains(3)).isTrue();
}
위와 같이 작성했을 시에 asserThat 문이 중복되어 코드가 길어진다.
이를 @ParameterizedTest를 활용해서 중복 코드를 줄여보자
@ParameterizedTest
@ValueSource(ints = {1,2,3})
@DisplayName("numbers 1,2,3 값이 존재하는지 확인(중복제거)")
void is_SouldContainsNumberOneTwoThree(int num){
assertThat(numbers.contains(num)).isTrue();
}
@ValueSource를 사용하여 리터럴 값의 배열을 테스트 메서드로 전달할 수 있다.
위의 테스트케이스에서는 1,2,3 값이 아닌 다른 값이 들어가면 테스트 오류가 난다.
Ture, False 값으로 반환하는 테스트 케이스를 작성해보자.
@CsvSource를 활용하여 Ture, False 값 반환하기
@DisplayName("요구사항3) 1,2,3 값이면 Ture, 4,5면 Flase 반환")
@ParameterizedTest
@CsvSource(value = {"1,true","2,true","3,true","4,false","5,false"})
void contains_TrueOrFalse(int num, boolean expected) {
assertThat(numbers.contains(num)).isEqualTo(expected);
}
"1, true"에서 1은 int num, true는 boolean expected의 타입으로써 매개변수로 전달된다.
@CsvSource는 기본적으로 콤마', '가 구분 자이며, delimiter 속성을 추가해주면 구분자를 지정해줄 수 있다.
@CsvSource(value = {"1:true","2:true","3:true","4:false","5:false"}, delimiter = ':')
그 외에 @NullSource, @EmptySource, @EnumSource, @CsvFileSource, @MethodSource 등과의 어노테이션을 활용할 수 있다.
https://www.baeldung.com/parameterized-tests-junit-5
반응형
'Dev > Spring' 카테고리의 다른 글
스프링부트 logback 적용하기 (0) | 2022.07.24 |
---|---|
[SpringBoot] 테스트 케이스를 위한 설정파일 만들기 (0) | 2022.02.10 |
[SpringBoot] 스프링부트에서 캐싱하기 (Cache in Springboot) (0) | 2022.02.05 |
[Spring] Filter, Interceptor (0) | 2022.02.05 |
[Spring] AOP(Aspected-Oriented Programming) (0) | 2022.02.05 |
댓글