2016-09-07 2 views
0

컨트롤러 레이어에 대한 단위 테스트 케이스를 작성하고 있습니다. 나는 Spring SecurityContextHolder로부터 사용자를 얻고있다. 테스트 케이스를 실행할 때 스프링 보안 컨텍스트를 조롱하는 방법을 모르기 때문에 널 포인터 예외가 발생합니다.MockMVC를 사용하는 모의 SpringContextHolder

아래 코드는 어떻게 작성합니까?

컨트롤러 Methhod :

@RequestMapping(method = RequestMethod.POST) 
public void saveSettings(@RequestBody EmailSettingDTO emailSetting) { 
    User user = ((CurrentUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUser(); 
    settings.saveUserEmailSetting(user, emailSetting); 

} 

내 테스트 케이스 :

@Test public void testSaveSettings() throws Exception { 
mockMvc.perform(post(BASE_URL).content(this.objectMapper.writeValueAsString(emailDto)) 
    .contentType(MediaTypes.HAL_JSON)).andExpect(status().isOk()); 

}

+0

http://stackoverflow.com/questions/15203485/spring-test-security-how-to-mock-authentication – VinayVeluri

답변

0

이 목적을 위해 봄 보안 테스트 라이브러리가있다.

@WithMockUser을 사용하면이 문제를 해결할 수 있습니다. post

0

당신은 UserDetails 객체와 함께 실행하는 경우 UserDetailsService에서 반환 모방 @WithUserDetails

이 주석이 시험 방법을 추가 할 수 있습니다 사용할 수 있습니다 참조하십시오.

이를 사용하면 예를 들어,에서 테스트를 실행 컨텍스트를 만듭니다

@Test 
@WithUserDetails("admin") 
public void testAdmin() throws Exception { 
    mockMvc.perform(...); 
} 

이 관리자의 SecurityContexttestAdmin()를 실행합니다.

하지만 사용하려면이 점을주의하십시오. admin이라는 이름으로 유지되는 User이 있어야합니다. 그렇지 않으면 예외 예외가 발생합니다.

관련 문제