为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Mockito 测试 REST 删除方法

使用 Mockito 测试 REST 删除方法

交互式爱情 2023-01-05 16:48:38
我需要帮助使用 Mockito 的正确语法来测试 Spring Rest 模板删除方法。服务代码:@Override    public Boolean deleteCustomerItem(String customerNumber, String customerItemId)            throws Exception {        Map<String, String> uriVariables = new HashMap<>();        uriVariables.put("itemId", customerItemId);        try {            ResponseEntity<Void> deleteResponseEntity = restTemplate.exchange( deleteCustomerItemUrl, HttpMethod.DELETE, HttpEntity.EMPTY,                    Void.class, uriVariables);            return deleteResponseEntity.getStatusCode().is2xxSuccessful();        } catch (Exception e) {            throw new AppCustomerException(e.getMessage());        }    }单元测试代码:@Test    public void testDeleteCustomerItem() throws AppCustomerException {        ResponseEntity<Void> noResponse = new ResponseEntity<Void>(HttpStatus.OK);        when(restTemplate.exchange(anyString(), any(HttpMethod.class), any(HttpEntity.class), Void.class, anyMap()))                .thenReturn(noResponse);        Boolean deleteStatus = appCustomerService.deleteCustomerItem("134", "7896");        assertEquals(Boolean.TRUE, deleteStatus);    }例外:Mockito Matchers 的使用无效。5 匹配预期 4 记录。
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

您应该将其包装Void.class在 Mockito 匹配器中:

 when(restTemplate.exchange(
      anyString(), any(HttpMethod.class), any(HttpEntity.class), 
      eq(Void.class), anyMap()))
 .thenReturn(noResponse);

它的工作方式是所有输入都被ArgumentMatcher包装或没有。


查看完整回答
反对 回复 2023-01-05
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

 when(restTemplate.exchange(
      anyString(), any(HttpMethod.class), any(HttpEntity.class), 
      any(Void.class), anyMap()))
 .thenReturn(noResponse);
  • 您不应该在 when().thenReturn() 语句中将 anyMap() 和 anyString() 等蚂蚁匹配器与精确值(例如 eq(Void.class))结合起来

  • 你也可以用 any() 替换“Void.class”


查看完整回答
反对 回复 2023-01-05
  • 2 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信