Как написать тестовый пример Спока для обработки недопустимого ответа JSON в Spring?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как написать тестовый пример Спока для обработки недопустимого ответа JSON в Spring?

Сообщение Anonymous »

У меня есть класс, который обрабатывает HTTP-ответы и использует response.close() для закрытия потока ответов. Однако во время тестирования мутаций вызов response.close() удаляется, что приводит к появлению мутанта NO_COVERAGE.
Вот соответствующий метод в моем классе ClientError4XxResponseHandler:

Код: Выделить всё

@Component
@Qualifier("clientError4XxResponseHandler")
public class ClientError4XxResponseHandler implements ErrorResponseHandler {

private static final Logger LOG LoggerFactory.getLogger(ClientError4XxResponseHandler .class);
private static final String BAD_REQUEST_CODE = "BAD_REQUEST";
private static final String DEFAULT_ERROR_MESSAGE = "Error while processing the request.";

@Override
public void handle(ClientHttpResponse response) throws IOException {
var responseString = IOUtils.toString(response.getBody());

try {
var mapper = new ObjectMapper();
var errorResponse = mapper.readValue(responseString, Response.class);

LOG.error("Business Error Response received with status code () and response {}", response.getStatusCode(), responseString);

throw ExceptionBuilder.buildBusinessException()
.setErrors(errorResponse.getErrors())
.setErrorCode(DEFAULT_CLIENT_ERROR_CODE)
.setHttpStatusCode(ResponseHttpStatus.valueOf(response.getStatusCode().value()))
.build();
}
catch (JsonProcessingException ex) {
LOG.error("Error while parsing the API error Response: {} {}", responseString, ex);

throw ExceptionBuilder.buildBusinessException()
.addMessage(Message.create(BAD_REQUEST_CODE, DEFAULT_ERROR_MESSAGE, responseString))
.setHttpStatusCode(ResponseHttpStatus.valueOf(response.getStatusCode().value()))
.setErrorCode(DEFAULT_CLIENT_ERROR_CODE)
.build();
}
finally {
response.close();  // This is the line that is removed in the mutant
}
}
}
Во время мутационного тестирования мутант удаляет строку response.close(), и я пытаюсь написать тестовый пример, чтобы убить этого мутанта. Моя цель — написать тестовый пример, который гарантирует вызов метода response.close(), даже если мутант удалит его.
Тестовый пример Спока:

Код: Выделить всё

def "test if response.close() is called"() {
given: "A mock response with necessary parameters"
def response = Mock(ClientHttpResponse)
def handler = new ClientError4XxResponseHandler()

// Mocking the behavior of the response
response.getStatusCode() >> HttpStatus.BAD_REQUEST
response.getBody() >> new ByteArrayInputStream('{"error": "Bad request"}'.getBytes())

when: "Handle the error response"
handler.handle(response)

then: "Verify that close() was called"
1 * response.close() // Verifying if close() was invoked exactly once
}
В настоящее время тестовый пример завершается с ошибкой API Error. Есть ли проблема с тем, как я отправляю ответ JSON?
Я хочу убедиться, что был вызван метод response.close(), чтобы я мог убить мутанта, который удаляет вызов response.close().

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-spring
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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