在Spring MVC中模拟第三方API调用

时间:2016-06-07 06:21:41

标签: java spring-mvc junit jackson mockito

所以目前的情况是这样的。我已经构建了一个应用程序,并在控制器上运行了一些测试。然而,测试击中了实际的第三方API,然后jackson对结果进行绑定以映射到POJO对象。

我有点不确定如何模拟整个事情,而不是我最终手动填充POJO。我正在寻找一些可以采用模拟json响应并将其绑定到POJO的东西,我可以验证它与模拟json上的数据匹配。

以下是我的第三部分调用API的示例

/**
 * Makes the API call and stores result in POJO
 * It should also gracefully handle any errors
 * @return
 */
public 3rdPartySearchResult searchAPICall(){
    if(productQuery==null||productQuery.isEmpty() || productQuery.trim().isEmpty()){
        throw new NullPointerException("Query string cannot be empty");
    }
    RestTemplate restTemplate = new RestTemplate();
    WalmartSearchResult wsr = restTemplate.getForObject(3rdPartyAPIDetails.searchUrl, 3rdPartyPOJO.class,3rdPartyAPIDetails.APIKey,productQuery);
    return wsr;
}

我不知道需要模拟restTemplate.getForObject指向模拟json文件。

1 个答案:

答案 0 :(得分:0)

以下示例测试使用JMockit模拟库显示了一种方法:

@Test
public void exampleTestForSearchAPICall(@Mocked RestTemplate rest) {
    SearchAPI searchAPI = new SearchAPI(...productQuery...);

    3rdPartySearchResult result = searchAPI.searchAPICall();

    assertNotNull(result);

    // Verify the expected call to RestTemplate:
    new Verifications() {{ rest.getForObject(...argument values and/or matchers...); }};
}