2015-01-20 1 views
3

У меня есть следующий код, который должен проверить мой RESTful API:Отдых-уверен. Как проверить, не возвращается ли пустой массив?

given().baseUri("http://...").get("/categories/all") 
    .then() 
    .body(
     "results", not(empty()) 
    ); 

API-интерфейс возвращает следующий ответ:

{ 
    "error": { 
     "type": "NotFoundException" 
    } 
} 

И я хочу испытание на неудачу для такого ответа. Но тест проходит.

Как я могу изменить тест, чтобы он не прошел? Он должен пройти, только если API возвращает объект, который содержит непустой массив в «результатах». Он должен завершиться неудачно, если ключ «результаты» не существует, содержит пустой массив или когда он содержит что-то, что не является массивом.

+0

Почему бы не возвращать список вместо этого, и использовать .isEmpty() проверить? – Stultuske

+0

Просто примечание: если вы хотите быть RESTful, не возвращайте код ошибки в ответ тела, но используйте стандартные [коды возврата HTTP] (http://www.w3.org/Protocols/HTTP/HTRESP.html) ('Not Found' is' 404') – ThanksForAllTheFish

+0

@Stultuske Я не совсем понимаю ваш комментарий. Должен ли я вернуть список из REST API? Но API работает неправильно, он не возвращает список, и я хочу его проверить. – JustAC0der

ответ

3

я придумал следующее решение:

given().baseUri("http://...").get("/categories/all") 
    .then() 
    .body(
     "results", hasSize(greaterThan(0)) 
    ); 

Это терпит неудачу, если «результаты» является пустой массив или не массив. Проходит, если «результаты» являются непустым массивом. Он сообщает об ошибке в читаемом способом, например .:

Expected: a collection with size a value greater than <0> 
Actual: null 
0

I шляпа похожая проблема, но в моем случае конечная точка direcly возвращает массив. Мое решение для этого:

@Test 
public void testNotEmpty() { 
    uAssured.given() 
      .when() 
       .get("resources/totest") 
      .then() 
       .statusCode(200) 
       .body("$.size()", greaterThan(0)); 
} 

Для примера выше должно работать, а также:

@Test 
public void testNotEmpty() { 
    uAssured.given() 
      .when() 
       .get("resources/totest") 
      .then() 
       .statusCode(200) 
       .body("results.size()", greaterThan(0)); 
} 
Смежные вопросы