Spring Boot OncePerRequestFilter следуетNotFilter Junit - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь добавить тестовый пример junit для моей логики метода Spring Boot OncePerRequestFilter shouldNotFilter.Логика отлично работает с вызовами REST в реальном времени, но регистр junit терпит неудачу.Любая идея?.

Вот тестовый код.

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SpringFilterTest {
    @Test
    public void getHealthTest() throws Exception {
        standaloneSetup(new PersonController()).addFilter(new SkipFilter()).build().perform(get("/health")).andExpect(status().isOk());
    }
    @Test
    public void getPersonTest() throws Exception {
        standaloneSetup(new PersonController()).addFilter(new SkipFilter()).build().perform(get("/person")).andExpect(status().isAccepted());
    }
    private class SkipFilter extends OncePerRequestFilter {

        private Set<String> skipUrls = new HashSet<>(Arrays.asList("/health"));
        private AntPathMatcher pathMatcher = new AntPathMatcher();

        @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
                                        FilterChain filterChain) throws ServletException, IOException {
            filterChain.doFilter(request, response);
            response.setStatus(HttpStatus.ACCEPTED.value());
        }

        @Override
        protected boolean shouldNotFilter(HttpServletRequest request) {
            return skipUrls.stream().anyMatch(p -> pathMatcher.match(p, request.getServletPath()));
        }
    }
    @RestController
    @RequestMapping(value = "/")
    private static class PersonController {

        @GetMapping("person")
        public void getPerson() {
        }

        @GetMapping("health")
        public void getHealth() {
        }
    }
}

Я ожидаю, что оба случая junit @Test будут успешными, но исправное состояние всегда терпит неудачу (используется фильтр).

Incase, если вы хотите повторить ниже полный код репо.https://github.com/imran9m/spring-filter-test

1 Ответ

0 голосов
/ 20 октября 2018

Ниже Выражение оценивается как ложное с request.getServletPath(), когда /health

skipUrls.stream().anyMatch(p -> pathMatcher.match(p, request.getServletPath()));

Измените на request.getRequestURI(), чтобы получить URI, и условие ниже соответствует пути

 skipUrls.stream().anyMatch(p -> pathMatcher.match(p, request.getRequestURI())); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...