С учетом следующего модульного теста, в котором используется Vertx Unit инфраструктура тестирования:
@RunWith(VertxUnitRunner.class)
public class VertxUnitTest {
private Vertx vertx;
@Rule
public RunTestOnContext rule = new RunTestOnContext(new VertxOptions().setClustered(false)
.setClusterManager(new HazelcastClusterManager()).setMaxEventLoopExecuteTime(2000000000000L)
.setMaxWorkerExecuteTime(60000000000000L).setBlockedThreadCheckInterval(1000000)
.setEventBusOptions(new EventBusOptions().setClustered(false).setIdleTimeout(0)));
@Before
public void setup() throws Exception {
io.vertx.core.Vertx v = rule.vertx();
vertx = Vertx.newInstance(v);
}
private class MyVerticle extends AbstractVerticle {}
@Test
public void runFlow_correctMessage_stepsCalledInCorrectOrder(TestContext context) {
Async async = context.async();
vertx.getDelegate().deployVerticle(new MyVerticle(), new DeploymentOptions().setWorker(true), c -> {
c.cause();
vertx.eventBus().<Object>send("", new JsonObject(), new DeliveryOptions(), rpl -> {
async.complete();
fail();
});
});
}
}
вызов fail()
вызывает исключение для консоли, но на самом деле это не сбой самого теста, который успешно завершается и имеет зеленый цвет.
То же самое верно при работе с Mockito . Я могу успешно проверить поведение вертикали и ее зависимостей, используя макеты, но даже если утверждения Мокито не пройдены, сам тест все равно будет пройден. Ошибка вызова объекта vertx TestContext - context.fail()
- также не провалит тест.
Основная проблема заключается в следующем: любой вызов fail()
после async.complete()
не провалит тест, только консоль покажет ошибку. Но без вызова async.complete()
код в статье (который вызывается при использовании из шины событий) не будет работать до вызова тестовых утверждений.
Без вызова async.complete()
тест будет казаться никогда не завершенным.
Какой правильный подход к этому?
Спасибо