[SPRING] MockRestServiceServer로 REST 호출 조롱
SPRINGMockRestServiceServer로 REST 호출 조롱
헬퍼 클래스에서 메서드를 테스트하는 JUnit 테스트 케이스를 작성하려고합니다. 이 메소드는 REST를 사용하여 외부 애플리케이션을 호출하며,이 호출은 JUnit 테스트에서 조롱하려고 시도한다.
헬퍼 메소드는 Spring의 RestTemplate을 사용하여 REST 호출을 만든다.
내 테스트에서, 나는 모의 REST 서버를 만들고 REST 템플릿을 모의하고 다음과 같이 그들을 instanitiate :
@Before
public void setUp() throws Exception {
mockServer = MockRestServiceServer.createServer(helperClass.getRestTemplate());
}
그런 다음 도우미 메서드가 REST 호출을 할 때 적절한 응답을 반환하도록 모의 서버를 시드합니다.
// response is some XML in a String
mockServer
.expect(MockRestRequestMatchers.requestTo(new URI(myURL)))
.andExpect(MockRestRequestMatchers.method(HttpMethod.GET))
.andRespond(MockRestResponseCreators.withStatus(HttpStatus.OK)
.contentType(MediaType.APPLICATION_XML)
.body(response));
테스트를 실행하면 도우미 메서드는 REST 호출에서 null 응답을받으며 테스트가 실패합니다.
도우미가 만드는 REST URL에는 "http : // server : port / application / resource? queryparam1 = value1 & queryparam2 = value2"와 같이 쿼리 매개 변수가 있습니다.
"myURL"변수에 쿼리 매개 변수의 유무와 상관없이 URL ( "http : // server : port / application / resource")을 넣으려고했지만 응답을 반환하도록 일치를 이끌어 냈습니다. 모의 서버에 아무것도 반환하지 마라.
이런 종류의 코드 예제를 찾으려고했지만 아직 내 시나리오와 비슷한 것으로 보이는 것을 찾지 못했습니다.
봄 버전 4.1.7.
도움을 주셔서 미리 감사드립니다.
해결법
-
==============================
1.MockRestServiceServer의 인스턴스를 만들 때 프로덕션 코드에서 사용중인 RestTemplate의 기존 인스턴스를 사용해야합니다. 따라서 RestTemplate을 테스트에 삽입하고 MockRestServiceServer.createServer를 호출 할 때 사용하십시오. 테스트에서 새 RestTemplate을 만들지 마십시오.
MockRestServiceServer의 인스턴스를 만들 때 프로덕션 코드에서 사용중인 RestTemplate의 기존 인스턴스를 사용해야합니다. 따라서 RestTemplate을 테스트에 삽입하고 MockRestServiceServer.createServer를 호출 할 때 사용하십시오. 테스트에서 새 RestTemplate을 만들지 마십시오.
-
==============================
2.나머지 클라이언트를 테스트하려고하는 것 같고 나머지 서버는 다른 곳에서 테스트해야합니다. RestTemplate -> 서비스 호출. 그런 다음 RestTemplate과 그 호출의 결과를 조롱했습니다.
나머지 클라이언트를 테스트하려고하는 것 같고 나머지 서버는 다른 곳에서 테스트해야합니다. RestTemplate -> 서비스 호출. 그런 다음 RestTemplate과 그 호출의 결과를 조롱했습니다.
@Mock RestTemplate restTemplateMock;
테스트 중 클래스 및 서비스
@InjectMocks Service service;
예를 들어, Service에는 다음과 같이 테스트 할 메소드가 있습니다.
public void filterData() { MyResponseModel response = restTemplate.getForObject(serviceURL, MyResponseModel.class); // further processing with response }
그런 다음 filterData 메소드를 테스트하려면 다음과 같이 restTemplate 호출의 응답을 조롱해야합니다.
mockResponseModel = createMockResponse(); Mockito.when(restTemplateMock.getForObject(serviceURL, MyResponseModel.class)).thenReturn(mockResponseModel); service.filterData(); //Other assert/verify,... go here
from https://stackoverflow.com/questions/37781982/mocking-a-rest-call-with-mockrestserviceserver by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 클래스 EnvironmentCapable (0) | 2019.04.07 |
---|---|
[SPRING] 봄에 빈 구성 무시 (0) | 2019.04.07 |
[SPRING] @Configuration과 @Bean 어노테이션으로 작업하는 Spring (0) | 2019.04.07 |
[SPRING] "이름이 '제품'인 지속성 단위가 없습니다. ' (0) | 2019.04.07 |
[SPRING] POST 및 SPRING-MVC를 통해 여러 객체를 보내는 문제 (0) | 2019.04.06 |