2017-09-01 77 views
0

我想知道我怎麼嘲笑,其餘控制器下面的代碼,如何嘲笑休息服務

public void sendData(ID id, String xmlString, Records record) throws ValidationException{ 
     ClientHttpRequestFactory requestFactory = new 
       HttpComponentsClientHttpRequestFactory(HttpClients.createDefault()); 
     RestTemplate restTemplate = new RestTemplate(requestFactory); 

     List<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); 
     messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8"))); 

     restTemplate.setMessageConverters(messageConverters); 

     MultiValueMap<String,String> header = new LinkedMultiValueMap<>(); 
     header.add("x-api-key",api_key); 
     header.add("Content-Type",content_type); 
     header.add("Cache-Control",cache_control); 
     HttpEntity<String> request = new HttpEntity<>(xmlString, header); 

     try { 
      restTemplate.postForEntity(getUri(id,record), request, String.class); 
     }catch (RestClientResponseException e){ 
      throw new ValidationException("Error occurred while sending a file to some server "+e.getResponseBodyAsString()); 
     } 

    } 

任何建議將是有益的。 我試圖做這樣的事情,

@RunWith(MockitoJUnitRunner.class) 
    public class Safe2RestControllerTest { 
     private MockRestServiceServer server; 
     private RestTemplate restTemplate; 
     private restControllerClass serviceToTest; 

    @Before 
    public void init(){ 
    //some code for initialization of the parameters used in controller class 
     this.server = MockRestServiceServer.bindTo(this.restTemplate).ignoreExpectOrder(true).build(); 
    } 

     @Test 
     public void testSendDataToSafe2() throws ValidationException, URISyntaxException { 

     //some code here when().then() 
     String responseBody = "{\n" + 
        " \"responseMessage\": \"Validation succeeded, message 
         accepted.\",\n" + 
        " \"responseCode\": \"SUCCESS\",\n" + 
        " 2\"responseID\": \"627ccf4dcc1a413588e5e2bae7f47e9c::0d86869e-663a-41f0-9f4c-4c7e0b278905\"\n" + 
        "}"; 
     this.server.expect(MockRestRequestMatchers.requestTo(uri)) 
     .andRespond(MockRestResponseCreators.withSuccess(responseBody, 
     MediaType.APPLICATION_JSON)); 

     serviceToTest.sendDataToSafe2(id, xmlString, record); 
     this.server.verify(); 
     } 
    } 

這是測試用例我想要做的,但它仍實際調用REST API

+0

https://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#spring-mvc-test-client –

回答

0

正如@JBNizet指出的那樣,你應該採取看看MockRestServiceServer。它允許您測試使用RestTemplate進行HTTP調用的Spring組件。

參見MockRestServiceServer@RestClientTest

+0

我試過使用@JB Nizet的建議,但它仍然試圖嘗試實際服務電話而不是嘲笑它。下面是我嘗試使用的代碼片段,this.server.expect(MockRestRequestMatchers.requestTo(uri)) .andRespond(MockRestResponseCreators.withSuccess(responseBody,MediaType.APPLICATION_JSON)); – tyro

+0

代碼是這樣的, – tyro

+0

請提出一個新問題 - 評論是不是真的是正確的地方 –