[SPRING] 봄 부팅 응용 프로그램을 사용하여 Mockito의 맞춤 필터를 무시하거나 건너 뛰는 방법
SPRING봄 부팅 응용 프로그램을 사용하여 Mockito의 맞춤 필터를 무시하거나 건너 뛰는 방법
나는 스프링 부트 응용 프로그램과 테스트 용 mockito를 사용하고 있습니다. 아래는 일부 파일과 코드 샘플입니다.
public class CustomerInfoFilter extends GenericFilterBean
{
@Override
public void doFilter (ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException,
ServletException
{
Customer customer = (Customer)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
// some more logic
// call next filter in the filter chain
chain.doFilter(request, response);
}
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
@Autowired
public void configAuthentication (AuthenticationManagerBuilder auth) throws Exception
{
auth.jdbcAuthentication()........... some logic
}
protected void configure (HttpSecurity http) throws Exception
{
http.addFilterAfter(new CustomerInfoFilter(customerInfoDao), BasicAuthenticationFilter.class);
// Some logic
}
}
다음은 Mockito 테스트로 작성된 코드입니다.
@Test
public void verifyCustomerInfoUnauthorized () throws Exception
{
mockMvc.perform(MockMvcRequestBuilders.post("/customer").contentType(
MediaType.APPLICATION_JSON).content("{}").accept(MediaType.APPLICATION_JSON)).andExpect(
status().isUnauthorized()).andExpect(status().is(401));
}
미안 나는 봄과 mockito 새로운 :) 모든 도움을 주시면 감사하겠습니다.
해결법
-
==============================
1.
@Mock SecurityContext context; @Mock Authentication auth; @Mock Principal principal; @Test public void verifyCustomerInfoUnauthorized () throws Exception { when(context.getAuthentication()).thenReturn(auth); when(context.getAuthentication().getPrincipal()).thenReturn(principal); SecurityContextHolder.setContext(context); mockMvc.perform(MockMvcRequestBuilders.post("/customer").principal().contentType( MediaType.APPLICATION_JSON).content("{}").accept(MediaType.APPLICATION_JSON)).andExpect( status().isUnauthorized()).andExpect(status().is(401)); }
위와 비슷한 방법으로 테스트하거나 직접 mock을 설정할 수 있습니다. 어느 쪽이든 그것은 트릭을해야합니다. 가장 중요한 부분은 .setContext () 부분입니다. 그것이 널 포인터가 나오는 곳입니다.
나는 이것이 이것에 대해 가장 깨끗한 방법이라고 생각한다.
from https://stackoverflow.com/questions/53774909/how-to-bypass-or-skip-customfilter-in-mockito-with-springboot-applicaiton by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안 다중 URL 룰 세트가 함께 작동하지 않음 (0) | 2018.12.28 |
---|---|
[SPRING] C3P0 봄 최대 절전 모드 : 풀이 초과되었습니다. 디버깅하는 방법? (0) | 2018.12.27 |
[SPRING] Maven- 현재 프로젝트와 플러그인 그룹에서 접두어 'spring-boot'에 대한 플러그인이 없습니다. (0) | 2018.12.27 |
[SPRING] 서로 다른 스프링 부팅 응용 프로그램에서 서로 다른 포트에 2 개의 내장형 active-mq를 시작할 수 없습니다. (0) | 2018.12.27 |
[SPRING] 다른 엔티티의 새로운 테이블에 2 개의 외래 키 최대 절전 모드 (0) | 2018.12.27 |