为什么测试endlessTest
没有结束?
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 endlessTest(TestContext context) throws InterruptedException {
final boolean[] done = {false};
vertx.createHttpClient().getNow(8080, "localhost", "/ping", response -> {
context.assertTrue(false);
done[0] = true;
});
while (!done[0]) {
Thread.sleep(100);
}
}
它会向控制台吐出SEVERE: java.lang.AssertionError: Expected true
,但它一直在运行,直到我手动终止它。为什么不传播异常?
如果我使用Async与complete()
等待,它会按预期工作:
@Test
public void endlessTest(TestContext context) {
Async async = context.async();
vertx.createHttpClient().getNow(8080, "localhost", "/ping", response -> {
context.assertTrue(false);
async.complete();
});
}
测试以java.lang.AssertionError: Expected true
失败。
答案 0 :(得分:0)
您正在事件循环上运行并且您的Thread.sleep()
呼叫正在阻止它,因此它无法处理其中的任何其他事件,例如接收对您的http呼叫的响应。
创建Asnyc
并在响应中完成它绝对是正确的方法。