Как мне дождаться выполнение асинхронного метода?
Есть такой метод Server.getData(DataListener listener);
Данные загружаются в отдельном потоке, и по завершению передаются в DataListener. И все вроде бы хорошо, но я решил написать тесты к этому коду. Код JUnit Теста
@Test
public void getDataTest(){
Server.getData(new DataListener(){
@Override
onSuccess(String data){
assertNotEquals(data,"");
}
});
}
Тест будет пройден, не дожидаясь ответа от сервера и выполнение метода onSuccess(), как мне заблокировать метод Server.getData(), чтобы дождаться выполния onSuccess? Решение с execute() в Retrofit не подойдет
Нашел решение, достаточно просто использовать CountDownLatch
@Test
public void getDataTest(){
CountDownLatch latch = new CountDownLatch(1);
Server.getData(new DataListener(){
@Override
onSuccess(String data){
assertNotEquals(data,"");
latch.countDown();
}
});
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей