模拟的restTemplate.postForObject未用于执行测试

时间:2017-06-06 10:09:42

标签: java spring junit mockito

我使用mickito模拟了一个postForObject resttemplate调用。

Mockito.when(restTemplate.postForObject(Mockito.eq(remoteServerlocation),Mockito.any(Input.class),Mockito.eq(String.class)))。thenReturn(responseString); < / EM>

但在实际代码中,未使用此模拟值并尝试调用远程位置。

String responseString = restTemplate.postForObject(url,input,String.class);

根据我的理解,我完全嘲笑同一个电话。但不行。 对此有任何帮助都会感激不尽。

我正在自动装配包含testcase类中的测试方法的类。这个测试类我使用new创建了restTemplate。

识别TestClass

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Application.class)
public class ActionImplTest {

    @Autowired
    private ActionImpl recommendation;

    RestTemplate restTemplate = new RestTemplate();

    @Test
    public void performActionTest() throws Exception {
        String textInput = "InputText";
        Map<String, Object> map = new HashMap<String, Object>();

        map.put("convId", "C123");
        map.put("reID", 1);
        map.put("chID", "Chann_1");

        String convID = "1254356671563";
        String chId = "2";
        String responseString = "Success"
        Mockito.when(restTemplate.postForObject(Mockito.eq("remoteServerlocation"), Mockito.any(Input.class), Mockito.eq(String.class))).thenReturn(responseString);

        Map<String, Object> response = recommendation.performAction(textInput, map, convID, chId);  
    }
}

2 个答案:

答案 0 :(得分:1)

在测试结束时添加verify步骤,mockito将为您提供有关预期内容和实际调用内容的一些提示:

Mockito.verify(restTemplate).postForObject(
    Mockito.eq(remoteServerlocation), Mockito.any(Input.class), Mockito.eq(String.class));

答案 1 :(得分:1)

以下是我在评论中引用Spring documentation

的示例
@RunWith(SpringRunner.class)
@SpringBootTest
public class ActionImplTest {

    @MockBean
    private RestTemplate restTemplate;

    @Autowired
    private ActionImpl recommendation;