【问题标题】:Getting Concurrent TimeoutException in JUNIT with vertx使用 vertx 在 JUNIT 中获取并发 TimeoutException
【发布时间】:2018-02-13 07:19:52
【问题描述】:

我正在尝试使用 VertxUnitRunner.class 运行 junit 测试用例。 我有 35 个测试用例,每次都会为不同的测试用例获取并发异常。我正在使用 jenkins 在 VM 机器上运行这些测试用例。

有人知道解决办法吗?

@RunWith(VertxUnitRunner.class)
public class KeyMgmtMainTest {

    private Environment env;

    private String host;

    private int port;


    @Before
    public void init(TestContext context) {

    ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "xyz-abc-servlet.xml" });
    vertx = Vertx.factory.vertx();

    vertx.deployVerticle(new ABC1Verticle(ctx), context.asyncAssertSuccess());
    vertx.deployVerticle(new ABC2VerticleTest(ctx), context.asyncAssertSuccess());
    vertx.deployVerticle(new ABC3ConsumerVerticleTest(ctx), context.asyncAssertSuccess());
    vertx.deployVerticle(new ABC4ConsumerVerticleTest(ctx), context.asyncAssertSuccess());
    env = ctx.getBean(Environment.class);
    port = Integer.parseInt(env.getProperty("http.server.port"));
    host = env.getProperty("cluster.host");

    }

    @Test
    public void testSaveDomain(TestContext context) {
    final Async async = context.async();
    final String token = "Bearer";
    Domain domain = new Domain();
    domain.setDomainName("XXX");
    domain.setTenantId("YYYY.com");
    domain.setCreatedBy("admin");
    domain.setUpdatedBy("admin");
    vertx.createHttpClient().post(port, host, "/my/url/domain").putHeader("Authorization", token)
        .setChunked(true).handler(response -> {
            response.bodyHandler(body -> {
            context.assertEquals(200, response.statusCode());
            JsonObject json = new JsonObject(body.toString());
            json = json.getJsonObject("domain");
            context.assertTrue(json.getLong("domainId") == 1);
            context.assertTrue(json.getString("domainName").equals("Lighting"));
            async.complete();
            });
        }).write(Json.encode(domain)).end();
    }

       @After
    public void tearDown(TestContext context) {
    vertx.close(context.asyncAssertSuccess());
  }

}

【问题讨论】:

  • 没有堆栈跟踪很难/不可能提供帮助。此外,一个显示问题的小示例,没有您的业务代码会更好。
  • 测试运行:31,失败:0,错误:3,跳过:0,经过时间:51.115 秒

标签: vert.x vertx-httpclient vertx-verticle vertxoptions


【解决方案1】:

我犯了一个愚蠢的错误。

我已将 @Before 替换为 @BeforeClass,其中部署了 verticles。 @Before 方法是为每个测试用例执行的,所以它在每次部署应该部署一次的地方部署 Verticle。

将@Before 更改为@BeforeClass 后,它工作正常。没有并发问题。

【讨论】:

    【解决方案2】:

    每个测试用例都应该以 end() 结尾

    public void testAbout(TestContext context) {
        final Async async = context.async();
            vertx.createHttpClient().get(port, host, "/about", response -> {
                response.handler(body -> {
                    context.assertEquals(200, response.statusCode());
                    context.assertTrue(body.toString().contains("Hello"));
                    async.complete();
                });
            }).end();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多