我有一個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