@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를 넣었을 경우 에러 발생으로 만든 후

정상적으로 테스트 성공

+ Recent posts