使用 Mockito 测试 REST 删除方法

我需要帮助使用 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 记录。


交互式爱情
浏览 116回答 2
2回答

开满天机

您应该将其包装Void.class在 Mockito 匹配器中:&nbsp;when(restTemplate.exchange( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anyString(),&nbsp;any(HttpMethod.class),&nbsp;any(HttpEntity.class),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eq(Void.class),&nbsp;anyMap())) &nbsp;.thenReturn(noResponse);它的工作方式是所有输入都被ArgumentMatcher包装或没有。

慕田峪7331174

&nbsp;when(restTemplate.exchange( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anyString(),&nbsp;any(HttpMethod.class),&nbsp;any(HttpEntity.class),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any(Void.class),&nbsp;anyMap())) &nbsp;.thenReturn(noResponse);您不应该在 when().thenReturn() 语句中将 anyMap() 和 anyString() 等蚂蚁匹配器与精确值(例如 eq(Void.class))结合起来你也可以用 any() 替换“Void.class”
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java