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

使用 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贡献1550条经验 获得超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贡献1554条经验 获得超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

添加回答

举报

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