인자 값들의 소스
인자 값 타입 변환
인자 값 조합
참고
package com.example.testingweb.validatingforminput;
public class Study {
private StudyStatus status;
private int limit;
private String name;
public Study(int limit, String name) {
this.limit = limit;
this.name = name;
}
public Study(int limit) {
this.limit = limit;
}
public int getLimit() {
return limit;
}
public StudyStatus getStatus() {
return this.status;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Study{" +
"status=" + status +
", limit=" + limit +
", name='" + name + '\\'' +
'}';
}
}
@DisplayName("스터디 만들기")
@ParameterizedTest(name = "{index} {displayName} message = {0}")
@ValueSource(ints = {10, 20, 40})
void parameterizedTest(@ConvertWith(StudyConverter.class) Study study) {
System.out.println(study.getLimit());
}
static class StudyConverter extends SimpleArgumentConverter{
@Override
protected Object convert(Object source, Class<?> targetType) throws ArgumentConversionException {
assertEquals(Study.class, targetType, "Can only convert to Study");
return new Study(Integer.parseInt(source.toString()));
}
}
ArgumentsAggregator 확장해서 2개의 인자값 받기
@DisplayName("스터디 만들기")
@ParameterizedTest(name = "{index} {displayName} message = {0}")
@CsvSource({"10, '자바스터디'", "20, 스프링"})
void parameterizedTest(@AggregateWith(StudyAggregator.class) Study study) {
System.out.println(study);
}
// 반드시 static inner 클래스거나 public여야 한다.
static class StudyAggregator implements ArgumentsAggregator {
@Override
public Object aggregateArguments(ArgumentsAccessor accessor, ParameterContext context) throws ArgumentsAggregationException {
return new Study(accessor.getInteger(0), accessor.getString(1));
}
}