컨트롤러에 실패 케이스를 테스트하던 중
null 을 보냈는데 실패가 아닌 성공을 하는 경우가 발생했다
@Test
@DisplayName("태그 NULL 실패")
void 태그NULL_실패() throws Exception {
User findUser = new User("user", "pwd");
User user = userRepository.save(findUser);
String name = null;
MockHttpSession session = new MockHttpSession();
session.setAttribute("id", user.getId());
mockMvc.perform(
post("/tag")
.content(mapper.writeValueAsString(name))
.contentType(MediaType.APPLICATION_JSON)
.session(session)
).andExpect(status().is4xxClientError())
.andExpect(jsonPath("$.response").value("NOT_VALID"))
.andDo(print());
}
name 값을 null 을 보냈는데 분명 실패해야하는데 !
보면 요청 바디는 null 이다.
하지만 프린트 된 응답 값에는 name 이 문자열 "null"이 된 것을 볼 수 있다.
이렇게 된 이유 예상)
나는 name 을 @RequestBody 로 받아 사용한다.
@RequestBody 는 json으로 온 name 키값을 받아온다.
null 이어도 어쨌든 name 값을 content 에 넣어주긴 했다.
그러면 컨트롤러는 name 을 null 이 아니라 "null" 이라고 인식한다...!!ㅡ_ㅡ
-> 사실 이게 json 의 비밀인지 뭔지 잘 모르겠음..더 알아봐야 할듯
어쨌든 결론!
원래는 조건문에 !name.equals("null") 이라고 넣으려고 했으나
생각해보니 태그 이름을 NULL 이라고 짓는 사람도 있을 것 같아, 굳이 필터링 조건으로 넣지 않았다.
따라서 테스트를 삭제함...
그리고 조건문에서 어차피 길이가 10자 이상이면 밑에 공백이 100자 이상이도 문자열 비교 하나하나 안 해도 되니까
빠른 필터링을 위해 길이 비교를 먼저 두고 그 다음에 문자열 비교를 두었음
(공백만 넣으면 태그 추가 못하도록 한 선택)
이상 끝!
728x90