2017-02-03 2 views
1

я должен издеваться запрос к API, который возвращает ответ с JSON объекта Для этого я издеваться запрос GET, а также объект JSONнасмешливый ответ на HttpGet в Java

public class RestTest { 
    static JSONObject job; 
    static JSONArray portsArray; 
    static JSONArray routesArray; 
    static JSONObject routeObject; 
    private static final HttpClient client = mock(DefaultHttpClient.class); 
    private static final HttpGet get = mock(HttpGet.class); 
    private static final HttpResponse response = mock(CloseableHttpResponse.class); 
    private static HttpEntity entity = mock(HttpEntity.class); 

    @BeforeClass 
    public static void setup() throws ClientProtocolException, IOException, JSONException { 
     HttpGet getRoute = new HttpGet("api/to/access"); 
     getRoute.setHeader("Content-type", "application/json"); 
     JSONObject routesJson = new JSONObject(); 
     routesJson.put("",""); 
     when(response.getEntity()).thenReturn(entity); 
     when(response.getEntity().getContent().toString()).thenReturn(routesJson.toString()); 
     when(client.execute(getRoutes)).thenReturn(response); 
    } 
} 

Это возвращает нуль указатель на when(response.getEntity().getContent().toString()).thenReturn(routesJson.toString());

Как я правильно издеваюсь над объектом JSON, поэтому, когда выполняется реальный запрос, он возвращает насмешливый JSON?

Я не могу установить entity.setContent(), как показано в примерах, так как метода не существует.

ответ

1

Хорошо, давайте посмотрим на эти две линии.

when(response.getEntity()).thenReturn(entity); 
    when(response.getEntity().getContent().toString()).thenReturn(routesJson.toString()); 

Как Вы думаете, что имело приоритет? Я не знаю, и я не буду рассчитывать на то, что он будет хорошо определен, независимо от того, что говорят какие-либо документы.

Что, вероятно, происходит:

Вы говорите

when(response.getEntity()).thenReturn(entity); 

Когда это происходит:

response.getEntity().getContent().toString() 

Вы, вероятно, сделать звонок

entity.getContent().toString() 

который бы определенно Caus e a NPE, поскольку вы ничего не определили для entity.getContent()

Я предлагаю вам использовать RETURNS_DEEP_STUBS, если вам нужно пройти тест таким образом. Так

private static final HttpResponse response = mock(CloseableHttpResponse.class, 
Mockito.RETURNS_DEEP_STUBS); 

Вы можете пропустить вручную насмешливый HttpEntity полностью, и просто сделать

when(response.getEntity().getContent().toString()).thenReturn(routesJson.toString()); 
Смежные вопросы