Vert.x:如何测试特定Verticle的已部署实例数量?
测试Vertx Verticle部署实例数量的方法
方案一:通过Vertx部署信息查询
Vertx提供了内置API可以获取部署的详细信息,你可以通过这些API直接验证目标Verticle的实例数:
@Test void testMyVerticleCount(Vertx vertx, VertxTestContext context) { vertx.deploymentIDs().forEach(deploymentId -> { DeploymentInfo deploymentInfo = vertx.getDeploymentInfo(deploymentId); // 匹配目标Verticle的全类名 if ("com.somepackage.MyVerticle".equals(deploymentInfo.getMain())) { // 断言实例数等于预期的2 assert deploymentInfo.getInstances() == 2; context.completeNow(); } }); }
方案二:通过Verticle内部计数器统计
给MyVerticle添加一个线程安全的静态计数器,在启动/停止方法中更新数值,测试时直接读取计数器值验证:
修改后的MyVerticle代码
package com.somepackage; import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; import java.util.concurrent.atomic.AtomicInteger; public class MyVerticle extends AbstractVerticle { // 线程安全的静态计数器,统计当前运行的实例数 public static final AtomicInteger RUNNING_INSTANCES = new AtomicInteger(0); @Override public void start(Promise<Void> startPromise) { RUNNING_INSTANCES.incrementAndGet(); System.out.println("starting Verticle"); startPromise.complete(); } @Override public void stop(Promise<Void> stopPromise) throws Exception { RUNNING_INSTANCES.decrementAndGet(); super.stop(stopPromise); } }
测试方法代码
@Test void testMyVerticleCount(Vertx vertx, VertxTestContext context) { // 断言当前运行的实例数为2 assert MyVerticle.RUNNING_INSTANCES.get() == 2; context.completeNow(); }
内容的提问来源于stack exchange,提问作者Lukas Weber
相关产品推荐
相关产品推荐

