我在测试用例中使用restTemplate模拟,无法在代码中进行模拟。尝试拨打电话但没有成功
请找到如下测试用例:
when(restTemplate.exchange(any(),eq(HttpMethod.POST),any(HttpEntity.class),eq(MemberDataValidationResponse.class))) .thenReturn(ResponseEntity.ok(mockResponse));
@Test
public void testValidateMemberData_Success() throws Exception {
MemberValidationRequest memberRequest = new MemberValidationRequest();
memberRequest.setCorelationIdentifier("123");
MemberDataValidationResponse mockResponse = new MemberDataValidationResponse();
mockResponse.setStatus("200");
HttpHeaders headers = SelfServiceValidation.populateTokenHeaders();
HttpEntity<String> httpEntity = new HttpEntity<>(new JSONObject(memberRequest).toString(), headers);
when(restTemplate.exchange(any(), eq(HttpMethod.POST), any(HttpEntity.class), eq(MemberDataValidationResponse.class)))
.thenReturn(ResponseEntity.ok(mockResponse));
MemberDataValidationResponse response = new MemberDataValidationResponse();
try (MockedStatic<SelfServiceDaoHelper> mockStatic = mockStatic(SelfServiceDaoHelper.class)) {
mockStatic.when(() ->SelfServiceDaoHelper.auditApiRequestData(any(MapSqlParameterSource.class))).thenReturn(1);
assertEquals(1, SelfServiceDaoHelper.auditApiRequestData(new MapSqlParameterSource()));
MemberDataValidationResponse result = SelfServiceValidation.validateMemberData(memberRequest);
response = result;
};
assertNotNull(response);
assertEquals("200", response.getStatus());
}
这是下面的实际方法:
public static MemberDataValidationResponse validateMemberData(MemberValidationRequest memberValidationRequest)
throws Exception {
MemberDataValidationResponse memberValidateResponse = new MemberDataValidationResponse();
try {
if (isSelfServicePortalServerAvailable(selfServicePortalURL)) {
String corelationId = UUID.randomUUID().toString();
InetAddress ipAddress = InetAddress.getLocalHost();
String spanId = corelationId + SelfServicePortalConstants.MEMBER_VALIDATION_CODE;
HttpHeaders headers = populateTokenHeaders();
RestTemplate restTemplate = new RestTemplate();
String validateMemberAPI = selfServicePortalURL + Endpoints.MEMBER_VALIDATION;
log.info("Self Service Portal API URL :{}", validateMemberAPI);
JSONObject jsonObj = new JSONObject(memberValidationRequest);
String requestBody = jsonObj.toString();
HttpEntity<String> request = new HttpEntity<>(requestBody, headers);
processRequestAudit(memberValidationRequest, corelationId, spanId, ipAddress.toString(),
"Member Validation", "Claim Submission");
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(validateMemberAPI);
ResponseEntity<MemberDataValidationResponse> response = restTemplate.exchange(
builder.buildAndExpand().toUri(), HttpMethod.POST, request, MemberDataValidationResponse.class);
memberValidateResponse = (MemberDataValidationResponse) response.getBody();
processResponseAudit(memberValidateResponse, "", spanId, corelationId);
} else {
log.info(SELF_SERVICE_PORTAL_UNAVAILABLE_MESSAGE);
}
} catch (Exception cause) {
throw new RuntimeException(cause);
}
return memberValidateResponse;
}
如果您可以依赖 spring-boot 测试功能(例如
@RestClientTest
),我真的会尝试努力重构此代码,传递客户端以及可能的基本 URL。
但是,如果您必须坚持当前的实现,也许您可以使用 Mockito MockedConstruction 功能来解决,请参阅:https://www.baeldung.com/java-mockito-mockedconstruction
例如
try (MockedConstruction mocked = mockConstruction(RestTemplate.class)) {
RestTemplate restTamplate = new RestTemplate();
when(restTamplate.exchange(...)).thenReturn(...);
}