当前位置: 首页 > 知识库问答 >
问题:

如何模拟restTemplate getForObject

高鸿振
2023-03-14
package rest;

@PropertySource("classpath:application.properties")
@Service
public class RestClient {

    private String user;
    // from application properties
    private String password;
    private RestTemplate restTemplate;

    public Client getClient(final short cd) {

        restTemplate.getInterceptors().add(new BasicAuthenticationInterceptor(user, password));

        Client client = null;

        try {
            client = restTemplate.getForObject("http://localhost:8080/clients/findClient?cd={cd}",
                    Client.class, cd);
        } catch (RestClientException e) {

            println(e);
        }

        return client;
    }

    public RestTemplate getRestTemplate() {
        return restTemplate;
    }

    public void setRestTemplate(final RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
}
package test;
@PropertySource("classpath:application.properties")
@RunWith(MockitoJUnitRunner.class)
public class BatchRestClientTest {


    @Mock
    private RestTemplate restTemplate;

    @InjectMocks
    private RestClient restClient;

    private MockRestServiceServer mockServer;

    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void getCraProcessTest() {
        Client client=new Client();
        client.setId((long) 1);
        client.setCd((short) 2);
        client.setName("aaa");

        Mockito
            .when(restTemplate.getForObject("http://localhost:8080/clients/findClient?cd={cd},
                    Client.class, 2))
            .thenReturn(client);

        Client client2= restClient.getClient((short)2);
        assertEquals(client, client2);
    }

    public RestTemplate getRestTemplate() {
        return restTemplate;
    }

    public void setRestTemplate(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public RestClient getRestClient() {
        return restClient;
    }

    public void setRestClient(RestClient restClient) {
        this.restClient = restClient;
    }
}

它返回null,而不是预期的客户端,对象类的resttemplate工作正常。我只想写测试。我是漏掉了什么还是做错了测试?谢谢你的指导。

共有1个答案

郭凯
2023-03-14

改为使用以下内容:

Mockito.when(restTemplate.getForObject(
    "http://localhost:8080/clients/findClient?cd={id}",
    Client.class,
    new Object[] {(short)2})
).thenReturn(client);

第三个参数是varargs。因此,在测试中需要包装成对象[],否则Mockito无法匹配它。请注意,这将在您的实现中自动发生。

还有:

 类似资料:
  • CacheController.Somemethod();但是当submit方法被称为submit方法时,它会创建一个线程和cacheController.somemethod();从不调用测试类。

  • 当我运行测试时,我可以做什么来更改时间

  • null 我看过其他几个类似的问题,但没有一个有帮助: 模拟包含对SQLiteOpenHelper引用的类时出错 使用mockito库在java中模拟最终类-我在导入PowerMock时遇到了很多问题 如何用mockito模拟最后一个类-我已经添加了依赖项,并用行创建了文件,正如答案中所建议的那样,我仍然得到同样的错误。我还尝试了建议的答案,但这给了我一个‘没有足够的信息来推断类型变量t'erro

  • 我的要求是测试这段代码,更重要的是测试序列化器,因此,给出一个JSON片段,我如何测试所有的值都正确地通过商人的实例。 我不知道RestTemplate使用哪个序列化器将JSON序列化为对象。

  • 我知道Dan North设计BDD的意图之一是将词汇表从复杂的测试域中移开。然而,在实现由外到内的方法时,我们似乎仍然需要对模仿行为(或者,如果您愿意的话)有一些了解。North在这个视频中建议,如果我从最外层的域对象开始,然后向内工作,我会在发现合作者时模仿它们,然后用适当的实现替换它们。所以最后,我以一组端到端测试结束。 Martin Fowler在这篇博客文章中定义了TDD的两个阵营:“古典

  • 问题内容: 在我的测试案例中,我需要测试时间敏感的方法,在该方法中,我们使用的是Java 8类LocalDate,而 不是Joda 。 运行测试时,我该如何更改时间? 问题答案: 在您的代码中,将替换为。 然后,您可以通过生产并使用固定时钟进行测试。 这是一个例子: 首先,注入。如果您使用的是Spring Boot,请执行以下操作: 其次,输入您的代码: 现在,在单元测试类中: