복붙노트

[SPRING] MockRestServiceServer로 REST 호출 조롱

SPRING

MockRestServiceServer로 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. ==============================

    1.MockRestServiceServer의 인스턴스를 만들 때 프로덕션 코드에서 사용중인 RestTemplate의 기존 인스턴스를 사용해야합니다. 따라서 RestTemplate을 테스트에 삽입하고 MockRestServiceServer.createServer를 호출 할 때 사용하십시오. 테스트에서 새 RestTemplate을 만들지 마십시오.

    MockRestServiceServer의 인스턴스를 만들 때 프로덕션 코드에서 사용중인 RestTemplate의 기존 인스턴스를 사용해야합니다. 따라서 RestTemplate을 테스트에 삽입하고 MockRestServiceServer.createServer를 호출 할 때 사용하십시오. 테스트에서 새 RestTemplate을 만들지 마십시오.

  2. ==============================

    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
    
  3. from https://stackoverflow.com/questions/37781982/mocking-a-rest-call-with-mockrestserviceserver by cc-by-sa and MIT license