[Java] JUnit ParameterizedTest input 여러개 테스트 돌리기
0. 목차
1. 개요
2. 여러개 테스트 한큐에 돌리기(ParamterizedTest)
3. 그외에도 이것저것
1. 개요
프리코스 2주차 2일째.
고난과 역경의 TDD 하다가
input 여러개 넣고 한큐에 테스트 돌리는 방법 찾다가 알게된거 정리해볼려고한다.
2. 여러개 테스트 한큐에 돌리기(@ParameterizedTest)
예를 들어서, 인자로 받은 숫자가 짝수인지 아닌지 테스트하는 테스트 코드를 작성했다고 해보자.
@Test
void check_odd_test() {
Integer input = 2;
boolean result = isOdd(input);
Assertions.assertThat(result).isTrue();
}
input의 값을 2로 지정하고 테스트가 통과했다.
하지만 나는 나를 스스로 믿지 못하고 테스트를 몇개 더 돌려보고 싶었는데,
직접 일일이 input 값을 변경하면서 테스트를 돌렸었다.
이렇게 멍청한 짓을 10번 정도 하다가,
분명 이거 똑똑하게 하는 방법 있을텐데. 라는생각이 들어서 이제서야 검색을 해봤다.
@ParameterizedTest
와 @ValueSource
를 활용하면 된다.
@ParameterizedTest
@ValueSource(ints = {"0", "2", "4", "6", "8", "12"})
void check_odd_test(int input) {
boolean result = isOdd(input);
Assertions.assertThat(result).isTrue();
}
이렇게 테스트 코드를 작성하게 되면,ValueSource
의 인자로 들어간 값들이 순서대로 check_odd_test의 인자값으로 들어간다.
이렇게 하면 한번에 여러개의 값을 테스트 해볼 수 있다.
3. ParameterizedTest 다른 활용들
ParameterizedTest
는 이외에도 다양한 활용이 가능하다.
3-1. NullSource
null
값이 들어갔을 때를 테스트 하기 위해 사용된다.
@ParameterizedTest
@NullSource
void isBlank_ShouldReturnTrueForNullInputs(String input) {
Assertions.assertThat(result).isBlank();
}
3-2. EmptySource
공백문자열이 들어갔을 때를 테스트 하기 위해 사용한다.
@ParameterizedTest
@EmptySource
void isBlank_ShouldReturnTrueForNullInputs(String input) {
Assertions.assertThat(result).isBlank();
}
3-3. NullAndEmptySource
이름은 And가 들어가지만 사실 Or의 역할임.
문자열이 null
또는 Empty
일 경우의 테스트를 위해 사용한다.
@ParameterizedTest
@NullAndEmptySource
void isBlank_ShouldReturnTrueForNullInputs(String input) {
Assertions.assertThat(result).isBlank();
}
3-4. EnumSource
Enum
타입을 인수로 전달 가능하다
@ParameterizedTest
@EnumSource(Day.class)
void check_odd_test(Day day) {
Integer input = day.getValue();
Assertions.assertThat(input > 0 && input < 8).isTrue();
}
만약 Enum
전체가 아닌 일부만 사용하고 싶다면 아래와 같이 하면된다.
@ParameterizedTest
@EnumSource(value = Day.class, names = {"MONDAY", "TUESDAY", "WEDNESDAY"})
void check_odd_test(Day day) {
Integer input = day.getValue();
Assertions.assertThat(input < 4).isTrue();
}
요렇게.
이외에도 굉장히 많은 활용법이 있는데,
나의 자그마한 블로그에 담기는 너무 방대하다.
이정도면 내가 쓸정도는 정리한 것 같다
혹시라도 더 궁금해진다면, 아래의 링크를 참고하자^^
https://www.baeldung.com/parameterized-tests-junit-5