相關代碼如下:服務代碼:@Overridepublic ResponseEntity<AppointmentResponse> createAppointment(AppointmentRequest partnerFulfillmentRequest) { RestTemplate rt = null; ResponseEntity<AppointmentResponse> response = null; String uri = null; HttpEntity<AppointmentRequest> httpEntity = null; HttpHeaders headers = null; try { rt = new RestTemplate(); rt.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); rt.getMessageConverters().add(new StringHttpMessageConverter()); uri = new String(internalServiceUrl+"/"+APP_NAME_INTERNAL+"/appointment"); log.info("Calling internal service URL : "+uri); headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); httpEntity = new HttpEntity<AppointmentRequest>(partnerFulfillmentRequest, headers); response = rt.exchange(uri, HttpMethod.PUT, httpEntity, AppointmentResponse.class); if (response != null) { log.info("Got response from internal servicec-->statusCode: "+response.getStatusCodeValue()); log.info("Got response from internal service--> Body "+response.getBody()); } }catch(HttpClientErrorException hceEx) { //hceEx.printStackTrace(); AppointmentResponse res = new AppointmentResponse(); return new ResponseEntity<AppointmentResponse>(mapResponse(hceEx.getResponseBodyAsString()), hceEx.getResponseHeaders(), hceEx.getStatusCode()); }我得到 java.lang.AssertionError: Expected :500 Actual :200 并且可以理解,因為它實際上并沒有調用運行.thenReturn(responseEntity);邏輯。我的百萬美元問題是,為什么?它應該返回 responseEntity 值。我有 exchange() 到 any() 的所有參數,希望盡可能頻繁地觸發條件,因為我總是可以在不同的時間縮小條件。我沒有正確地嘲笑我的 restTemplate 嗎?這是我目前對發生的事情的懷疑。任何建議都會有所幫助!
1 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
您正在RestTemplate測試方法內部創建一個新實例。這意味著該exchange方法將從新實例調用,而不是模擬。如果包含該方法的類createAppointment具有RestTemplate.
你想要的是模擬新實例的構造函數RestTemplate,以便在創建新實例時將其替換。不幸的是,Mockito 無法模擬構造函數,因此您應該使用PowerMockito來模擬構造函數。
whenNew(RestTemplate.class).withNoArguments().thenReturn(restTemplate);
responseEntity = new ResponseEntity<>(
? ? ? ? ? ? "some response body",
? ? ? ? ? ? HttpStatus.OK
? ? );
when(restTemplate.exchange(Mockito.anyString(),
? ? ? ? Mockito.<HttpMethod> any(),
? ? ? ? Mockito.<HttpEntity<?>> any(),
? ? ? ? Mockito.<Class<Object>> any()))
? ? ? ? .thenReturn(responseEntity);
添加回答
舉報
0/150
提交
取消