Как проверить правильное количество ответов при тестировании с помощью MockServer?JAVA

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

Сообщение Anonymous »

Я создаю модульные тесты для службы Java, которой необходимо отправлять HTTP-запросы к внешней веб-службе. Я решил использовать MockServer (https://www.mock-server.com/#what-is-mockserver), чтобы имитировать внешние HTTP-вызовы, но пока не могу заставить его работать. Я создал фиктивный метод тестирования, чтобы поэкспериментировать с использованием MockServer. Он настраивает и запускает сервер, добавляет некоторые ожидания, выполняет простой запрос GET, а затем проверяет, было ли сделано правильное количество запросов и что ответ содержит правильную информацию. Проблема в том, что как только мой тест вызывает MockServerClient.verify(), выдается следующее исключение:
org.mockserver.client.SocketConnectionException: Channel handler removed before valid response has been received
at org.mockserver.client.HttpClientConnectionErrorHandler.handlerRemoved(HttpClientConnectionErrorHandler.java:20)
at io.netty.channel.AbstractChannelHandlerContext.callHandlerRemoved(AbstractChannelHandlerContext.java:946)
at io.netty.channel.DefaultChannelPipeline.callHandlerRemoved0(DefaultChannelPipeline.java:637)
at io.netty.channel.DefaultChannelPipeline.destroyDown(DefaultChannelPipeline.java:876)
at io.netty.channel.DefaultChannelPipeline.destroyUp(DefaultChannelPipeline.java:844)
at io.netty.channel.DefaultChannelPipeline.destroy(DefaultChannelPipeline.java:836)
at io.netty.channel.DefaultChannelPipeline.access$700(DefaultChannelPipeline.java:46)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelUnregistered(DefaultChannelPipeline.java:1392)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelUnregistered(AbstractChannelHandlerContext.java:198)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelUnregistered(AbstractChannelHandlerContext.java:184)
at io.netty.channel.DefaultChannelPipeline.fireChannelUnregistered(DefaultChannelPipeline.java:821)
at io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:827)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:497)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at java.lang.Thread.run(Thread.java:745)

Последние несколько дней я провел в поисках примеров и даже копаясь в исходном коде, чтобы попытаться понять, что я делаю неправильно. На данный момент у меня заканчиваются идеи. Если бы кто-нибудь мог взглянуть и увидеть, где я ошибаюсь, или хотя бы указать мне правильное направление, я был бы признателен.
Вот код для моего модульного теста:< /p>
@Test
public void getShouldWork() throws URISyntaxException, IOException {

ConfigurationProperties.maxSocketTimeout(200000);

final String responseBody = "some_response_body";
final String respHdrName = "some_header";
final String respHdrVal = "some value";

MockServerClient mockServer = ClientAndServer.startClientAndServer(1080);
HttpRequest request = HttpRequest.request()
.withMethod("GET")
.withPath("/some/url")
.withQueryStringParameter("id", "9");
mockServer.when(
request,
Times.exactly(1)
)
.respond(
HttpResponse.response()
.withBody(responseBody)
.withHeader(respHdrName, respHdrVal)
);

//The test will throw an exception when executing this line
mockServer.verify(request, VerificationTimes.exactly(1));

CloseableHttpClient httpClient = HttpClientBuilder.create()
.build();

HttpGet getRequest = new HttpGet("http://localhost:" + mockServer.getPort()
+ "/some/url?id=9");
CloseableHttpResponse resp = httpClient.execute(getRequest);

try (InputStreamReader isr = new InputStreamReader(resp.getEntity().getContent());
BufferedReader br = new BufferedReader(isr);) {
assertThat(br.readLine(), is(responseBody));
while (br.readLine() != null) {
// consume content...
}
}
assertThat(resp.getFirstHeader(respHdrName), is(notNullValue()));
assertThat(resp.getFirstHeader(respHdrName).getValue(), is(respHdrVal));
}


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Mockserver вызывает конфликт зависимостей в тесте Springbok
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Mockserver вызывает конфликт зависимостей в тесте Springboot
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Mockserver не может подключиться ни к одному порту
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Mockserver не может прочитать запрос: неизвестный формат сообщения
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Okhhtp3 Mockserver java.lang.noclassdeffounderror: okhttp3/internal/concurrent/taskrunner $ realbackend
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

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