我有以下测试方法:
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运行"没有打印,只有"完成"。
我错过了什么,为什么它没有做任何事情?
答案 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()
: