2016-07-12 24 views
0

Lassen Sie uns sagen, dass ich eine Klasse namens Api haben und es hat eine Methode:Wie instanziiere ich eine united HttpResponse <JsonNode> für meinen Schein?

public class Api{ 
    public HttpResponse<JsonNode> request() { 
     try { 
      return Unirest.get("http://localhost:8080").header("accept", "application/json").asJson(); 
     } catch (UnirestException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

Und ich habe eine Klasse: meine Business-Logik testen, auf der Grundlage der Antwort

public class Dao(){ 

    private Api api; 
    public Dao(Api api){ 
     this.api = api; 
    } 

    public Integer test(){ 
     Integer result = api.request().getInteger("result"); 
     return result + 100; 
    } 
} 

In meinem Test Ich möchte Meine API.request-Methode gibt zurück.

Etwas wie:

import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.stub; 
import org.json.JSONObject; 
import com.mashape.unirest.http.HttpResponse; 

public class ApiTest { 
    private API api = mock(API.class); 
    public void test() { 
     HttpResponse<JsonNode> response = null; 
     JSONObject result = new JSONObject(); 
     response.getBody().getObject(); 
     stub(api.request("")).toReturn(response); 
     Dao dao = new Dao(api); 
     assertTrue(dao.test() > 100); 
    } 
} 

Wie instanziieren ich die Httpresponse mit einem Body „{Nummer: 10}“ in der Lage sein, um es mit dem Modell zurück?

Antwort

0

Es arbeitet mit:

import org.apache.http.impl.DefaultHttpResponseFactory; 
import org.json.JSONObject; 


HttpResponseFactory factory = new DefaultHttpResponseFactory(); 
org.apache.http.HttpResponse response = factory.newHttpResponse(new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, null), null); 
JSONObject json = new JSONObject(); 
json.put("result", "10"); 
response.setEntity(new StringEntity(json.toString())); 
com.mashape.unirest.http.HttpResponse<JsonNode> httpResponse = new HttpResponse<JsonNode>(response, JsonNode.class); 
2

Dies ist, wie ich es tun:

public class Dao() { 

    private Api api; 

    public Dao(Api api){ 
     this.api = api; 
    } 

    public Integer test(){ 
     // this is probably not good style 
     // should iterate through pulling out each piece 
     Integer result = api.request().getBody().getObject().getInteger("result"); 
     return result + 100; 
    } 
} 

public class ApiTest { 
    private API api = mock(API.class); 
    public void test() { 
     JsonNode json = new JsonNode("{\"result\":10}"); 

     HttpResponse<JsonNode> mockResponse = mock(HttpResponse.class); 
     when(mockResponse.getCode()).thenReturn(200); 
     when(mockResponse.getBody()).thenReturn(json); 

     when(api.request(anyString())).thenReturn(mockResponse); 

     Dao dao = new Dao(api); 
     // this should be done more carefully as well, check code/body/etc.. 
     assertTrue(dao.test() > 100); 
    } 
}