Как дождаться выполнение асинхронного метода?

Как мне дождаться выполнение асинхронного метода? Есть такой метод 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 не подойдет


Ответы (1 шт):

Автор решения: NearPin

Нашел решение, достаточно просто использовать 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();
    }
}
→ Ссылка