2016-07-25 59 views
0

我认为当我试图使用Mockito来窥探JSONObject时出现问题。下面是从单元测试方法代码:模拟JSONObject无法检索已添加的值

JSONObject json = new JSONObject(); 
json.put("token","value"); 

JSONObject spyJson = Mockito.spy(JSONObject.class); 
PowerMockito.whenNew(JSONObject.class).withAnyArguments().thenReturn(spyJson); 
service.getToken(json.toString()); 

这里的方法getToken()的beggining:我已经添加

public LoginResponseData getToken(String response) throws JSONException { 
    JSONObject resJson = new JSONObject(response); //resJson = {} here 

    //do stuff 

    } 

在我的build.gradle: testCompile 'org.json:json:20140107'

+0

对我也适用,'org.json:json:20160212' – mszymborski

+1

另外,你可能想'spy''json',而不是'JSONObject.class'。 –

回答

0

我觉得你的代码写得很好。确保你使用的库(java-json.jar)是正确的。

我已经在我的自定义创建类JSONTest波纹管重写了你的代码,它工作正常。

我已经下载由您的评论“org.json.JSONObject”(你可以尝试使用链接的罐子到项目中)提到的具有相同的封装Java的jason.jar形式here

下面是工作代码片段:

import org.json.JSONException; 
import org.json.JSONObject; 

    public class JSONTest { 
     public static void main(String[] args) throws JSONException { 
      JSONObject json = new JSONObject(); 
      json.put("key", "value"); 
      String jsonString = json.toString(); 

      String key = new JSONObject(jsonString).getString("key"); 
      System.out.println(key); 

     } 
    } 

输出:

value 
+0

这不是我所描述的情况,我会在一会儿添加答案, –

+0

您在我回答后立即改变了问题 –

0

其实,这个问题在这里:

JSONObject spyJson = Mockito.spy(JSONObject.class); 

由于@Sotirios Delimanolis已经提到,我应该监视json,而不是JSONObject班。在这里,无论如何,我总是获得默认的{}值,因为spyJsonJSONObject类的新间谍,并且它不知道以前添加的token键。将其更改为:

JSONObject spyJson = Mockito.spy(json); 

它按预期工作。