vertx.createHttpClient()。getNow()不调用处理程序

时间:2018-04-18 12:18:48

标签: java testing handler vert.x

我有以下测试方法:

private Vertx vertx;

@Before
public void setUp(TestContext context) throws IOException {
    vertx = Vertx.vertx();
    vertx.deployVerticle(MainVerticle.class.getName(), context.asyncAssertSuccess());
}

@After
public void tearDown(TestContext context) {
    vertx.close(context.asyncAssertSuccess());
}

@Test
public void serverIsStarted(TestContext context) {
    vertx.createHttpClient().getNow(8080, "localhost", "/inexistent", response -> {
        System.out.println("Handler running");
        Assert.assertEquals(response.statusCode(), 200);
        context.assertEquals(response.statusCode(), 200);
    });
    System.out.println("Done");
}

取自this sample repo。但是,它并没有真正做任何事情。路径inexistent不存在,即使我删除了在setUp中启动服务器的代码,测试仍然通过。文本" Handler运行"没有打印,只有"完成"。

我错过了什么,为什么它没有做任何事情?

1 个答案:

答案 0 :(得分:1)

请记住,请求是异步处理的。您遇到的是在异步回调之前运行完成的测试,并且可以处理结果。

根据docs,您应该做的是创建一个Async实例,向测试运行器发出信号,以便在complete()调用Async之前保持测试运行实例,像这样:

@Test
public void serverIsStarted(TestContext context) {
    final Async async = context.async(); // <-- create the Async instance

    vertx.createHttpClient().getNow(8080, "localhost", "/inexistent", response -> {
        context.assertEquals(200, response.statusCode());

        async.complete();  // <-- signal this test can now terminate
    });
}

另外,fyi - 你的参数向后assertEquals()

  • 第一个参数是预期值
  • 第二个参数是实际值
希望有所帮助!