[Spring Boot] JUnit5 @RequiredArgsConstructor 사용
728x90

 

JUnit5의 테스트 코드 실행 환경에서 MockMvc의 DI를 Autowired 말고 final로 주입받기 위해서 @RequiredArgsConstructor을 사용하기 위해 작성하였고 Import도 하였다.

 

하지만 다음과 같은 오류가 발생되었다.

java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'

 

에러가 발생하는 이유는 JUnit5가 DI를 스스로 지원하기 때문에 JUnit이 생성자에 다른 의존성을 주입하려고

먼저 개입 하기 때문이다.JUnit 5가 DI(Dependency Injection)를 스스로 지원하는 이유는 테스트 코드에서는 종종 특별한 인스턴스나 값을 사용해야 할 경우가 많기 때문입니다. 예를 들어, 특정 테스트에서만 필요한 Mock 객체나 특별한 설정을 사용해야 할 때가 있습니다.

테스트 코드에서의 DI는 주로 생성자 주입(Constructor Injection)을 통해 이루어집니다. JUnit 5에서는 기본적으로 테스트 클래스의 생성자에 @BeforeEach, @AfterEach 및 @Test 메서드가 들어갈 수 있는 인스턴스를 주입합니다. 이로써 사용자는 필요한 리소스나 의존성을 테스트 메서드에 주입할 수 있게 됩니다.

만약 @RequiredArgsConstructor를 사용한다면, 해당 클래스에 생성자가 이미 있을 때 JUnit 5가 주입하려고 하는 생성자와 충돌이 발생할 수 있습니다. JUnit 5는 DI를 통해 테스트 인스턴스를 생성하려고 할 때, 클래스에 존재하는 생성자를 활용하여 주입을 시도합니다. 그러나 이미 @RequiredArgsConstructor로 생성된 생성자가 있으면 JUnit 5가 주입할 생성자를 찾지 못하고 에러가 발생합니다.

 

그래서 

 

 

의존성 주입의 타입이 정해져 있는 @Autowired만 사용하자.

'Try & Error Log' 카테고리의 다른 글

IntelliJ 2023.1 ChronoUnit 에러..  (0) 2023.11.08