본문 바로가기

Programming Language/Java

[JAVA Junit] Error: No ParameterResolver registered for parameter 에러 원인

[JAVA Junit] Error: No ParameterResolver registered for parameter 에러 원인


개요

  Junit Test를 하면서, No ParameterResolver registerd for parameter가 발생한 원인중 하나에 대해 기록한다.

 

소개

1. 문제 원인

@Test
@ParameterizedTest
@NullSource
@ValueSource(strings = {"-1","-1000000"})
void 테스트(BigDecimal 테스트값) {

Assertions.assertThrows(RuntimeException.class, () ->
        test.validateTest(테스트값)
  );
}
위의 코드는 ParameterizedTest와 ValueSource 및 NullSource @Annotation을 통해 파라미터가 있는 함수의 테스트를 편하게 하기 위한 코드였다.

이때, @Test Annotation을 무의식적으로 삽입하였는데, 아래와 같이 테스트가 두번 실행되면서 한번은 성공 한번은 실패를 하였다.

테스트가 두번 실행 된 화면

문제의 원인은 아래와 같았다.
@Test Annotaion과 @ParameterizedTest 둘 다 Test 객체로 동작한다.
따라서 @Test로 테스트를 한번 @ParameterizedTest로 테스트를 한번 수행하는것이다.
이때, @Test일때는 ParameterizedTest가 함께 수행되는것이 아니므로 @ValueSource의 Annotation이 함께 동작하지 않아 객체에 의도한 Parameter가 들어가지 않아 에러가 발생한 것이였다.

 

2. 해결 방법

@Test와 @ParameterizedTest + @ValueSource 둘 중 하나만 사용한다.