Есть ли возможность потерпеть неудачу на ранних этапах тестирования, когда нет активности? - PullRequest
3 голосов
/ 16 января 2020

Простой интеграционный тест с Vert.x и JUnit5 может выглядеть следующим образом:

@Test
@Timeout(value = 10, timeUnit = TimeUnit.SECONDS)
void some_test(Vertx vertx, VertxTestContext testContext) {
  // do nothing in this example.
}

Этот простой тест будет ждать 10 секунд, а затем не удается из-за тайм-аута. Я хочу знать, есть ли возможность провалить эти тесты рано, не дожидаясь истечения времени ожидания. Поскольку никакой активности нет, Vert.x может сделать вывод, что тест никогда не будет завершен, если он еще не завершен. С без активности я имею в виду, что нет ни запущенных задач, ни таймеров. Только внешние операции могут вызывать дальнейшие действия, но я думаю, что многие тесты не имеют таких внешних триггеров.

Я хотел бы знать, если Vert.x предоставляет возможность сказать «Внешних триггеров нет. Просто остановитесь, когда нечего делать».

1 Ответ

2 голосов
/ 21 января 2020

Vert.x реагирует, что означает, что ваша реализация реагирует на события, которые другие субъекты посылают по шине событий.

Обычно единственное, что вы можете сделать, это прослушивать шину событий. Ваша реализация не может решить, является ли отсутствие внешних событий какой-то ошибкой. Если другим актерам нечего сказать, это может быть ошибочным условием.

Чтобы решить, нет ли внешних триггеров, и досрочно провалить тест, если ничего не осталось сделать, это можно сделать, только получив представление о внутреннем состоянии всех других действующих лиц.

Один Можно утверждать, что это не является задачей юнит-теста, так как другие участники могут считаться не являющимися частью вашего юнита.

Предложение для решения

Все другие ваши актеры (то есть стихи) могут в какой-то момент выдать событие, уведомляющее вашу тестовую реализацию о том, что они закончили свою работу и им нечего делать.

Ваш тест может подсчитать эти Закончено событий и действуйте соответственно, вызывая testContext.completeNow();, как только он получит все законченные события.

Насколько я знаю, в верте нет ни опции, ни инструмента .x-toolkit или junit, чтобы сделать эту работу за вас. Вы должны реализовать это сами.

...