Пытаюсь сделать тест, имитация работы 2х пользователей над док-м. Использую библиотеки RestAssured и JerseyTest. Делаю задание на выполнение запроса к API сервиса, помещаю задание в потоки, но при прохождении теста в Thread запрос почему то не выполняется, если выполнять без потоков, то все ок. Думал проблема в библиотеках, подключил Jersey, но не помогло. Может кто сталкивался с такой проблемой ?
@Test
@DisplayName( "test" )
void changeState() {
try {
Runnable task = () -> {
logger.debug( "start" );
Response response = RestAssured.get( "https://api.github.com/users/eugenp" );
logger.debug( "stop" );
};
Executor executor = ( runnable) -> {
new Thread(runnable).start();
};
executor.execute(task);
executor.execute(task);
} catch( SQLException e ) {
Assertions.fail(e);
}
}
Тут есть две проблемы:
changeState
) не ждет, когда завершатся дополнительные потокиПростой способ это исправить это воспользоваться встроенными в java средствами для запуска потоков, а именно ExecutorService
:
Callable<Boolean> task = () -> {
logger.debug( "start" );
Response response = RestAssured.get( "https://api.github.com/users/eugenp" );
logger.debug( "stop" );
return true;
};
ExecutorService executor = Executors.newFixedThreadPool(5);
Future<String> future1 = executor.submit(task);
Future<String> future2 = executor.submit(task);
// get дождется конца выполнения task
// Если случится исключение во время выполнения задачи, то get
// бросит ExecutionException
future1.get();
future2.get();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Подскажите, пожалуйста, как правильно написать взаимодействие между двумя контроллерами
Я столкнулся с тем, что не понимаю, как обычно реализуется фронт для Java-приложенияУ меня есть несколько предположений о том, как это может...