티스토리 뷰
1. @RepeatedTest
- 테스트를 반복해서 실행할 때 사용.
- 반복 횟수(value)와 반복 테스트 이름(name)을 설정할 수 있다
- displayName : @DisplayName 어노테이션으로 설정한 이름 가져오기
- currentRepetition : 현재 반복 횟수
- totalRepetitions : 전체 반복 횟수
- RepetitionInfo 타입의 인자를 받을 수 있다.
@DisplayName("스터디 만들기")
// @RepeatedTest(value = 10, name = "{displayName}, {currentRepetition}/{totalRepetitions}")
@RepeatedTest(value = 10, name = RepeatedTest.LONG_DISPLAY_NAME)
void repeatTest(RepetitionInfo repetitionInfo) {
System.out.println("repetitionInfo = " + repetitionInfo.getCurrentRepetition() + "/" +
repetitionInfo.getTotalRepetitions());
}
>> 실행 결과
@RepeatedTest 의 name 에서 displayName이 실행 결과에 표시되지 않을 때
다음과 같이 설정을 바꿔준다.
Build and run using, Run tests using 을 intelliJ로 설정
2. @ParameterizedTest
1) @ValueSource
- 프로퍼티 : ints, strings, booleans ...
- 파라미터를 인자로 받아서 파라미터 각각 테스트를 반복 실행할 때 사용
@DisplayName("이름 출력")
@ParameterizedTest(name = "{index} {displayName} name={0}")
@ValueSource(strings = {"mandy", "kessun", "hongseok"})
void parameterzedTest(String name) {
System.out.println("name = " + name);
}
>> 실행 결과
(1) @ConvertWith
- 파라미터를 인스턴스의 멤버변수에 할당해서 반복 테스트할 때 사용
- custom converter 를 만들어 @ValuSource 파라미터를 인스턴스의 멤버변수에 할당하기
SimpleArgumentConverter 를 상속받는 StudyConverter를 만들고
매개변수 source 를 통해 study 인스턴스를 만들어 반환하도록 정의한다.
(limit 를 파라미터로 받는 생성자 사용)
테스트 메소드에서는 @ConverWith 어노테이션에 converter를 설정
StudyConverter 에서
source 는 @ValuSource를 통해 넘어오는 파라미터이고
targerType Class 는 @ConverWith 어노테이션이 붙은 클래스 Study 이다.
파라미터가 1개일 때 사용
@DisplayName("스터디 만들기")
@ParameterizedTest(name = "{index} {displayName} name={0}")
@ValueSource(ints = {10, 20, 30})
void parameterzedTest(@ConvertWith(StudyConverter.class) Study study) {
System.out.println("limit = " + study.getLimit());
}
static class StudyConverter extends SimpleArgumentConverter {
@Override
protected Object convert(Object source, Class<?> targetType) throws ArgumentConversionException {
System.out.println(source.getClass());
System.out.println(targetType);
assertEquals(Study.class, targetType, "Can only convert to Study");
return new Study(Integer.parseInt(source.toString()));
}
}
>> 실행 결과
3) @CsvSource
- 한 번에 여러개의 파라미터를 받는 테스트를 반복할 때 사용
- Integer 값과 String 값을 받아 Study 인스턴스의 limit 와 name 필드에 각각 할당하기
(1) Integer, String 각각 파라미터로 받기
@DisplayName("스터디 만들기")
@ParameterizedTest(name = "{index} {displayName} name={0}")
@CsvSource({"10, '자바 스터디", "20, '스프링"})
void parameterzedTest(Integer limit, String name) {
Study study = new Study(limit, name);
System.out.println(study);
}
(2) ArgumentAccessor 사용
@DisplayName("스터디 만들기")
@ParameterizedTest(name = "{index} {displayName} name={0}")
@CsvSource({"10, '자바 스터디", "20, '스프링"})
void parameterzedTest(ArgumentsAccessor argumentsAccessor) {
Study study = new Study(argumentsAccessor.getInteger(0), argumentsAccessor.getString(1));
System.out.println(study);
}
(3) @AggregateWith (custom Aggregator 를 만들어 사용)
- ArgumentsAggregator 인터페이스를 구현하는 StudyAggregator 를 만들고
- 매개변수 accessor 에서 @CsvSource 의 파라미터를 꺼내 Study 인스턴스를 만들고 반환한다.
- 테스트 메소드에서 @AggregateWith 로 Aggregator 클래스를 매핑한다.
@DisplayName("스터디 만들기")
@ParameterizedTest(name = "{index} {displayName} name={0}")
@CsvSource({"10, '자바 스터디", "20, '스프링"})
void parameterzedTest(@AggregateWith(StudyAggregator.class) Study study) {
System.out.println(study);
}
static class StudyAggregator implements ArgumentsAggregator {
@Override
public Object aggregateArguments(ArgumentsAccessor accessor, ParameterContext context) throws ArgumentsAggregationException {
return new Study(accessor.getInteger(0), accessor.getString(1));
}
}
>> 실행 결과
4) @NullSource, @EmptySource, @NullAndEmptySource
- @NullSource : 파라미터에 null을 추가
- @EmptySource : 파라미터에 빈 값을 추가
- @NullAndEmptySource : @NullSource와 @EmptySourc를 조합한 composed annotation
@DisplayName("이름 출력")
@ParameterizedTest(name = "{index} {displayName} name={0}")
@ValueSource(strings = {"mandy", "kessun", "hongseok"})
// @NullSource
// @EmptySource
@NullAndEmptySource
void parameterzedTest(String name) {
System.out.println("name = " + name);
}
>> 실행 결과
출처
https://www.inflearn.com/course/the-java-application-test 더 자바, 애플리케이션을 테스트하는 다양한 방법(백기선)
'Test > JUnit 5' 카테고리의 다른 글
[JUnit 5] 9. junit-platform.properties (0) | 2021.12.09 |
---|---|
[JUnit 5] 8. 테스트 인스턴스(@TestInstance)와 테스트 순서(@TestMethodOrder) (0) | 2021.12.09 |
[JUnit 5] 5. 태깅과 필터링 (0) | 2021.12.08 |
[JUnit 5] 4. 조건에 따라 테스트 실행하기(assumeTrue, assumingThat, @Enabled___ 와 @Disabled___) (0) | 2021.12.08 |
[JUnit 5] 2. 테스트 이름 표기하기(@DisplayNameGeneration, @DisplayName) (0) | 2021.12.08 |
- Total
- Today
- Yesterday
- named query
- 폴링 발행기 패턴
- MySQL
- java8
- mockito
- 도메인 모델링
- 스프링 예외 추상화
- JPA
- http
- Ubiquitous Language
- Stream
- 트랜잭셔널 아웃박스 패턴
- 계층형 아키텍처
- 이벤트 스토밍
- HTTP 헤더
- spring rest docs
- 클린코드
- 육각형 아키텍처
- 스프링 카프카 컨슈머
- 학습 테스트
- ATDD
- TDD
- H2
- 마이크로서비스 패턴
- Spring
- Git
- Spring Data JPA
- Spring Boot
- clean code
- kafka
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |