@Test
@DisplayName("로그인 실패 - password 틀림")
void signinFailForWrongPassword() throws Exception {
// given
String wrongPassword = "wrongPassword";
SigninDto.Request signinDto = SigninDto.Request.builder()
.username("testUser")
.password("testPassword")
.build();
// then
mockMvc.perform(post("/signin")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"username\":\"" + signinDto.getUsername()
+ "\",\"password\":\"" + wrongPassword + "\"}"))
.andExpect(status().isBadRequest());
}
- 로그인 실패 케이스 (비밀번호 틀림) 중 when이 필요 없는 것 같아 지웠다.
- 어차피 다른 비밀번호를 넣으면 알아서 에러가 발생할 것이기 때문에 지정해 줬던 when을 지웠더랬다.
- 그랬더니 ? NestedServletException 이 발생 됐다.
- 그리고 가장 위엔 NullPointerException: Cannot invoke "zerobase.maintenance.domain.Account.getUsername()" because "loginSuccessful" is null
- "loginSuccessful 은 로그인에 대한 정볼르 담고 있는 객체인데, 그게 없단다.
- 비밀번호가 틀렸을 경우의 에러를 띄우고 싶었는데 로그인이 안돼서 객체가 없다는 에러를 띄운 것이다.
- 그럼 다시 when을 집어 넣자.
@Test
@DisplayName("로그인 실패 - password 틀림")
void signinFailForWrongPassword() throws Exception {
// given
String wrongPassword = "wrongPassword";
SigninDto.Request signinDto = SigninDto.Request.builder()
.username("testUser")
.password("testPassword")
.build();
// when
when(signinService.signin(signinDto.getUsername(), wrongPassword))
.thenThrow(new AccountException(ErrorCode.WRONG_PASSWORD));
// then
mockMvc.perform(post("/signin")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"username\":\"" + signinDto.getUsername()
+ "\",\"password\":\"" + wrongPassword + "\"}"))
.andExpect(status().isBadRequest());
}
- when으로 siginDto.getUsername(), wrongPasswrod를 넣었을 경우 에러 발생으로 만든 후
'Java > Spring' 카테고리의 다른 글
Test 이모저모 - @withMockUser (0) | 2024.03.06 |
---|---|
Test 이모저모 - Jackson 활용 (ObjectMapper.writeValueAsString) (0) | 2024.03.06 |
[Spring Security] JwtAuthenticationFilter 구현 (0) | 2024.02.29 |
Authentication 인증 객체에 대하여 (0) | 2024.02.29 |
JWT 생성 방법 (signWith, feat.Deprecated) (0) | 2024.02.28 |