当前位置: 首页 > 面试题库 >

Mockito单元测试RestTemplate

贺俊材
2023-03-14
问题内容

我正在使用RestTemplate
postForEntity方法将正文发布到端点。我需要使用Mockito为我的代码编写测试用例的帮助。返回类型为void,但是可以将其更改为,Types或者code需要进行测试。我已经提到了许多其他文档,但是它们非常笼统,我尝试使用它们,但是由于requestand和return类型是不同的,所以大多数对我来说都不起作用。。任何建议表示赞赏。谢谢

这是我的Java课

    public void postJson(Set<Type> Types){
        try {
            String oneString = String.join(",", Types);
           Map<String, String> requestBody = new HashMap<>();
            requestBody.put("type", oneString);
            JSONObject jsonObject = new JSONObject(requestBody);
            HttpEntity<String> request = new HttpEntity<String>(jsonObject.toString(), null);
ResponseEntity result = restTemplate.exchange(url, HttpMethod.POST,
                    new HttpEntity<>(request, getHttpHeaders()), String.class);

        } 
    }
}

问题答案:

您正在测试MyClass类中的逻辑,因此不应模拟它。RestTemplate是MyClass内部的依赖项,因此这正是您需要模拟的内容。通常,它在测试中应如下所示:

这只是一个简单的例子。一个好的做法是检查传递给您的模拟的参数是否等于期望的参数。一种方法是Mockito.eq()用实际的预期数据代替。另一个是单独验证它,如下所示:

public ResponseEntity<String> postJson(Set<Type> Types){
            try {
                String oneString = String.join(",", Types);
               Map<String, String> requestBody = new HashMap<>();
                requestBody.put("type", oneString);
                JSONObject jsonObject = new JSONObject(requestBody);
                HttpEntity<String> request = new HttpEntity<String>(jsonObject.toString(), null);
    ResponseEntity result = restTemplate.exchange(url, HttpMethod.POST,
                        new HttpEntity<>(request, getHttpHeaders()), String.class);
                } 
        }
        return Types;

您可以按如下方式编写上述方法的测试

   @Mock
   RestTemplate restTemplate;

   private Poster poster;

   HttpEntity<String> request = new HttpEntity<>(jsonObject.toString(), getHttpHeaders());

   ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.POST, request, String.class);

   Mockito.verify(restTemplate, Mockito.times(1)).exchange(
       Mockito.eq(uri),
       Mockito.eq(HttpMethod.POST),
       Mockito.eq(request),
       Mockito.eq(String.class));

   Assert.assertEquals(result, poster.postJson(mockData));

   HttpHeaders getHttpHeaders() {
       HttpHeaders headers = new HttpHeaders();
       headers.add(// whatever you need to add);
       return headers;
   }


 类似资料:
  • 我在java中使用mockito编写单元测试。 这就是我要测试的声明。 电影是电影名称的集合,是识别电影的关键。 我嘲笑了守望者班 Mockito.when(watcher.watch(Matchers.any(Set.class))) “thenReturn”中包括什么??

  • 玩弄Mockito来实现我的服务的单元测试,但由于某种原因,我无法通过我的厚脑袋来实现这一点。我的考试通过了,但我不能确信我做得对。 下面是一个测试count()方法的示例。该方法只是将调用转发到它的存储库,我不想验证仅此而已,没有其他事情发生。这就是我得到的: 我的考试及格了,但我有一些问题。 > 我需要验证吗?我觉得我这样做是因为我想验证personRepository。实际上调用了count

  • 我想测试一个返回可选客户机的方法。 我一直在跟踪这个链接Mockito错误,方法返回可选的

  • 本文向大家介绍mockito 简单的最小Mockito测试,包括了mockito 简单的最小Mockito测试的使用技巧和注意事项,需要的朋友参考一下 示例 此示例显示了使用嘲笑的最小Mockito测试ArrayList:            

  • 问题内容: 有人可以帮我这个忙。我正在使用Jersey休息测试框架版本2.21(在Grizzly容器上)编写Rest资源的单元测试。 当我调试测试类时,看到myManager的模拟对象。但是,当调试进入“ MyResouce类”时,myManager对象将变为null并得到NullPointer异常。 尝试过其他人提供的解决方案,但是没有运气。请有人帮我。我将近三天就遇到这个问题。:( 我的资源类