2016-07-25 15 views
0

Ich denke, es ist etwas falsch, wenn ich versuche JSONObject mit Mockito zu spionieren. Hier ist Code von Unit-Test-Methode:Mocked JSONObject kann keinen Wert abrufen, der hinzugefügt wurde

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()); 

Hier ist der beggining des Verfahrens getToken():

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

    //do stuff 

    } 

In meinem build.gradle ich hinzugefügt haben: testCompile 'org.json:json:20140107'

+0

Funktioniert auch gut für mich, 'org.json: json: 20160212' – mszymborski

+1

Sie möchten wahrscheinlich auch' json', nicht 'JSONObject.class'' spionieren. –

Antwort

0

Ich denke, der Code, den Sie geschrieben haben ist in Ordnung. Stellen Sie sicher, dass die von Ihnen verwendete Bibliothek (java-json.jar) die richtige ist.

Ich habe den gleichen Code von Ihnen in meiner benutzerdefinierten Klasse JSONTest unten geschrieben geschrieben und es funktioniert gut.

ich die Java-jason.jar Form here heruntergeladen haben, die das gleiche Paket hat, wie Sie in dem Kommentar „org.json.JSONObject“ (Sie versuchen, das verknüpfte Glas in Ihrem Projekt können) erwähnt.

unterhalb der Arbeitscodeausschnitt ist:

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); 

     } 
    } 

Ausgang:

value 
+0

Dies ist nicht die Situation, die ich beschrieben habe, ich werde die Antwort in einem Moment hinzufügen, –

+0

Sie änderten die Frage, nachdem ich geantwortet hatte –

0

Eigentlich ist das Problem hier war:

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

Wie @Sotirios Delimanolis erwähnt haben, Ich sollte spionieren json, nicht die JSONObject Klasse. Hier erhielt ich immer den Standard {} Wert, egal was, denn spyJson war ein neuer Spion der JSONObject Klasse und es hatte keine Kenntnis von zuvor hinzugefügt token Schlüssel. Nach dem Ändern in:

JSONObject spyJson = Mockito.spy(json); 

Es funktioniert wie erwartet.