본문 바로가기
오류를 개발새발

분명 NULL 을 보냈는데 왜 오류가 안 뜨고 값이 들어갈까?

by 휴일이 2023. 8. 8.

 

컨트롤러에 실패 케이스를 테스트하던 중

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