La requête POST échoue (test de repos assuré)
J'ai un problème avec une requête POST avec le repos assuré.
Ce code fonctionne:
given().contentType(ContentType.JSON).body("{\"key\": \"val\"}").
when().post(url + resource).then().assertThat().statusCode(200).body("otherVal", equalTo(otherVal));
Mais j'ai essayé d'utiliser param()
ou parameter()
des méthodes telles que:
Cela donne:
given().parameter("key", "val").
when().post(url + resource).then().assertThat().statusCode(200);
Expected status code <200> doesn't match actual status code <415>.
Ce:
given().parameter("key", "val").
when().post(url + resource).then().assertThat().body("otherVal", equalTo(otherVal));
java.lang.IllegalStateException: Expected response body to be verified as JSON, HTML or XML but no content-type was defined in the response.
Try registering a default parser using:
RestAssured.defaultParser(<parser type>);
Et Ce:
RestAssured.defaultParser = Parser.JSON;
given().parameter("key", "val").
when().post(url + resource).then().assertThat().body("otherVal", equalTo(otherVal));
java.lang.IllegalArgumentException: The JSON input text should neither be null nor empty
Je suis à court d'idées quoi de mal.
Ce que j'essaie de faire est d'éviter d'écrire plein jsons pour tous les tests, il sera plus rapide si je pouvais ignorer tout "" et {}.
Mon approche correcte?
source d'informationauteur Purple
Vous devez vous connecter pour publier un commentaire.
Regardons votre premier exemple:
Ce qui se passe ici est que vous mettez
{ "key" : "val" }
(que du texte) dans le corps de la demande. Ce texte se trouve être JSON. Du RESTE Assurée du point de vue, vous pourriez aussi bien mettre{ "key" : "val"
qui n'est pas valide JSON. Votre serveur répond correctement depuis le serveur exige et comprend JSON. Il comprend que le corps doit être JSON depuis que vous avez passer de JSON comme type de contenu.Regardons donc votre deuxième exemple:
Ici vos retours de service 415 parce que vous êtes absent le contenu JSON-type. Ce qui se passe lorsque vous utilisez
param
ouparameter
avecPOST
est que vous créez les paramètres de formulaire. Les paramètres de formulaire sont envoyées dans le corps de la requête, MAIS les paramètres de formulaire ne sont pas JSON! En spécifiant "clé" et "val" comme paramètre de formulaire, comme vous, ne sera le même que celui de la:Donc, dans votre deuxième exemple, il y a en fait deux problèmes:
Et à cause de (2), on obtient 415 à partir du serveur
De passer à votre troisième exemple:
Ce que (probablement) se produit ici, c'est que votre serveur ne contient pas le corps de la réponse, car il attend que la demande pour y inclure "application/json" en tant que type de contenu. Donc, il n'y a pas de corps de faire valoir que la requête est mal)! La réponse ne contient que les 415 statut (en ligne) comme un en-tête.
Qui nous mène à votre dernier exemple:
Ici vous instruire REPOS Assuré pour traiter un manque de contenu de type JSON, mais le problème (encore une fois), c'est que votre serveur ne retourne pas tout le corps de la réponse à tous si ce n'est pas aider.
Solution:
Vous devriez mettre un pris en charge objet JSON-framework de mapping (Jackson, plus Rapide Jackson, Simple JSON ou Gson) dans votre classpath (par exemple
jackson-databind
) et il suffit de créer une carte comme décrit dans la la documentation:Depuis la création de cartes en Java est assez verbeux j'ai l'habitude de faire quelque chose comme cela si j'ai imbriqué cartes:
Ou vous créer un DTO représentation de vos données et juste passer un objet au REPOS Assuré:
Vous pouvez en lire plus dans le objet de mappage de documentation.
J'étais à la recherche de la réponse et j'ai compris aussi ..
ajouter un fichier à votre répertoire src/test/ressources dossier et ajouter ce code à votre test . Devrait être tout bon