[SPRING] RestTemplate을 오프라인으로 사용하여 클래스를 unittest하는 방법은 무엇입니까?
SPRINGRestTemplate을 오프라인으로 사용하여 클래스를 unittest하는 방법은 무엇입니까?
RestTemplate에 직접 의존하는 클래스가 있습니다. 오프라인에서 JUnit 테스트를하고 싶습니다.
어떻게 UnitTest에서 RestTemplate을 조롱 할 수 있습니까?
해결법
-
==============================
1.RestTemplate에 대한 직접 종속성을 제거하고 RestTemplate에 의해 구현 된 인터페이스 인 RestOperations에 대한 참조로 바꾸기 위해 클라이언트 코드를 리팩터링하는 것이 좋습니다. 그리고 코딩해야하는 코드.
RestTemplate에 대한 직접 종속성을 제거하고 RestTemplate에 의해 구현 된 인터페이스 인 RestOperations에 대한 참조로 바꾸기 위해 클라이언트 코드를 리팩터링하는 것이 좋습니다. 그리고 코딩해야하는 코드.
그런 다음 단위 테스트를 위해 RestOperations의 스텁이나 모의 객체를 코드에 삽입 할 수 있으며, 실제 사용할 때 RestTemplate을 삽입 할 수 있습니다.
-
==============================
2.Spring 3.0에서는 RestTemplate을 도입했습니다. 버전 3.2부터 스프링 MVC 테스트 프레임 워크는 단위 테스트 클라이언트 REST 코드 용 MockRestServiceServer 클래스를 제공했다.
Spring 3.0에서는 RestTemplate을 도입했습니다. 버전 3.2부터 스프링 MVC 테스트 프레임 워크는 단위 테스트 클라이언트 REST 코드 용 MockRestServiceServer 클래스를 제공했다.
-
==============================
3.org.springframework.mock.web 패키지의 Mock 클래스를 사용할 수있다.
org.springframework.mock.web 패키지의 Mock 클래스를 사용할 수있다.
일반적으로 MockHttpServletRequest와 MockHttpServletResponse가 필요할 것입니다. 그러나 더 많은 제어가 필요하면 다른 것들이 필요할 수도 있습니다. MockRequestDispatcher.
이 두 가지 모두 해당 서블릿 인터페이스를 구현하지만 테스트를위한 편리한 방법을 추가합니다 (가장 중요한 것은 실제 HTTP 연결없이 작동 함).
모의 수업은 스프링 테스트 병 (Maven을 통해 액세스 가능)에서 찾을 수 있습니다.
업데이트 : 위 클래스는 RestTemplate에 별 도움이되지 않는 것 같습니다. 당신이 필요로하는 것은 mock ClientHttpRequestFactory를 만드는 것인데, 나는 위의 패키지에 하나도 없다는 것에 놀랐다. 시작을위한 몇 가지 코드는 다음과 같습니다 (테스트하지 않았 음).
public class MockClientHttpRequestFactory implements ClientHttpRequestFactory{ // overwrite this if you want protected MockClientHttpResponse createResponse(){ return new MockClientHttpResponse(); } // or this protected HttpStatus getHttpStatusCode(){ return HttpStatus.OK; } // or even this @Override public ClientHttpRequest createRequest(final URI uri, final HttpMethod httpMethod) throws IOException{ return new MockClientHttpRequest(uri, httpMethod); } public class MockClientHttpResponse implements ClientHttpResponse{ private final byte[] data = new byte[10000]; private final InputStream body = new ByteArrayInputStream(data); private final HttpHeaders headers = new HttpHeaders(); private HttpStatus status; @Override public InputStream getBody() throws IOException{ return body; } @Override public HttpHeaders getHeaders(){ return headers; } @Override public HttpStatus getStatusCode() throws IOException{ return getHttpStatusCode(); } @Override public String getStatusText() throws IOException{ return status.name(); } @Override public void close(){ try{ body.close(); } catch(final IOException e){ throw new IllegalStateException(e); } } } class MockClientHttpRequest implements ClientHttpRequest{ private final HttpHeaders headers = new HttpHeaders(); private final HttpMethod method; private final URI uri; private final OutputStream body = new ByteArrayOutputStream(); MockClientHttpRequest(final URI uri, final HttpMethod httpMethod){ this.uri = uri; method = httpMethod; } @Override public OutputStream getBody() throws IOException{ return body; } @Override public HttpHeaders getHeaders(){ return headers; } @Override public HttpMethod getMethod(){ return method; } @Override public URI getURI(){ return uri; } @Override public ClientHttpResponse execute() throws IOException{ return createResponse(); } } }
-
==============================
4.spring-social-test에는 RestTemplate에 대한 테스트 작성에 도움이되는 mockup 클래스가 포함되어 있습니다. git 저장소 (예 : OAuth1TemplateTest)에서이를 사용하는 방법에 대한 몇 가지 예가 있습니다.
spring-social-test에는 RestTemplate에 대한 테스트 작성에 도움이되는 mockup 클래스가 포함되어 있습니다. git 저장소 (예 : OAuth1TemplateTest)에서이를 사용하는 방법에 대한 몇 가지 예가 있습니다.
이 클래스들을 spring-web으로 옮기기위한 Spring 기능 요청 (# SPR-7951)이 현재 있음을 명심하십시오.
from https://stackoverflow.com/questions/4643105/how-to-unittest-a-class-using-resttemplate-offline by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] JBoss resteasy - 사용자 지정 Jackson 공급자 (0) | 2019.07.16 |
---|---|
[SPRING] HTTP 요청의 리턴 상태가 401 일 때 자바에서 응답 본문을 파싱하는 방법 (0) | 2019.07.15 |
[SPRING] Thymeleaf의 입력 유효성 검사 (0) | 2019.07.15 |
[SPRING] Spring : @Bean은 @Configuration 없이도 작동 할 수 있습니다. (0) | 2019.07.14 |
[SPRING] AmazonS3 연결 관리 (0) | 2019.07.13 |