我正在尝试使用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());
}
}
答案 0 :(得分:0)
我犯过的愚蠢错误。
我已经用@BeforeClass替换@Before,其中部署了verticls。 @Before方法是针对每个测试用例执行的,因此每次部署应该只进行一次就会部署Verticle。
将@Before更改为@BeforeClass之后,它运行正常。没有并发问题。
答案 1 :(得分:0)
每个测试用例都应以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();
}