java - 如何对restTemplate进行junit测试?

标签 java resttemplate junit5

我在使用 Mockito 模拟restTemplate 时遇到问题

要测试的代码:

public class Feature{
 public static String getfeature(String url){
     RestTemplate restTemplate = new RestTemplate();
     String xml = "\"feature\": 1";
     String json = restTemplate.postForObject(url, xml, String.class);
     return json;
}
}

junit代码:

@Mock
RestTemplate restTemplate=mock(RestTemplate.class);
@Test
public void testGetfeature(){
string testResponse= "\"feature\": 1";
Mockito.when((String)restTemplate.postForObject(
                Mockito.any(String.class),
                Mockito.any(Map.class),
                Mockito.any(Class.class)
                )).thenReturn(testResponse);
Feature feature = new Feature();
feature.getfeature("http://mockValue");
}

我在feature.getfeature("http://mockValue ")处设置了断点。它仍然尝试连接到远程服务器。我不希望 postForObject 连接到 http://mockValue 。 我应该如何模拟restTemplate以使postForObject不连接到http://mockValue

最佳答案

您正在 getfeature() 方法中创建一个新的 RestTemplate 对象。因此,模拟 RestTemplate 没有效果。要么将 RestTemplate 作为 getfeature() 方法中的参数,要么将其作为 Feature 类中的构造函数参数。

然后从测试类中,您可以模拟 RestTemplate 并传递它,如下所示:

Feature feature= new Feature(mockRestTemplate);
feature.getfeature(url);

或者

Feature feature = new Feature();
feature.getfeature(mockRestTemplate, url);

您必须根据决定对要素类进行必要的更改。

这是运行代码示例:

主类:

public class Feature {
    public static String getFeature(String url, RestTemplate restTemplate) {
        return restTemplate.postForObject(url, "", String.class);
    }
}

测试类:

请注意 RestTemplate 被模拟的方式,然后模拟响应。

public class FeatureTest {
    @Test
    public void testFeature() {
        RestTemplate restTemplate = Mockito.mock(RestTemplate.class);
        Mockito.when(restTemplate.postForObject(Mockito.any(String.class),
                Mockito.any(Object.class), Mockito.any(Class.class))).thenReturn("abc");
        System.out.println(Feature.getFeature("http://abc", restTemplate));
    }
}

运行代码示例也可在 github 处获取。

Feature.javaFeatureTest.java

关于java - 如何对restTemplate进行junit测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57297136/

相关文章:

spring-boot - 使用Gradle 4.6的jUnit 5 HTML报告

java - 如何使用 JUnit、Resteasy 和 Jetty 测试 JAX-RS 应用程序

java - 在 Spring 集成测试中模拟 RestTemplateBuilder 和 RestTemplate

java - 如何通过代理从GET请求返回base64图像?

java - 带有JDK11的Kubernetes中的Spring Boot随机 "SSLException: Connection reset"

java - 如何获取 JUnit 5 中测试的当前重复次数?

java - 在 Java 中实现 typedef

java - DynamicReports 不在页面开始处打印列标题

java - 卡夫卡只订阅最新消息?

JavaHelp系统帮助