TIL - 21.01.22
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 바꾼 코드에 맞추어 문서도 바로 업데이트 할 수 있다.