개요
- 실행할 때마다 랜덤 값을 사용한다.
- 실행할 때마다 조건이 달라진다.
- 이런 경우에는 테스트를 여러 번 반복해서 진행하면 좋다.
같은 값들을 가지고 테스트 반복하기
@RepeatedTest
@DisplayName("스터디 만들기")
@RepeatedTest(value = 5, name = "{displayName}, {currentRepetition}/{totalRepetitions}")
void repeatTest(RepetitionInfo repetitionInfo) {
log.info("현재 테스트 반복 횟수 : " + repetitionInfo.getCurrentRepetition());
log.info("총 테스트 반복 횟수 : " + repetitionInfo.getTotalRepetitions());
}
- value : 테스트 반복 횟수
- name : 테스트 명
- {displayName} : @DisplayName 에서 설정한 테스트 명을 가져올 수 있다.
- {currentRepetition} : 현재 테스트 반복 횟수
- {totalRepetitions} : 총 테스트 반복 횟수
- ex) 스터디 만들기, 2/5
- RepetitionInfo 타입의 인자를 받을 수 있다.
다른 값들을 가지고 테스트 반복하기
@ParameterizedTest
@DisplayName("스터디 만들기")
@ParameterizedTest(name = "{index} {displayName} message={0}")
@ValueSource(strings = {"하나", "둘", "셋", "넷"})
@NullSource
@EmptySource
void parameterizedTest(String message) {
log.info(message);
}
@DisplayName("스터디 만들기")
@ParameterizedTest(name = "{index} {displayName} limit={0}")
@ValueSource(ints = {10, 20, 40})
void parameterizedTest(int limit) {
log.info(limit);
}
@DisplayName("true, false 값을 같이 리턴한다")
@ParameterizedTest
@CsvSource(value = {"1:true", "2:true", "3:true", "4:false"}, delimiter = ':')
void set_contains_true_false(int element, boolean expected) {
assertThat(numbers.contains(element)).isEqualTo(expected);
}
- name : 테스트 명
- {index} : 인덱스(1부터 시작)
- {displayName} : @DisplayName 에서 설정한 테스트 명을 가져올 수 있다.
- message={0} : 파라미터를 값을 받는다. (현재 파라미터가 하나 이기 때문에 인덱스는 0)
- ex) 2 스터디 만들기 message=둘
- @ValueSource : 리터럴 값의 단일 배열을 지정 가능 (단일 인수 제공)
- @NullSource : null 인수 제공
- @EmptySource : 비어있는 인수 제공
- @CsvSource : 인수 목록을 쉼표로 구분된 값(즉, CSV 리터럴) 으로 표현 가능