2017-10-04 1 views
1

mockito 메소드에 문제가있는 경우 : (...). 내가 테스트 할 때 :Mockito의 메소드가 올바르게 작동하지 않을 때

afterThrowExceptionShouldReturnCorrectHttpStatus()를

는 두 번째 테스트, 첫번째 란 :

controllerShouldReturnListOfAnns()

이 NotFoundException을 던져 때문에 항상 실패합니다. 첫 번째 테스트를 삭제하거나 두 번째 테스트를 먼저 실행하면 모든 것이 정확합니다. 이 방법은 첫 번째 테스트 오버라이드 메소드에서 when()이 두 번째 테스트를 작성할 때와 비슷합니다. 테스트 코드 및 테스트 구성이 있습니다.

@ActiveProfiles("dev") 
@RunWith(SpringRunner.class) 
@SpringBootTest 
public class AnnTestController { 

@Autowired 
private AnnounService annSrv; 
@Autowired 
private AnnounRepo annRepo; 
@Autowired 
private WebApplicationContext wac; 
private MockMvc mockMvc; 

@Before 
public void contextLoads() { 
    this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); 
} 


@Test 
public void afterThrowExceptionShouldReturnCorrectHttpStatus() throws Exception { 
    when(this.annRepo.getAnnounList()).thenThrow(NotFoundAnnounException.class); 
    this.mockMvc.perform(get("/ann/list")).andExpect(status().isNotFound()); 
} 


@Test 
public void controllerShouldReturnListOfAnns() throws Exception { 
    List<Announcement> lst = new ArrayList<>(); 
    lst.add(new Announcement(1, "test", "test")); 
    when(annRepo.getAnnounList()).thenReturn(lst); 
    this.mockMvc.perform(get("/ann/list")) 
.andExpect(status().isOk()) 
.andExpect(jsonPath("$[0].id", is(1))); 
}} 

구성 :

@Profile("dev") 
@Configuration 
public class BeanConfig { 


@Bean 
public CommentsRepo commentsRepo() { 
    return mock(CommentsRepo.class); 
}} 

답변

1

당신은 그런 식으로 뭔가를해야만 시도 할 수 있습니다 :

이가 작동
@After public void reset_mocks() { 
    Mockito.reset(this.annRepo); 
} 
+0

! 고맙습니다! btw. 왜이 문제가 발생합니까? 항상이 방법을 추가하는 것이 정상입니까 (@After)? – destro1

+0

스프링 테스트의 수명주기는 스프링 러너에 의해 제어됩니다. Spring 러너는 Mockito 라이프 사이클을 돌보지 않습니다. 그래서 직접 관리해야합니다. – fiddels

관련 문제