쩨이엠 개발 블로그

[ Springboot JUnit Test ] Please remove unnecessary stubbings or use 'lenient' strictness 본문

개발/Spring

[ Springboot JUnit Test ] Please remove unnecessary stubbings or use 'lenient' strictness

쩨이엠 2022. 9. 19. 16:44
728x90
반응형

Mockito를 사용 할 때 분명히 되어야하는데 안될 때가 있다(?

 

테스트가 안될리가 없는데... 하고 살펴봤더니

UnneccessaryStubbingException이 나타났다

 
 org.mockito.exceptions.misusing.UnnecessaryStubbingException: 
 Unnecessary stubbings detected.
 Clean & maintainable test code requires zero unnecessary code.
 Following stubbings are unnecessary (click to navigate to relevant line of code):
   1. -> at com.service.DashboardServiceTest.setLineStatus(DashboardServiceTest.java:52)
 Please remove unnecessary stubbings or use 'lenient' strictness. More info: javadoc for UnnecessaryStubbingException class.
 ...

 

문제의 코드

 @BeforeEach
 void setLineStatus(){
   ...
   when(objectRepository.getFirstByLineIdOrderByCreatedAtDesc(lineId)).thenReturn(Mono.just(object));
   ...
 }

SpringBoot에서 Mockito Core 버전 3.x 에서 나타나는 에러로 불필요한 stub(when/then/return)이 있는 경우 나는 에러이다

테스트 세팅 중 @BeforeEach에 넣은 코드가 모든 @Test에서 필수로 쓰이지 않아서 이런 에러가 발생했다

 

Solution

 

1. @BeforeEach 에서 세팅하지 않고 @Test 안에 직접 세팅한다 ( 중복 코드가 많이 생길 수 있음)

2. 위의 솔루션대로 lenient를 추가한다

 

나는 10개의 테스트 중 한 테스트에서만 이 코드를 사용하지 않기때문에 직접 세팅하기엔 중복코드가 너무 많아진다.

2번째 솔루션으로 선택

 

 
 ...
 import static org.mockito.Mockito.lenient;
 ...
 
 @BeforeEach
 void setLineStatus(){
   ...
   lenient().when(objectRepository.getFirstByLineIdOrderByCreatedAtDesc(lineId)).thenReturn(Mono.just(object));
   ...
 }

lenient를 추가해주면 Test가 제대로 동작하는것을 확인할 수 있다.

 

 

728x90
반응형
Comments