我有一个junit测试,我想设置一个集群vert.x环境。如果我运行public static void main()
方法中的setUp
方法中的代码,但运行方法不是setUp
,则运行正常。
从不调用public void handle(AsyncResult<Vertx> res)
方法! 为什么?无法从我的JUnit测试中设置集群Vert.x环境
@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()
” 被写入beeing但不是 “SUCCESS
” 或 “FAILED
” 从手柄()方法。
为什么不在setUp方法中工作,而是从main()?
谢谢!我刚刚通过使用简单的等待/通知来解决它。任何优点和缺点呢? – Rox
由于vertx本身是基于异步操作的,而JUnit需要同步的方式来确定结果,所以如果你想要一个完整的集成测试,我不认为有更简单/更优雅的方法。但是,您可以考虑仅测试Verticle使用的业务逻辑,而不测试整个vertx堆栈(因为您可以期望vertx正常工作..) – gabowsky