gpt4 book ai didi

java - Mockito 单元测试 RestTemplate

转载 作者:行者123 更新时间:2023-12-01 22:35:41 30 4
gpt4 key购买 nike

我正在使用 RestTemplate postForEntity 方法将正文发布到端点。我需要帮助使用 Mockito 为我的代码编写测试用例。返回类型为 void,但如果需要测试,可以将其更改为 Typescode。我引用了许多其他文档,但它们非常通用,我尝试使用它们,但大多数对我不起作用,因为请求和返回类型不同。 。任何建议表示赞赏。谢谢您

这是我的 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 单元测试 RestTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59780621/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com