티스토리 뷰

Spring

Spring Security - Security Test 1

엔꾸꾸 2019. 9. 9. 22:27

Spring Security - Test 1

  • 기존의 테스트 방법
    • 애플리케이션을 실행
    • 웹 브라우저에서 직접 확인
    • 코드가 변경될때마다 유저를 다시 생성해주고, url 하나하나에 일일히 접근해야한다.
    • 매우 번거롭다
  • 소스코드를 사용해서 테스트를 진행하도록 방법을 변경하자.

 

의존성 추가

  • spring-security-test 는 version관리가 되고있지 않다.
  • 따라서 버전을 명시해주는것이 좋다.

 

 

테스트 코드

  • JUnit을 활용하여 index 페이지에 대한 테스트 진행하는 매우 간단한 코드이다.
  • 하지만 이때 사용자의 인증 정보를 TEST 하려면 어떻게 해야 할까 ?
  • spring-security-test 에서 제공하는 with method를 활용하자.

 

with() method를 이용해 유저 인증정보를 Mocking 할 수 있다.
이 때 해당 유저가 데이터베이스 존재하는것이 아닌, 로그인을 한 상태라고 가정하는것이다.
결코 데이터베이스에 해당 유저가 존재한다는 의미가 아니다.

 

아래 코드를 살펴보며 자세히 알아보자.
with() method를 이용해 유저 인증정보를 Mocking 한다.

  • anonymous() 익명 사용자
  • user("유저명").password("패스워드").roles("권한") 이다.
    • password는 의미가 없기때문에 유저명과 , 권한만 Mocking하도록 하자.

 

테스트 결과

  • index_anonymous 테스트 결과

 

  • index_user 테스트 결과

 

 

두 테스트 모두 성공하는것을 확인 할 수 있다.

그렇다면 이번에는 admin page에 대한 테스트를 진행 해보도록 하자.

 

 

ADMIN Page 테스트 코드

  • /admin 으로 USER 권한을 가지고 있는 사용자가 요청을 하면 403 응답을 바라고,
  • /admin 으로 ADMIN 권한을 가지고 있는 사용자가 요청을 하면 200 정상적인 응답을 바라는 테스트 코드이다.

 

 

테스트는 예상한대로 모두 성공 한다.

  • admin_user 테스트 결과

 

하지만 여기서 문제점이 하나 있다.
바로 User를 Mocking하는 코드가 테스트 코드내에 존재한다는 것이다.


지금은 매우 간단한 테스트 코드이지만. 테스트 코드가 길어진다면 ? (요청헤더, 응답헤더, 파라메터, Assertion 등..)
어떤 User 정보를 Mocking하는지 알아보기가 힘들어 진다.

 

spring-security-test가 제공하는 애노테이션을 사용하도록 하자.

 

 

@WithAnnoymousUser @WithMockUser

  • @WithAnnoymousUser
    • 이름 그대로 익명 사용자를 Mocking하는 애노태이션이다.
  • @WithMockUser(username = "사용자 이름", roles = "권한")
    • 사용자를 Mocking하는 애노테이션이다.
    • username: 사용자 이름
    • roles: 권한

 

애노테이션을 적용하여 기존 테스트코드들을 수정해보자

 

 

각 테스트 코드가 어떤 유저정보를 Mocking하는지 알아보기 쉽게 개선되었다.
하지만 User를 Mocking하는 코드 중복이 발생하였다.

 

 

@WithUser

  • 특정 애노테이션을 사용하는데 있어서 중복이 발생하는 경우 메타애노테이션을 만들어 이를 해결할 수 있다.

 

다음은 @WithUser 애노테이션을 활용해 중복을 제거한 코드이다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함