[ 최주호 JWT와 JUnit #9 ] - JWT (4) : JWT 테스트

정동욱·2023년 6월 25일
post-thumbnail

이번 글에서는 이때까지 구현한 JWT 관련 코드를 테스트해볼텐데요, 먼저 JwtProcesscreate() 매서드를 테스트해보겠습니다.

먼저 Member 객체를 생성합니다. 이 때, id와 role에만 데이터를 넣었는데, JWT를 생성하기 위해서는 id와 role을 claim에 넣어야 하기 때문입니다. 그리고 만든 Member 객체를 가지고 UserDetails 객체를 만듭니다. 그리고 UserDetails를 파라미터로 넣고 create() 매서드로 토큰을 생성합니다. 토큰은 매 생성마다 그 값이 달라져 토큰 전체를 검증할 수 없기 때문에 토큰이 담길 헤더의 Authorization의 값이 "Bearer"로 시작하는 지를 테스트합니다.

그리고 verify() 매서드를 검증해볼텐데 방법은 위와 동일합니다.

위 테스트로 발급된 토큰에서 맨 앞의 "Bearer"을 제거한 나머지 부분을 문자열로 받습니다. 그리고 그걸 verify() 매서드의 파라미터에 담아 UserDetails 객체를 반환합니다. 그리고 이 반환된 객체가 위의 테스트에 사용된 객체가 맞는지 검증합니다. 두 테스트 모두 정상적으로 성공했습니다.

그런 다음 로그인 성공 테스트를 진행해보겠습니다.

@BeforEach 어노테이션을 이용해 테스트 전에 더미 데이터를 하나 생성해줍니다. 그리고 매 테스트가 끝나면 트랜잭션이 롤백되도록 테스트 클래스에 @Transactional 어노테이션도 붙여줬습니다. 테스트 환경에서는 @Transactional의 디폴트 값은 Rollback입니다.

  1. 로그인 요청 Dto 객체를 생성해 데이터를 넣습니다.
  2. 객체를 JSON 문자열로 변환합니다.
  3. MockMvc를 통해 api 요청을 보내고, 응답의 Header 중 "Authorizaion" 키의 값을 jwtToken으로 받습니다.
  4. Http 상태코드와 jwtToken을 검증합니다.

로그인 실패 테스트도 해볼텐데 간단합니다.

마찬가지로 @BeforeEach를 통해 객체가 하나 생성될테고, 그 객체의 정보로 로그인합니다.

  1. 로그인 요청 Dto 객체를 올바르지 않은 생성해 데이터를 넣습니다.
  2. 객체를 JSON 문자열로 변환합니다.
  3. MockMvc를 통해 api 요청을 보내지만, 올바른 요청이 아님을 알기 때문에 요청의 응답이 isUnautorizaed()임을 확인합니다.

다음 글에서는 이제 시큐리티와 JWT가 끝나고 실제 프로젝트의 은행 기능들을 만들고 테스트해보겠습니다.
profile
거인의 어깨 위에서 탭댄스를

0개의 댓글