тестирование vert.x с TestNg - PullRequest
1 голос
/ 18 февраля 2020

Я новичок в vert.x, я пытаюсь выполнить модульное тестирование, позвонив на мои веб-сервисы. Мне нужен пример тестирования веб-сервисов с testng.

, когда я сделал это с junit5, он отлично работает с приведенным ниже кодом

@BeforeMethod
private static void deploy_verticle(Vertx vertx , VertxTestContext testContext) {
    vertx.deployVerticle(new MainVerticle(), testContext.completing());
}


@Test
public void getTestFalse(Vertx vertx , VertxTestContext testContext) throws InterruptedException {
    Assert.assertTrue("3".contains("tesdfsdf"));

    req = new HttpRequestEntityTest();
    req.setHost("localhost");
    req.setPort(8089);
    req.setUri("/api/data");
    utilTest = new RestUtilTest();
    response = new HttpResponseEntityTest();
    utilTest.getTestUtil(req, testContext.succeeding(response -> {
        testContext.verify(() -> {
            Assert.assertTrue(response.getBodyStr().contains("tesdfsdf"));

        });
        testContext.completeNow();

    }));
}


@AfterMethod
public void finish(Vertx vertx , VertxTestContext testContext) {

context.getVertx().close(context.getTestContext().succeeding(response -> {
    context.getTestContext().completeNow();
}));
}

, но когда я пытаюсь работать с TestNg следующим образом:

@SuppressWarnings("deprecation")
    @Test
    public void getTestIqvia() throws InterruptedException {
        Future<HttpResponseEntityTest> future = Future.future();
        response = new HttpResponseEntityTest();
        req = new HttpRequestEntityTest();
        req.setHost("localhost");
        req.setPort(8089);
        req.setUri("/api/data");
        utilTest = new RestUtilTest();

        utilTest.getTestUtil(req, response -> {
            System.out.println(response.result().getBodyStr());

            System.out.println(response.result().getBodyStr().contains("dsds"));
            Assert.assertTrue(response.result().getBodyStr().contains("fdsfds"));

        });

Функция GetTestUtil :

public Future<HttpResponseEntityTest> getTestUtil(HttpRequestEntityTest req,
        Handler<AsyncResult<HttpResponseEntityTest>> resultHandler) {
    future = Future.future();

    WebClient client = WebClient.create(vertx);
    response = new HttpResponseEntityTest();
    client.get(req.getPort(), req.getHost(), req.getUri()).send(ar -> {
        if (ar.succeeded()) {

            response.setStatusCode(ar.result().statusCode());
            response.setBodyStr(ar.result().bodyAsString());
            future.complete(response);
            System.out.println("Received response with status code get" + response.getStatusCode());
            resultHandler.handle(Future.succeededFuture(response));

        } else {
            response.setErrorMsg(ar.cause().getMessage());
            System.out.println("Something went wrong " + ar.cause().getMessage());
            future.complete(response);

        }

    });

    return future;

} 

всегда отправляет веб-клиенту, не указанному в функции стрелки ar, и всегда проверяет успешность, поскольку он не go для функции Assert. кроме нескольких раз в режиме отладки только

может у любого есть пример в testNG с Vert.x ?? или что не так в моем коде?

1 Ответ

2 голосов
/ 18 февраля 2020

Это происходит потому, что getTestIqvia завершается до вызова обратного вызова WebClient.

С jUnit5 соответствующее расширение теста Vert.x гарантирует, что тест не будет помечен как пройденный, пока все асинхронные утверждения не будут выполнены. pass.

С TestNG вам нужно сделать это вручную. На практике вам нужно заставить тест ждать, пока будущее, возвращаемое getTestUtil, не будет завершено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...