Проблема в том, что gameClient.runGame()
, по-видимому, блокирует ваш тест, либо бесконечно, либо запрашивая пользовательский ввод. Если у вас есть какие-либо тесты, запускающие загрузочное приложение Spring, ваш тест (и ваша сборка) также будут блокироваться.
Даже если вы можете передать параметр -Dmaven.test.skip=true
, чтобы пропустить тесты (как упоминалось в в этом ответе ), это все равно означает, что этот конкретный тест не пройден. Либо удалите его, если он вам не нужен, либо убедитесь, что gameClient.runGame()
не вызывается во время теста, выполнив следующие действия:
Переместите вашу логику в отдельный класс, который реализует интерфейс CommandLineRunner
(или ApplicationRunner
):
@Component
public class GameRunner implements CommandLineRunner {
@Autowired
GameClient gameClient;
@Override
public void run(String...args) throws Exception {
gameClient.runGame();
}
}
После этого аннотируйте компонент с помощью аннотации @Profile
, например:
@Component
@Profile("!test") // Add this
public class GameRunner implements CommandLineRunner {
@Autowired
GameClient gameClient;
@Override
public void run(String...args) throws Exception {
gameClient.runGame();
}
}
Используя аннотацию @Profile
, вы можете указать Spring загружать компонент только тогда, когда активны определенные профили. Используя восклицательный знак !
, мы говорим Spring загружать компонент только в том случае, если тестовый профиль не активен.
Теперь в вашем тесте вы можете добавить аннотацию @ActiveProfiles("test")
. Это активирует тестовый профиль при запуске теста, и это означает, что bean-компонент GameRunner
не будет создан.