Ресотрастные броски httpresponsexception на 422 Необработанную организацию вместо разрешения утвержденийJAVA

Программисты JAVA общаются здесь
Anonymous
Ресотрастные броски httpresponsexception на 422 Необработанную организацию вместо разрешения утверждений

Сообщение Anonymous »

Я сталкиваюсь с постоянной проблемой с RestaSured, где он бросает io.restassured.internal.http.httpresponseexception для ответа 422 необработаемого сущности, предотвращая мой тест на достижение этапов утверждения. Моя цель состоит в том, чтобы грациозно обработать ответ 422, извлечь объект ответа и проверить его код состояния и тело. Тест пытается обновить ресурс, который не существует, который правильно запускает ответ 422 от моего API. Тем не менее, мой тестовый код не удается с исключением, вместо того, чтобы выполнять шаги проверки.@enrollment @progress @negative
Scenario: Attempt to track progress for non-enrolled course
Given a student is not enrolled in the course
When the student attempts to update lecture progress
Then the progress update should fail with status code 422
And the error message should contain "ENROLLMENT_NOT_FOUND"
< /code>
Определения шага (.java):
Тест не удается внутри метода thestudentupdateslectureprescresstopercent, который отправляет запрос PUT. < /p>
import static io.restassured.RestAssured.given;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import java.util.UUID;

// Class-level fields
private Response response;
private RequestSpecification trainingRequestSpec;

@When("the student updates lecture progress to {double} percent")
public void theStudentUpdatesLectureProgressToPercent(double percentage) {
var progressRequest = TestDataFactory.createProgressUpdateRequest(percentage);
String nonExistentEnrollmentId = UUID.randomUUID().toString();

// ❌ Throws HttpResponseException: 422 Unprocessable Entity
response = given()
.spec(trainingRequestSpec)
.body(progressRequest)
.when()
.put("/api/v1/enrollments/" + nonExistentEnrollmentId + "/progress");
}

@Then("the progress update should fail with status code {int}")
public void theProgressUpdateShouldFailWithStatusCode(int expectedStatusCode) {
response.then().statusCode(expectedStatusCode);
}
< /code>
То, что я пробовал (но не работал): < /p>
Использование .Then (). Extract (). response (): Это наиболее распространенное решение, рекомендованное для этой проблемы, но это не работает для меня. Исключение брошено до того, как блок .Then () когда -либо выполняется. < /P>
response = given()
// ...
.when()
.put(...)
.then()
.extract().response(); // The exception still occurs
< /code>
2- Использование .log (). All () для отладки: это подтверждает, что проблема возникает сразу после отправки запроса. Журнал запросов печатается успешно, но не напечатан журнал ответов, так как тест выносится до этого. < /P>
Request method: PUT
Request URI: http://localhost:8080/api/v1/enrollments/...
...
Headers: Accept=*/*
Content-Type=application/json
Body:
{ ... }

// NO RESPONSE LOG IS PRINTED HERE

io.restassured.internal.http.HttpResponseException: status code: 422
at io.restassured.internal.RequestSpecificationImpl.put(RequestSpecificationImpl.groovy:...)
...
< /code>
Использование блоков Try-Catch: я смог поймать httpresponseexception. Тем не менее, попытка восстановить полезный объект ответа из исключения, чтобы позволить jsonpath () работать в последующих этапах, что привело к нулевой точке зрения, поскольку реконструированный объект не имеет необходимой внутренней конфигурации (например, ObjectMapperConfig).
Проверка базовой конфигурации: моя базовая задача очень проста, содержащей только базовую URI и контент. Он не включает в себя какую -либо ожидаемое statuscode () или ответное разрешение, которое может мешать проверке ответа. < /P>
My pom.xml Dependencies:
rest-assured: 5.3.2
cucumber-java: 7.14.0
junit-jupiter-api: 5.10.0
< /code>
Мой основной вопрос:
Что такое окончательный, надежный способ предотвращения отказа от выброса httpresponseexexception в ответ 4xx /5xx, что позволяет коду перейти к блоку () для проверки? Почему стандарт .then (). Extract (). Решение ответа () не работает в этом конкретном случае, и какую альтернативную стратегию я должен использовать?

Подробнее здесь: https://stackoverflow.com/questions/797 ... instead-of

Вернуться в «JAVA»