junit测试用例在运行时中json.put的NoSuchMethod错误

时间:2019-05-16 22:43:48

标签: json junit mockito

编写我的Junit测试用例,如下所示。在运行测试用例时,没有得到任何此类方法错误。

ResponseObject res = initialized with some data;
ServiceImpl servie;
@Test
public void methidName(){

  ResponseObject mockObject= Mockito.spy(new ResponseObject(data));
  mockObject.setters() // more setters follows
  doReturn(someretunObject).when(mockObject).somethod();
  // calling actual method here now
   service.transfor();

} 

实际课程

ResponseOject {
 List<JSONObject> jsonList;
  ......
 }

ServiceImpl{
  public SearchResponse transfor(SearchResponse response) {
    JSONObject obj= new JSONObject(response.getConent());
    JSONArray arr= (JSONArray) obj.get("RootNode");
    ArrayList<JSONObject> list=new ArrayList<>();
    for(int i=0i<arr.size();i++){
    list.add(arr.get(i));
       }
 // doing some sorting here with the list
  Collections.sort(list, comparator);
/**/ setting the sorted collection to response object as below**
    response.setJsonList(list);
  JSONObject obj= new JSONObject();
  obj.put("rootNode", response.getJsonList);
 // getting error in above line during Junit testcase run
  }
}

问题陈述

  Getting error at this point in actual method
  obj.put("rootNode", response.getJsonList);

 java.lang.NoSuchMethodError: org.json.JSONObject.put(Llava/lang/String;Ljava/lanf/
    Collection;)Lorg/json/JSONObject

任何理由。我想念什么吗?

1 个答案:

答案 0 :(得分:0)

您在调用您认为的方法吗?您的测试正在调用此方法:

service.transfor()

但是您的代码示例显示了此方法:

public SearchResponse transfor(SearchResponse response)

您显示的那个带有输入参数,但是您没有传递一个参数,因此看来您没有调用要测试的方法。如果这只是您发布的内容中的一个错误,那么您应该查看response.getJsonList调用返回的模拟对象。如果返回的对象类型与obj.put方法所需的类型不同,则可能会出现此错误。