urlTemplate not found.

hyoreal·2022년 9월 15일
0

[Error Log]

목록 보기
4/5
post-thumbnail

에러 발생 🚨

API 문서화 과제를 진행하던 도중 이상한 에러를 만났다.
urlTemplate을 찾을수 없다는 말과 함께 RestDocumentationRequestBuilders를 사용하라고 한다.

그래서 나는 에러메세지를 그대로 따라했다.

먼저 실제 테스트 코드에서는 문제가 없어보였다.
그래서 helper 인터페이스를 확인해보았다.

위 코드를

이렇게 고쳐서 테스트를 실행해봤지만 여전히 같은 에러메세지를 뱉어냈다.

문제 파악🚒

이런식으로 해결하는것보단 원인부터 파악하고 싶었다.

먼저 실행 후 콘솔창을 확인해 본 결과, URI가 인식은 된것으로 보였다.

urlTemplate를 찾을 수 없다는게 정확하게 어떤 뜻인지 몰라 알아본 결과,
URI에서 {} 에 속하는 부분이 템플릿인것으로 파악됐다.

그렇다면 즉,

/v11/members/{member-id}

이 부분을 찾지 못한다는 이야기였다.

분명 그 전까진 제대로 작동했으나 갑자기 못찾는다는게 이해가 안가 열심히 알아보았더니 RestDocumentationRequestBuilder와 관련이 있어보였다.

RestDocumentationRequestBuilder

Spring REST DOCs에서 pathParameters를 사용하는 경우 MockMVCBuilder가 아닌 RestDocumentationRequestBuilder의 메소드를 사용해야 한다.

참고

나는 변경해주었는데도 오류가 나는 이유를 정확하게 찾지는 못했지만 예상하는건 하나 있다.

RestDocumentationRequestBuilder 안에 들어보니 여러 글들이 보였지만 그 중에서 눈에 띈건 이 부분이다.

보면 uri는 URL로 인식하고 urlTemplate를 지정해줘야 template이라는 것을 알아본다는 것처럼 보인다.

현재 발생한 에러가 urlTemplate을 찾지 못한다는 에러이고, 나는 RestDocumentationRequestBuilder의 매개변수로 URI타입의 uri를 넣어준 상태였다.

즉, 내가 이해한 바로는

pathParameters를 사용할땐 RestDocumentationRequestBuilder를 사용해야하지만,
RestDocumentationRequestBuilder를 사용하면 pathParameters는 URI타입의 uri의 템플릿을 인식하지 못한다.

라는 것이었고 그에 맞게 다시 구현해보았다.

해결..?🤔 해결!!🧐

public interface ControllerTestHelper<T> {
    default RequestBuilder getRequestBuilder(String uri, long memberId) {
        return RestDocumentationRequestBuilders
                .get(uri, memberId)
                .accept(MediaType.APPLICATION_JSON);
    }
}

public interface MemberControllerTestHelper extends ControllerTestHelper {
    default URI getURI(long memberId) {
        return createURI( "/v11/members/{member-id}", memberId);
    }
}

helper 인터페이스에서 URI를 String 타입으로 지정해주었고, 템플릿에 들어갈 값을 따로 할당해주었다.

그리고 실제 테스트 로직은 이렇게 변경해주었다.

그리고 테스트를 실행시켜본 결과 에러없이 완벽하게 실행되었다.

사실 내가 생각하는 이 이유가 맞는건지 확신이 있지는 않다.
더 알아보고 알게되는만큼 다시 정리해두어야겠다


+ 엔지니어님께 여쭤보니 맞다고 한다!!! 야호!!!!

profile
좌충우돌 코린이 성장기

0개의 댓글