2016-07-25 47 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); 

它按預期工作。