Предисловие
Я специально говорю о системных тестах. У нас есть довольно исчерпывающий набор юнит-тестов, некоторые из которых используют насмешки, и никуда не денутся. Предполагается, что системные тесты дополняют модульные тесты, и, таким образом, имитация не возможна.
Проблема
У меня довольно сложная система, которая взаимодействует только через события REST и события websocket. У моей команды довольно большая коллекция (исторически сложившихся) системных тестов на основе JUnit. В настоящее время я перевожу эту кодовую базу на JUnit5.
Тесты обычно состоят из @BeforeAll
, в котором система запускается с указанием конфигурации c, в класс тестирования, что занимает около минуты. Тогда есть ряд независимых тестов на этой системе.
Проблема, с которой мы обычно сталкиваемся, заключается в том, что загрузка системы занимает значительное количество времени и может даже дать сбой. Можно сказать, что сама загрузка может рассматриваться как контрольный пример. JUnit обрабатывает методы жизненного цикла довольно странно - время, которое они занимают, не указано в отчете; если они терпят неудачу, это портит количество тестов; это не описательно; et c.
В настоящее время я ищу обходной путь, но то, что моя команда сделала за последние несколько лет, отчасти ортогонально основной идее JUnit (потому что это среда модульного тестирования).
Эти проблемы исчезли бы go, если бы я заменил @BeforeAll
тестовым методом (назовем его @Test public void boot(){...}
) и ввел бы зависимость от порядка (что довольно просто с помощью JUnit 5), которая обеспечивает boot
до запуска любого другого теста.
Пока все хорошо! Это выглядит и прекрасно работает. Фактическая проблема начинается, когда тесты выполняются не сервером CI, а разработчиками, которые пытаются устранить неполадки. Когда я пытаюсь запустить один тест, boot
отфильтровывается от выполнения теста, и тест не проходит.
Есть ли какое-либо решение в JUnit5? Или я должен использовать совершенно другой подход?
Я подозреваю, что может быть решение при использовании @TestTemplate
, но я действительно не уверен, как действовать дальше. Также afaik, который позволил бы мне только генерировать новые именованные тесты, которые также будут отфильтрованы. Должен ли я написать собственный тестовый движок? Это не кажется убедительным.