WireMock - заглушка для запроса, содержащего атрибут JSON - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь смоделировать один и тот же URL-адрес запроса (несколько раз) с разными ответами в зависимости от содержимого тела JSON.

Мой запрос JSON создается динамически, поэтому я не могу статически использовать equalToJson функция на макете.

У меня такой же JSON, как этот:

{
    // Changes according to the request
    "task": "TEXT_ENTITY_RECOGNITION",
    "category": "TEXT",
    "data": content
}

Какой лучший подход для wireMockServer заглушек?

Япробуя что-то вроде этого

wireMockServer.stubFor(post(urlEqualTo("/request"))
                        .withRequestBody(containing("TEXT_ENTITY_RECOGNITION"))
                        .withHeader("Content-Type", equalTo("application/json"))
                        .willReturn(aResponse()
                                .withStatus(201)
                                .withHeader("Content-Type", "application/json")
.withBody(mockedJson)));

Я не нашел ни одного примера подобного в документации.Спасибо!

1 Ответ

0 голосов
/ 08 февраля 2019

WireMock предоставляет несколько шаблонов содержимого EqualToPattern, и ContainsPattern - несколько из них.Попробуйте что-то вроде:

StringValuePattern urlPattern = new EqualToJsonPattern("/request", true, true);
        MappingBuilder mappingBuilder = WireMock.post(new UrlPattern(urlPattern, false));
        StringValuePattern requestBodyPattern = new ContainsPattern("TEXT_ENTITY_RECOGNITION");
        mappingBuilder.withRequestBody(requestBodyPattern).withHeader("Content-Type", new EqualToJsonPattern("application/json", true, true));
        ResponseDefinitionBuilder response = WireMock.aResponse().withBody("Successful Custom Body Response").withStatus(201).withHeader("Content-Type", "application/json");
        mappingBuilder.willReturn(response);
        wireMockServer.stubFor(mappingBuilder);

Это хорошо работает для меня.

...