-
[JUnit5] @ParameterizedTest, @ValueSource, @CsvSource스프링 2023. 11. 1. 17:56
@ParameterizedTest
JUnit5에서 추가된 새로운 기능 중 하나이다.
매개변수를 사용해서 단일 테스트를 여러 번 실행할 수 있다.
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 등과의 어노테이션을 활용할 수 있다.
728x90'스프링' 카테고리의 다른 글
[Spring] springBoot2.4 이상에서의 application설정 (0) 2023.12.29 [Spring] Error - Parameter 0 of constructor in ~ required a bean of type 'java.lang....' that could not be found. (0) 2023.12.29 Service계층의 의존 (0) 2023.08.30 mocking 아규먼트 불일치 (0) 2023.07.30 Mock에대한 고찰 (0) 2023.07.23