Как перехватить заверенную ошибку подтверждения ответа - PullRequest
0 голосов
/ 10 февраля 2020

В состоянии покоя, когда мы делаем

given().get("/api").then().statusCode(SC_OK).content(JSON);

Выдающаяся ошибка всегда является последовательной, то есть, если код состояния не выполняется, он не будет проверять, является ли contentType JSON.

Кроме того, выдается сообщение об ошибке всегда, AssertionError (ожидаемое: 200, фактическое: 404). Невозможно понять из этого, каким был фактический ответ, он будет напечатан на STDOUT, если мы включим ведение журнала, но это недоступен другим способом.

Есть ли способ построить или настроить что-то вроде того, как мы можем реализовать Filter, который мы можем предоставить при построении запроса, чтобы перехватить настройку перед фактическим вызовом

У меня есть остальные API-интерфейсы, в которых большинство проверок выполняется с использованием ValidatableResponse, т. Е. С использованием .then()...;, а не путем создания ожиданий ответа во время создания запроса.

I wi sh для перехвата указанного c тип сбоев, т. Е. Если ошибка кода состояния равна 50_, когда мы ожидали 200 или что-то еще, так что фактический сбой может быть опубликован в причине сбоя теста * 10 15 *

Я поднял вопрос github

Но я не уверен, будет ли это реализовано в ближайшее время. Я также не могу найти ничего в документации.

1 Ответ

0 голосов
/ 11 февраля 2020

Я смог добиться этого, делегировав реализации интерфейса Response и ValidatableResponse

В основном

public class DelegateResponse implements Response {

  Response response;

  DelegateResponse(Response response){
    this.response = response;
  }
  .
  .
  .
  // Override and delegate other functions normally, but in the below call, delegate further

  @Override
  ValidatableResponse then(){
    return new DelegateValidatableResponse(response.then(), response);
  }

}

public class DelegateValidatableResponse implements ValidatableResponse {

  ValidatableResponse validatableResponse;
  Response response;

  DelegateValidatableResponse(ValidatableResponse validatableResponse,Response response) {
    this.validatableResponse = validatableResponse;
    this.response = response;
  }
  .
  .
  .
  // Override and delegate other functions similarly and wrap with try catch
  // This gives us access to Response object if an exception is thrown and we have more details
  // than just the String "Expected status code 200 but was 500"

  @Override
  public ValidatableResponse statusCode(Matcher<? super Integer> expectedStatusCode) {
    try {
      return validatableResponse.statusCode(expectedStatusCode);
    } catch (Throwable exception) {
      throw new ApiValidationError(response, requestSpec, responseSpec, exception);
    }
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...