[JAVA] Comment vérifier les éléments variables avec RequestBodyMatching de WireMock

J'utilise souvent WireMock lorsque je veux effectuer un test simulé de l'autre partie. L'appariement des demandes peut également être effectué, ce qui est très pratique.

stubFor(post(urlEqualTo("/mockurl"))
    .withRequestBody(equalToJson(REQUEST_JSON_STRING))
    .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json")
    .withBody(RESPONSE_JSON_STRING)));

Si vous écrivez comme ci-dessus, RESPONSE_JSON_STRING ne sera retourné que lorsqu'un message JSON correspondant à REQUEST_JSON_STRING est accepté.

cependant,

--Si l'application émet une chaîne aléatoire

Il existe de nombreux éléments difficiles à assortir.

{
    "token": "uPx2bB9"
    "accept_date": "2018-01-01T00:00:00.000Z",
}

De plus, si vous voulez lire REQUEST_JSON_STRING à partir d'un fichier, vous ne voulez pas préparer autant de fichiers qu'il y a d'éléments variables.

Dans un tel cas, ajoutez un argument à ʻequalToJson`.

StringValuePattern com.github.tomakehurst.wiremock.client.WireMock.equalToJson(String value, boolean ignoreArrayOrder, boolean ignoreExtraElements)

En définissant ʻignoreExtraElements = true, les éléments qui n'existent pas dans value` seront ignorés.

stubFor(post(urlEqualTo("/mockurl"))
    .withRequestBody(equalToJson(REQUEST_JSON_STRING, true, true))
    .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json")
    .withBody(RESPONSE_JSON_STRING)));

Si vous le définissez comme ci-dessus,

REQUEST_JSON_STRING

{
    "name": "hoge",
    "data": {
        "value": 1000
    }
}

Demande réelle:

{
    "name": "hoge",
    "data": {
        "token": "uPx2bB9",
        "id": "abcde",
        "value": 1000
    }
}

Mais la correspondance est réussie (les éléments token et ʻidsont ignorés). Vous pouvez également utilisermatchingJsonPath` pour valider les éléments ignorés.

StringValuePattern com.github.tomakehurst.wiremock.client.WireMock.matchingJsonPath(String value)

Si vous souhaitez vérifier que l'élément existe (Lorsque l'heure actuelle ou une chaîne de caractères aléatoires est émise par l'application et qu'il est difficile de comparer)

stubFor(post(urlEqualTo("/mockurl"))
    .withRequestBody(equalToJson(REQUEST_JSON_STRING, true, true))
    .withRequestBody(matchingJsonPath("$.data.token")) // "token"Vérifiez qu'il y a un élément
    .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json")
    .withBody(RESPONSE_JSON_STRING)));

Si vous souhaitez également vérifier la valeur d'un élément (Par exemple, lorsque vous souhaitez vérifier des éléments variables en fonction des données de test)

stubFor(post(urlEqualTo("/mockurl"))
    .withRequestBody(equalToJson(REQUEST_JSON_STRING, true, true))
    .withRequestBody(matchingJsonPath("$.data[?(@.id == 'abcde')]")) // "id"Validez la valeur de
    .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json")
    .withBody(RESPONSE_JSON_STRING)));

Recommended Posts

Comment vérifier les éléments variables avec RequestBodyMatching de WireMock
Comment numéroter (nombre) avec html.erb
Comment mettre à jour avec activerecord-import
Comment démarrer avec Slim
Comment entourer n'importe quel caractère avec "~"
Comment utiliser mssql-tools avec Alpine
Comment écrire une déclaration de variable Java
Comment démarrer Camunda avec Docker
Comment recadrer une image avec libGDX
Comment ajuster TextPosition avec l'extension de clavier iOS
Comment partager des fichiers avec Docker Toolbox
Comment compiler Java avec VsCode & Ant
[Java] Résumez comment comparer avec la méthode equals
[Android] Comment gérer les thèmes sombres
Comment utiliser BootStrap avec Play Framework
Comment changer d'images miniatures avec JavaScript
[Note] Comment démarrer avec Rspec
Comment faire un contrôle basé sur l'API avec cancancan
Comment réaliser le téléchargement de fichiers avec Feign
Comment mettre à jour les modèles associés avec accepte_nested_attributes_for
Comment définir JAVA_HOME avec l'appassembler-maven-plugin de Maven
Comment gérer les erreurs de connexion avec l'appareil
Comment supprimer des données avec une clé externe
Comment surveiller nginx avec docker-compose avec datadog
Comment gérer les actifs de précompilation a échoué.
Comment réaliser le téléchargement de fichiers avec Feign
Comment exécuter Blazor (C #) avec Docker
Comment créer un environnement Rails 6 avec Docker
Comment télécharger Oracle JDK 8 rpm avec curl
[Java] Comment tester s'il est nul dans JUnit
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
Comment se moquer de chaque cas avec PowerMock + Mockito1x
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment enregistrer dans plusieurs tables avec une seule entrée
Comment tester les interruptions pendant Thread.sleep avec JUnit
Comment utiliser h2db intégré avec Spring Boot
Comment utiliser le framework Java avec AWS Lambda! ??
Comment créer plusieurs menus déroulants avec ActiveHash
Comment utiliser l'API Java avec des expressions lambda
Comment donner votre image à quelqu'un avec Docker
Comment tout insérer en même temps avec MyBatis
Comment écrire du code de test avec la certification de base
Comment créer une API avec GraphQL et Rails
Comment sortir un fichier de ressources avec spring-boot
Comment créer des variables membres avec le modèle JPA
[Rails] Comment créer un environnement avec Docker
Comment éviter les exceptions avec la méthode Equals de Java
Comment rediriger après la connexion de l'utilisateur avec Spring-security
Comment intégrer des variables JavaScript dans HTML avec Thymeleaf
Comment implémenter UICollectionView avec du code uniquement dans Swift
Comment changer l'action avec plusieurs boutons d'envoi
Comment trier par ordre croissant / décroissant avec SQLite