有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

编写测试用例时将Json响应转换为java对象时出错

我正在使用api并使用Gson将Json响应转换为java对象。代码运行良好,我得到了所需的结果,但是当我编写测试用例时,我得到了一个ClassCastException

接听电话

String jsonResponse = getData(parameter1,parameter2);//api call
if(!StringUtils.equalsIgnoreCase(jsonResponse, "null"))
{`JSONObject jsonObject = new JSONObject(jsonResponse);`
Gson gson = new Gson();
somejavaObject = gson.fromJson((String) jsonObject.get("data"),
               javaObject.class);
}

电话留言

ObjectMapper mapper = new ObjectMapper();
String objectString = mapper.writeValueAsString(object);
JSONObject request = new JSONObject();
request.put("data", objectString);
request.put("otherData", someValue);
//then POST call

GET调用的测试用例

String json = "{\"data\": {\"value1\": {\"v1\": 123, \"v2\": 456}, \"list\": [{\"l1\": 123, \"l2\" :456}]}}";

PowerMockito.doReturn(json).when(spy,"getData",parameters);

上面的代码适用于api,但在上面一行测试用例失败并引发错误:

java.lang.ClassCastException: org.json.JSONObject cannot be cast to java.lang.String


共 (2) 个答案

  1. # 1 楼答案

    我找到了解决办法。 问题是我选错了类型

    somejavaObject = gson.fromJson((String) jsonObject.get("data"), javaObject.class);
    

    我把上面的线改成了

    somejavaObject = gson.fromJson( jsonObject.get("data").toString(), javaObject.class);
    

    它现在起作用了

  2. # 2 楼答案

    你能试试这个解决方案吗

    String json = "{\"data\": {\"value1\": {\"v1\": 123, \"v2\": 456}, \"list\": [{\"l1\": 123, \"l2\" :456}]}}";
             //convert string format  to JSON format
            Gson gson = new Gson();
            PowerMockito.doReturn(gson.toJson(json)).when(spy,"getData",parameters) 
    
    

    更新答案

    It will give me json, starting with " " "(a double quote). Giving me error :A JSONObject text must begin with '{' at 1

    试着用这个

    String json = "{\"data\": {\"value1\": {\"v1\": 123, \"v2\": 456}, \"list\": [{\"l1\": 123, \"l2\" :456}]}}";
            JSONObject jsonObject = new JSONObject(json);
           PowerMockito.doReturn(jsonObject).when(spy,"getData",parameters);