작성
·
65
0
@DisplayName("파라미터 테스트")
@ParameterizedTest(name = "{index} {displayName} message={0}")
@ValueSource(ints = {10, 20, 40})
void parameterizedTest(Study study){
System.out.println(study.getLimit());
}
Junit5 테스트 반복하기 2부에서 이 부분 질문드리려 합니다.
강의에서는 Study 타입으로 받아서 객체를 생성하고 getLimit으로 값 가져오는 것까지 묵시적으로 진행이 잘 되었습니다만, 제 환경에서는
```java
Error converting parameter at index 0: No built-in converter for source type java.lang.Integer and target type com.example.testpractice.Study
org.junit.jupiter.api.extension.ParameterResolutionException: Error converting parameter at index 0: No built-in converter for source type java.lang.Integer and target type com.example.testpractice.Study
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
```
와 같은 에러가 발생해서 Junit이나 JDK의 버전에 따라 스펙이 바뀌었는지 궁금해져서 질문드립니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
woo님, JUnit5에서 @ParameterizedTest
를 사용할 때, 파라미터 타입 변환에 관한 문제를 겪고 계신 것 같습니다. 이 경우, Study
객체로 직접 변환할 수 있는 자동 변환기가 없기 때문에 발생한 오류입니다. 두 가지 해결 방법을 제안드릴 수 있습니다:
Custom Converter 사용: @ConvertWith
를 사용하여 명시적으로 변환기를 지정하는 방법입니다. 이를 통해 원하는 형태로 파라미터를 받을 수 있도록 합니다. 예를 들어,
@ParameterizedTest
@ValueSource(ints = {10, 20, 40})
void parameterizedTest(@ConvertWith(StudyConverter.class) Study study) {
System.out.println(study.getLimit());
}
여기서 StudyConverter
는 SimpleArgumentConverter
를 상속받아 구현해야 합니다.
@MethodSource
사용: 직접 Study
객체를 생성해 리스트를 반환하는 메서드를 사용하여 파라미터를 전달할 수 있습니다.
@ParameterizedTest
@MethodSource("studyProvider")
void parameterizedTest(Study study) {
System.out.println(study.getLimit());
}
static Stream<Study> studyProvider() {
return Stream.of(new Study(10), new Study(20), new Study(40));
}
이 두 방법 중 하나로 파라미터 변환 문제를 해결해보시기 바랍니다. JUnit이나 JDK의 스펙 자체가 크게 변동되기 보다는, 대부분의 문제는 변환기를 선언하는 방법에서 발생하는 경우가 많습니다. 추가로, JUnit5와 JDK의 최신 버전을 사용하는지 확인해보세요.
이상이 도움이 되셨길 바랍니다!
참고: JUnit5 Parameterized Tests