Я написал инструментальный тест Android, который вызывает мою службу и получает ответ через широковещательную рассылку.
Тестируемый код, который обращается к службе, использует обработчик.
В процессе тестирования моего теста ^^ я заметил, что обработчики ведут себя не так, как ожидалось. Итак, я написал тест, чтобы проверить это поведение:
import android.os.Handler;
import android.support.test.annotation.UiThreadTest;
import org.junit.Assert;
import org.junit.Test;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@RunWith(AndroidJUnit4.class)
public class HandlerTest {
private CountDownLatch countDownLatch;
@Test
@UiThreadTest
public void handlerTest() {
final Handler handler = new Handler();
countDownLatch = new CountDownLatch(1);
final Runnable r = new Runnable() {
@Override
public void run() {
// this code gets not executed
countDownLatch.countDown();
}
};
handler.postDelayed(r, 1000);
try {
final boolean finishedWithoutTimeout
= countDownLatch.await(5, TimeUnit.SECONDS);
Assert.assertTrue(finishedWithoutTimeout);
} catch (final InterruptedException e) {
e.printStackTrace();
}
}
}
Обработчик не выполняет исполняемый код. Это также проблема с моим производственным кодом.
У меня возникла проблема с Looper.prepare()
, которую я исправил с помощью аннотации @UiThreadTest
.
Есть ли какие-либо предложения относительно моей проблемы с обработчиком?