Как проверить мой Vert.x Java API с помощью метода JSON post? - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь создать тестовые наборы / наборы для метода API, который ожидает объект JSON, который выглядит следующим образом {"arr": [5, 3, 1, 2]}

Но, похоже, то, как я это делаю, вызывает неправильное форматирование json.

Как создать действительный JSON для тестирования моего API?

Я пробовал пару вещей, но безуспешно. Мой JSON в настоящее время форматируется с дополнительными ", как это ""{'arr': [99, 2, 4, 1, 55, 0]}""

Это мой код.

@Test
public void sortWithSimpleArray(TestContext context) {
    Async async = context.async();

    // This isn't working
    final String json = Json.encodePrettily("{'arr': [99, 2, 4, 1, 55, 0]}");


    vertx.createHttpClient().post(port, "localhost", "/api/sort/bubble")
            .putHeader("content-type", "application/json")
            .putHeader("content-length", Integer.toString(json.length()))
            .handler(response -> {
                context.assertEquals(response.statusCode(), 201);
                context.assertTrue(response.headers().get("content-type").contains("application/json"));
                response.bodyHandler(body -> {
                    JsonArray sortedArr = body.toJsonArray();
                    context.assertEquals(sortedArr, "[ 0, 1, 2, 4, 55, 99 ]");
                    async.complete();
                });
            })
            .write(json)
            .end();
}

Получение этой ошибки:

SEVERE: Unexpected exception in route
io.vertx.core.json.DecodeException: Failed to decode:Cannot construct instance of `java.util.LinkedHashMap` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{'arr': [99, 2, 4, 1, 55, 0]')
 at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 1]
    at io.vertx.core.json.Json.decodeValue(Json.java:172)
    at io.vertx.core.json.JsonObject.fromBuffer(JsonObject.java:960)
    at io.vertx.core.json.JsonObject.<init>(JsonObject.java:73)
    at io.vertx.ext.web.impl.RoutingContextImpl.getBodyAsJson(RoutingContextImpl.java:263)
    at io.vertx.ext.web.impl.RoutingContextDecorator.getBodyAsJson(RoutingContextDecorator.java:123)
    at za.co.offerzen.SortVerticle.doBubbleSort(SortVerticle.java:80)
    at io.vertx.ext.web.impl.BlockingHandlerDecorator.lambda$handle$0(BlockingHandlerDecorator.java:48)
    at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:272)
    at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:748)
...