当前位置: 首页 > 知识库问答 >
问题:

使用vertx在JUNIT中获取并发TimeoutException

司空坚
2023-03-14

我正在尝试使用VertxUnitRunner运行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());
  }

}

共有2个答案

岑鸣
2023-03-14

每个测试用例都应该以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();
}
璩涛
2023-03-14

我犯了愚蠢的错误。

我已经用部署verticls的@BeforeClass替换了@之前。@在为每个测试用例执行方法之前,所以它每次都在部署Verticle应该部署一次。

将“课前”改为“课前”,效果良好。无并发问题。

 类似资料:
  • 问题内容: 我已经在JUnit中将PowerMock和PowerRule与Mockito集成在一起。 这是我的依赖项: 我的测试课是: 正在调用我需要模拟的静态方法。当我运行测试用例时,我得到。 全栈跟踪: java.lang.RuntimeException:javassist.NotFoundException:org.powermock.core.classloader.MockClassL

  • 我的测试类是: 调用了一个我需要模拟的静态方法。当我运行测试用例时,我得到。 全堆栈跟踪: 我甚至尝试过javassist Version15,但也有同样的问题。

  • 问题内容: 您对我的问题有什么建议吗?我需要同时使用get和post。得到,因为我需要输出用户输入的内容。并发布,因为我需要访问与该输入相关的mysql数据库。看起来像这样: 这将根据用户将检查的内容输出mysql的内容: 这两个结合起来的形式动作将如下所示: 当我这样做时,我确实会收到很多未定义的错误。您可以建议我做些什么,以获取用户输入的值以及mysql数据。 问题答案: 执行HTTP Req

  • 这是我的建筑。格雷德尔 因此,restTemplate抛出NullPointerException而不是返回模拟obj。

  • 我不熟悉使用vertx,我正在使用vertx文件系统api来读取大文件。 但是RAM在读取时被消耗殆尽,资源在使用后甚至没有被刷新。vertx文件系统api还建议不要使用此方法读取非常大的文件,否则可能会耗尽可用的RAM。 除此之外还有其他选择吗?

  • 我正在使用1个servlet和1个jsp页面制作ajax servlet响应。它已经工作了,但我总是从我的“a href”的最后一个值中获得相同的参数,该值位于c: foreach循环中。 如您所见: 在我的javascript中: 因此,我试图将参数放入变量(ajaxparameter)中,但变量始终包含最新的“a href”参数(这是有意义的,因为c:foreach)。 但是,当我悬停在“a