TIL - 21.01.22

1 minute read

NumberUtils

데이터 타입 확인 및 형변환 Long 생성자는 예외 발생 가능성이 있는 함수이므로 NumberUtils.toLong 같은 함수를 사용하는게 안전하다. 변환에 실패하면 default로 넘겨주는 값을 설정할 수 있다. (설정하지 않아도 기본 값이 있음)

// 비추천
long connectionID = new Long(matcher.group(1));
// 추천
long id = matcher.matches() ? NumberUtils.toLong(matcher.group(1), -1) : -1;
  • 사용 예
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;       

public void test(){

  String str = "";

  if(StringUtils.isBlank(str)){  // 문자인지 검사 (true/false)
    .....
  }

  if(StringUtils.isNumeric(str)){  // 숫자인지 검사 (true/false)
    .....
  }
  int number = NumberUtils.toInt(str);  // 숫자로 형변화

}

REST DOCS 문서화 되지 않아서 발생하는 테스트 오류

응답의 일부가 문서화되지 않아 REST 문서가 테스트에 실패

→ Response 본문의 일부라고 인식하는데 links 추가하지 않았기 때문에나는 에러

org.springframework.restdocs.snippet.SnippetException: The following parts of the payload were not documented:
{
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/api/events/1"
    },
    "query-events" : {
      "href" : "http://localhost:8080/api/events"
    },
    "update-event" : {
      "href" : "http://localhost:8080/api/events/1"
    }
  }
}

모든 응답을 문서화하지 않고, 일부만 하고싶다면, relaxed prefix를 사용하면 된다.

여기서 확인하지 않는 응답의 부가적인 정보가 더 있더라도 테스트는 성공하게 된다.

relaxedResponseFields(
        fieldWithPath("id").description("identifier of new event"),
        fieldWithPath("name").description("Name of new event"),
        fieldWithPath("description").description("description of new event"),
        fieldWithPath("beginEnrollmentDateTime").description("date time of begin of new event"),
        fieldWithPath("closeEnrollmentDateTime").description("date time of close of new event"),
  	//..
)

Relaxed 접두어

  • 장점: 문서 일부분만 테스트 할 수 있다.
  • 단점: 정확한 문서를 생성하지 못한다.

→ 쓰지않는 것을 권장. 전부 다 문서화하자. 그래야 API가 변경되었을 때, 해당 변경사항을 테스트가 감지해서 API 바꾼 코드에 맞추어 문서도 바로 업데이트 할 수 있다.