У меня есть тест junit, где я хотел бы создать кластерную среду vert.x. Он отлично работает, если я запускаю код в методе setUp
из метода public static void main()
, но не если он запущен из метода setUp
.
Метод public void handle(AsyncResult<Vertx> res)
никогда не вызывается! Почему?Не удается настроить кластеризованную среду Vert.x из моего теста JUnit
@RunWith(VertxUnitRunner.class)
public class TestMyStuff {
private Vertx vertx;
@Before
public void setUp(TestContext context) throws IOException {
ClusterManager mgr = new HazelcastClusterManager();
VertxOptions options = new VertxOptions().setClusterManager(mgr);
Vertx.clusteredVertx(options, new Handler<AsyncResult<Vertx>>() {
@Override
public void handle(AsyncResult<Vertx> res) {
if(res.succeeded()) {
vertx = res.result();
DeploymentOptions options = new DeploymentOptions()
.setConfig(new JsonObject().put("http.port", 8080)
);
vertx.deployVerticle(MyWebService.class.getName(), options, context.asyncAssertSuccess());
System.out.println("SUCCESS");
} else {
System.out.println("FAILED");
}
}
});
}
@Test
public void printSomething(TestContext context) {
System.out.println("Print from method printSomething()");
}
"Print from method printSomething()
" является неоспоримым написана, но не "SUCCESS
" или "FAILED
" от метода ручки().
Почему он не работает в методе setUp, но из main()?
Спасибо! Я просто решил это, используя простой wait/notify. Любые плюсы и минусы с этим? – Rox
Поскольку сам vertx основан на асинхронной работе, и JUnit требует синхронного способа определения результатов, если вы хотите получить полный интеграционный тест, я не думаю, что есть более простой/элегантный способ. Тем не менее, вы можете рассмотреть возможность проверки только бизнес-логики, используемой вашими вершинами, а не всего стека vertx (так как вы можете ожидать, что vertx будет работать правильно). – gabowsky