En toute tranquillité, quand nous faisons

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

L'erreur renvoyée est toujours séquentielle, c'est-à-dire que si le code d'état échoue, il ne vérifiera pas si le contentType est JSON.

De plus, l'erreur renvoyée est toujours, AssertionError (Expected : 200, Actual : 404) autrement.

Existe-t-il un moyen de créer ou de configurer quelque chose comme la façon dont nous pouvons implémenter Filter que nous pouvons fournir à la demande de construction pour intercepter le paramètre avant l'appel réel

J'ai un framework d'API de repos où la plupart des validations sont effectuées à l'aide de ValidatableResponse c'est-à-dire en utilisant .then()...; et non en créant des attentes de réponse au moment de la création de la demande.

Je souhaite intercepter un type spécifique d'échecs, c'est-à-dire si le code d'état d'échec est 50_ alors que nous attendions 200 ou autre chose, afin que l'échec réel puisse être affiché dans la raison de l'échec du test

J'ai élevé problème github

Mais je ne sais pas si cela sera mis en œuvre de sitôt. Je ne trouve rien non plus dans les documentations.

0
nishantvas 10 févr. 2020 à 19:30

1 réponse

Meilleure réponse

J'ai pu y parvenir en déléguant les implémentations Response et ValidatableResponse Interface

Fondamentalement

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

}
0
nishantvas 11 févr. 2020 à 13:27