Spring | How to test the filter

Colde
4 min readJun 2, 2022

--

Spring Boot 에서 Test 케이스를 작성을 할 때 혹은 프로젝트를 진행을 하다 보면 filter 영역에 대한 테스트 케이스를 작성을 할때가 있다.

이 포스팅의 경우 JWT Filter 에서 Login 예제를 가지고 Spring Boot 프로젝트에서 Filter Layer 영역에 대한 예제 포스팅 이다.

JWT Login Filter 예제 와 테스트 코드

JWT Login 필터 예제 코드이다. AbstractAuthenticationProcessingFilter 를 상속을 받아서 사용을 한다.

간단하게 코드 리뷰를 하면

AbstractAuthenticationProcessingFilter는 인증관련된 URL 매핑시 가로체서 attemptAuthentiaction 메소드를 실행을 시킨다.

attemptAuthentiaction 메소드 에서는 인증을 진행을 하는데 POST 방식이 아니면 excpetion 을 던져준다.

그리고 난뒤 RequestBody 에 email 과 password 를 읽는다. RequestBody 는 버퍼를 이용하기 때문에 한번 가로체서 사용을 하면 Controller Layer 에서 읽어 드릴 수 없다. 그렇기 때문에 그 부분을 생각을 하면서 코딩을 하는게 좋다.

UsernamePasswordAuthenticationToken 객체에 인증된 사용자를 담아서 Return 시켜준다.

Full Code

그리고 테스트 케이스를 작성을 해준다.

IOC 에 있는 객체를 필드 주입(DI) 를 통해서 주입을 해준다.

그리고 MockHttpServletRequest , MockHttpServletResponse 를 선언을 해주는데 실제 Request , Response 가 아니기 때문에 재정의를 해주어야 한다.

그렇기 때문에 init 메소드에서 필요한 부분을 재 주입 해준다.

그리고 POST 메소드 가 아닐시에 대한 테스트 코드를 작성을 해준다. POST 로 넘겨주는 것이 아니기 때문에 ResponseStatusException.class 이 발생이 되는지 체크를 해준다.

또 다른 케이스의 경우 RequestBody 가 없을 시 테스트 케이스를 작성을 해준다. Request 에서 POST 메소드를 세팅을 해준 뒤 NotFoundException.class 를 발생이 되는지 체크를 해준다.

마지막으로 성공에 대한 테스트 케이스를 작성을 해준다. UserRepository.class 에 mock 데이터를 넣어준다. 그 뒤 flush 로 한번 commit 을 해준다. 그리고 Request 에서 POST 메소드를 넣어준뒤 RequestBody 에 데이터를 넣어준다.

이렇게 3가지 테스트케이스를 작성을 해준다.

Full Code

위의 처럼 필터를 만들고 그에 맞게 테스트 케이스를 작성을 해주면 된다. 만약 여기서 비지니스 로직이 더 추가가 되면 테스트 케이스를 더 작성을 해주면 된다.

--

--

Colde
Colde

No responses yet