Я генерирую JSON, который я использую для тестирования Wiremock. Однако теперь мне нужно добавить случайно сгенерированную строку в JSON, которая, очевидно, изменяется каждый раз при запуске моего теста. Это приводит к сбою утверждения. Есть ли у кого-нибудь идеи, как я могу обойти эту проблему?
Json:
"data": {
"case": {
"user": {
"name": {
"title": "Mr",
"firstName": "John",
"lastName": "Smith"
},
"address": { }
}
},
"subscriptions": {
"userSubscription": {
"randomNumber": "{{I am a random string so fail}}",
"email": null,
"mobile": null
},
"supporterSubscription" : null
}
}
Контрольная работа:
@Test
public void should_handle_callback()
throws Exception {
submitStub();
HttpEntity<String> request = new HttpEntity<>("string");
// fails
ResponseEntity<CallbackResponse> result =
this.restTemplate.postForEntity(baseUrl, request, CallbackResponse.class);
}
private static String loadJson(String fileName) throws IOException {
URL url = getResource(fileName);
return Resources.toString(url, Charsets.toCharset("UTF-8"));
}
private void submitStub() throws Exception {
ccdServer.stubFor(post(concat(SUBMIT_EVENT_URL))
.withHeader(AUTHORIZATION, equalTo(USER_AUTH_TOKEN))
.withHeader(SERVICE_AUTHORIZATION_HEADER_KEY, equalTo(SERVICE_AUTH_TOKEN))
.withHeader(CONTENT_TYPE, equalTo(MediaType.APPLICATION_JSON_UTF8_VALUE))
.withRequestBody(equalToJson(createCaseRequest))
.willReturn(aResponse()
.withHeader(CONTENT_TYPE, APPLICATION_JSON_VALUE)
.withStatus(200)
.withBody(loadJson("testjson.json"))));
}




Я не верю, что есть какие-то «нестандартные» способы утверждать против подстановочных знаков внутри тела запроса. Я сталкивался с подобной проблемой в прошлом и использовал запросы критериев в прошлом, которые работают достаточно хорошо.
http://wiremock.org/docs/verifying/
Взгляните на раздел «Критерии запросов» на этой странице, где показан пример прямого запроса журнала запросов.
Код должен выглядеть примерно так:
List<LoggedRequest> requests = findAll(postRequestedFor(urlMatching("/api/.*")));
После того, как вы вернули этот список запросов, вы можете просмотреть результаты, чтобы определить, содержит ли одно из тел LoggedRequest нужный json.
Хорошей библиотекой для проверки совпадения JSON с подстановочными знаками является JSON-Unit, которая позволяет заполнять поля, которые автоматически генерируются с помощью «$ {json-unit.ignore}».
https://github.com/lukas-krecan/JsonUnit
Ваше утверждение может выглядеть примерно так:
assertThatJson(requests.get(0).getBodyAsString())
.isEqualTo("{\"id\":\"${json-unit.ignore}\",\"name\":\"bob\"}");
randomNumberгенерирует с помощью вашего кода? не могли бы вы издеваться над этим, чтобы сгенерировать псевдослучайную строку?