我有一个 junit 测试,我想在其中设置集群 vert.x 环境。如果我运行 setUp
中的代码,它工作正常来自 public static void main()
的方法方法,但如果它是从 setUp
运行的则不是方法。
public void handle(AsyncResult<Vertx> res)
方法永远不会被调用!
为什么?
@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()
”正在写入,但不是来自 handle() 方法的“SUCCESS
”或“FAILED
”。
为什么它在 setUp 方法中不起作用,而是在 main() 中起作用?
最佳答案
VertX 确实有自己的功能来处理多线程和异步请求。
只需在您的测试函数中使用 Async 类:
@Test
public void printSomething(TestContext context) {
Async async = context.async();
System.out.println("Print from method printSomething()");
async.complete();
}
希望它对 future 的一些 body 有帮助。
关于java - 无法从我的 JUnit 测试中设置集群 Vert.x 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32435571/