Rx.io和junit测试
在我的业余时间,我喜欢Rx.io和junit测试,junit,rx-java2,vert.x,Junit,Rx Java2,Vert.x,在我的业余时间,我喜欢vertx.io。刚才我正在从普通的vertx切换到rxjava2版本(vertx-rx-java2,3.5.1)api版本,我的VertxUnitRunner测试不再完成: @Test public void computeSomethingByNullPlan(TestContext ctx) { query = null; Async async = ctx.async(); vertx.eventBus().send(HANDLER_ADDRESS, quer
vertx.io
。刚才我正在从普通的vertx切换到rxjava2版本(vertx-rx-java2
,3.5.1
)api版本,我的VertxUnitRunner
测试不再完成:
@Test
public void computeSomethingByNullPlan(TestContext ctx) {
query = null;
Async async = ctx.async();
vertx.eventBus().send(HANDLER_ADDRESS, query,
new DeliveryOptions().addHeader("action", ACTION), msg -> {
if (msg.failed())
log.error(msg.cause());
ctx.assertTrue(msg.succeeded());
ctx.assertTrue(new
JsonArray(msg.result().body().toString()).isEmpty());
async.complete();
});
}
测试运行正常,但只有一次async.complete()代码>指令命中测试不返回,但挂起。可能是因为我把io.vertx.reactivex.core
和io.vertx.core
混合在一起(例如:io.vertx.reactivex.core.vertx
和io.vertx.core.TestContex
),或者我没有使用正确的VertxUnitRunner
。
我做错了什么?我搜索了一段时间但没有成功,是否有关于vertx.io rxjava2和测试的示例/文档?我能够重现测试“挂起”的问题,当此位:
JsonArray(msg.result().body().toString())
…无法将响应正文反序列化为JSON数组。要验证这一点,请注释掉整个断言,并查看测试是否在之后完成。如果是这样的话,那应该缩小这一特定问题的范围
值得注意的是,由于您使用的是Rx版本的API,因此可以使用标准Rx类型(而不是处理程序
)表示异步源。沿着这些行重写的测试(减去JsonArray
内容)可能如下所示:
import io.vertx.ext.unit.Async;
import io.vertx.ext.unit.TestContext;
import io.vertx.ext.unit.junit.VertxUnitRunner;
import io.vertx.reactivex.core.Vertx;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(VertxUnitRunner.class)
public class Blah {
private Vertx vertx;
@Before
public void setUp(TestContext context) {
vertx = Vertx.vertx();
vertx.eventBus().consumer("HANDLER_ADDRESS").handler(message -> {
message.reply("PONG!");
});
}
@Test
public void computeSomethingByNullPlan(TestContext context) {
final String query = "PING?";
final Async async = context.async();
vertx.eventBus().rxSend("HANDLER_ADDRESS", query)
.subscribe(
message -> {
context.assertEquals("PONG!", message.body().toString());
async.complete();
},
context::fail
);
}
}
我希望这有助于澄清问题