inflearn logo
강의

Course

Instructor

More Java, different ways to test your applications

Repeating JUnit 5 Tests Part 2

테스트 반복하기 관련 질문입니다

105

woo

10 asked

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의 버전에 따라 스펙이 바뀌었는지 궁금해져서 질문드립니다

java junit mockito testcontainers jmeter chaos-monkey archunit 소프트웨어-테스트

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
woo님, JUnit5에서 @ParameterizedTest를 사용할 때, 파라미터 타입 변환에 관한 문제를 겪고 계신 것 같습니다. 이 경우, Study 객체로 직접 변환할 수 있는 자동 변환기가 없기 때문에 발생한 오류입니다. 두 가지 해결 방법을 제안드릴 수 있습니다:

  1. Custom Converter 사용: @ConvertWith를 사용하여 명시적으로 변환기를 지정하는 방법입니다. 이를 통해 원하는 형태로 파라미터를 받을 수 있도록 합니다. 예를 들어,

    @ParameterizedTest
    @ValueSource(ints = {10, 20, 40})
    void parameterizedTest(@ConvertWith(StudyConverter.class) Study study) {
        System.out.println(study.getLimit());
    }
    

    여기서 StudyConverterSimpleArgumentConverter를 상속받아 구현해야 합니다.

  2. @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

Testcontainers ddl-auto 동작 시점

0

223

2

testcontainers DB 공유 이슈

0

240

2

질문있습니다.

0

334

3

동시성 테스트는 어떻게 작성해야하는지 궁금합니다.

2

1235

0

안녕하세요, 테스트의 displayName 관련 질문이 있습니다!

0

469

0

intellij 테스트 실행시 engine 이 나오게 하는 방법이 궁금합니다.

0

412

0

thenThrow() 안에는 runtime 익셉션만 선언가능한가요?

0

1349

1

안녕하세요 @BeforeAll관련해서 질문이 있습니다.

0

391

1

Test 중단 방법(?)

1

428

1

junit 프로퍼티

1

412

1

강의 섹션별 Git Code

1

366

1

Gradle 프로젝트

0

359

1

강의 문서

0

398

1

if나 case를 통한 분기와 Assumptions의 차이점 문의

1

380

1

Study .setOwnerId( id ) 로 예제를 구성하신 이유가, 특정한 시나리오를 가정하기 때문인가요?

0

319

1

Mock에 Stubbing 중 발생하는 에러

0

3988

1

제 블로그에 공부 내용을 정리해도 될까요?

1

382

1

@Order와 @Order가 없는 순서가 있는 케이스

0

440

1

enum은 또 "이늄"인가요?

-5

1711

2

"assume" 발음이 "어줌"인가요?

-7

1624

4

검색을 해도 해결이 안되어 질문드립니다

0

2214

1

test 환경의 다른 컨테이너(Mock 어플리케이션)

0

381

2

중복 저장

0

301

1

Mapped port can only be obtained after the container is started

1

504

1