[JUnit] Error Note : Service 테스트 중 NullpointerException 오류 발생

DEINGVELOP·2022년 9월 8일
0

발생한 에러

Service 테스트를 만들어 돌려보는데, 계속 NullPointerException이 나와 테스트를 진행을 할 수 없었다.

java.lang.NullPointerException
	at 파일 위치.backend.service.AnswerServiceTest.createAnswer(AnswerServiceTest.java:69)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)

시도

시도 1 : 해당 서비스 위에 @Autowired → fail

@ExtendedWith(MockitoExtension.class)
class AnswerServiceTest {

	@Autowired
    AnswerService answerservice;
    
    ...
    

2. 해당 서비스 위에 @InjectMocks → fail

@ExtendedWith(MockitoExtension.class)
class AnswerServiceTest {

	@InjectMocks
    AnswerService answerservice;
    
    ...
    

3. 해당 Service를 새로 MockService로 파일을 하나 만들어 구현 → fail

  • MockAnswerService

    @ExtendedWith(MockitoExtension.class)
    class AnswerServiceTest {
    
    		  @Autowired
        MockAnswerService answerservice;
        
        ...
      
  • MockAnswerService

    public class MockAnswerService {
        private final MockAnswerRepository answerRepository;
        private final MockInterviewRepository interviewRepository;
    
        public MockAnswerService() {
            interviewRepository = new MockInterviewRepository();
            answerRepository = new MockAnswerRepository();
        }
    
        public ResponseDto<?> createAnswer(Long interviewId, AnswerRequestDto requestDto, Member member) {

원인

@SpringBootTest가 주로 하는 역할 중 하나가 @SpringBootApplication을 찾아서 테스트를 위한 Bean을 생성해주는 것이라고 한다. 이 과정이 빠졌기 때문에 제대로 Bean이 생성되지 않아 해당 Service가 리턴하는 값이 계속 Null값이 나왔던 듯 하다.

💡 참고 : SpringBootTest의 역할

  • @SpringBootApplication을 찾아서 테스트를 위한 Bean을 생성한다.
  • @MockBean으로 정의된 Bean을 찾아서 대체시킨다.
  • @RunWith(SpringRunner.class)와 같이 정의하여야 동작한다. (Junit5에서 생략가능)

해결

테스트 코드 위에 @ExtendedWith(MockitoExtension.class)@SpringBootTest로 변경하여 해결했다.

@SpringBootTest
class AnswerServiceTest {

    @Autowired
    AnswerService answerService;

	...
		

0개의 댓글