这是我的代码,我想嘲笑。
Map<String, String> params = new HashMap<>();
params.put(LOGIN_ID, loginId);
params.put(LOGIN_PWD, loginPwd);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity httpEntity = new HttpEntity<>(params, headers);
ResponseEntity<HashMap> omsResponse = restTemplate.exchange(loginUrl, HttpMethod.POST, httpEntity, HashMap.class);
这是我正在运行的测试。
PromotionDto promotionDto = getPromotionDto();
ResponseEntity<HashMap> omsResponse = new ResponseEntity<>(new HashMap(), HttpStatus.OK);
Map<String, String> params = new HashMap<>();
HttpHeaders headers = new HttpHeaders();
HttpEntity httpEntity = new HttpEntity<>(params, headers);
String loginUrl = "https://dev.example.com/smcfs/restapi/invoke/login";
Mockito.when(restTemplate.exchange(loginUrl, HttpMethod.POST, httpEntity, HashMap.class)).thenReturn(omsResponse);
OrderCaptureOMSResponse response = omsService.orderCapture(promotionDto, IS_EMPLOYEE);
我遇到的错误
org.mockito.exceptions.misusing.PotentialStubbingProblem:
严格存根参数不匹配。请检查:
- “Exchange”方法调用:restTemplate.exchange空,POST,〈{登录ID =空,密码=空},[内容类型:“应用程序/json”]〉,类java.util.哈希Map);- 〉在com上。qurateretail。订单。促销。服务。系统服务实现。系统界面登录(系统服务实现。java:87)
1.包含以下具有不同参数的存根:
1.在restTemplate.exchangehttps://dev.example.com/smcfs/restapi/invoke/login列Map。一般来说,存根参数不匹配表示用户在编写代码时出错。
1条答案
按热度按时间ee7vknir1#
当复制你的代码并自己运行它时,如果使用正确,它工作得很好;).
从错误消息
你可以看到在你的代码中,参数“loginUrl”和你所模拟的是不同的。在你的模拟中,它模拟“https://dev.example.com/smcfs/restapi/invoke/login“作为loginUrl。在你的实际执行中,代码中的URL为空。只有当模拟和该方法的调用具有完全相同的参数时,模拟才起作用。为什么你的loginUrl为空,这是我不能用你提供的代码说出来的。相关部分缺失。
另一种方法是对模拟进行归纳。
然而,这是一个有点棘手的restTemplate,因为方法重载的“交换”使它变得困难。匹配参数是更好的反正。