При разработке веб-приложения модуль инструментов SpringBoot удобен для ускорения цикла компиляции и запуска. Однако я не смог найти подобную функцию для интеграционных тестов.
В частности, скажем, у меня есть интеграционный тест (помеченный @RunWith(SpringRunner.class)
и @SpringBootTest
), который запускает веб-сервер на случайном порте и тестирует некоторые из конечных точек REST. Я хотел бы иметь интерактивный тестовый прогон, который не будет убивать процесс, когда тестовый случай терпит неудачу. Вместо этого он будет ожидать изменений в коде и перезагрузит и повторно запустит тесты, если изменения будут обнаружены (как горячая замена в инструментах разработки)
Мои поиски этой функции не увенчались успехом, поэтому я хотел бы знать, каков будет самый быстрый способ реализации этой функции. Учитывая популярность Springs, есть ли причина, по которой не существует широко известного способа сделать это?
EDIT
Немного покопавшись в исходном коде, я нашел следующий фрагмент кода.
/**
* Default {@link RestartInitializer} that only enable initial restart when running a
* standard "main" method. Skips initialization when running "fat" jars (included
* exploded) or when running from a test.
*
* @author Phillip Webb
* @author Andy Wilkinson
* @since 1.3.0
*/
public class DefaultRestartInitializer implements RestartInitializer {
private static final Set<String> SKIPPED_STACK_ELEMENTS;
static {
Set<String> skipped = new LinkedHashSet<>();
skipped.add("org.junit.runners.");
skipped.add("org.junit.platform.");
skipped.add("org.springframework.boot.test.");
skipped.add("cucumber.runtime.");
SKIPPED_STACK_ELEMENTS = Collections.unmodifiableSet(skipped);
}
...
Отсюда я понимаю, что автор явно отключил поддержку тестирования. Кто-нибудь может объяснить это?