Robolectric 3.0 (ToT)을 사용하고 있습니다. 내가 전화 다음 만든다 onCreate
내 활동에robolectric : Handler.postDelayed가 즉시 실행됩니다.
:
mHandler.postDelayed(mRunnable, 10 * 60 * 1000)
그럼 내 Robolectric 테스트 케이스 I 설정에서 활동하고 실행 가능한 즉시 시작된다 (그리고 공교롭게도,이 finish()
를 호출). 어떻게 이런 일이 일어나지 않도록 할 수 있습니까?
나는 Runnable
의 해고를 막는 ShadowLooper.pauseMainLooper();
을 사용했으나 좋은 해결책은 아닙니다. 테스트에서 방송을 보내고 있으며 주 루퍼가 일시 중지되었을 때 수신되지 않습니다. 일시 중지를 취소하면 인 텐트가 브로드 캐스트 리시버로 전달되고 Runnable
이 실행됩니다. 브로드 캐스트 리시버를 실행하려면 어떻게해야합니까? 은Runnable
이 아닙니다.
동일한 문제를 'robolectric 2.4'로 재현 할 수있었습니다. 나는 Robolectric 이슈 트래커에 대한 티켓을 만들 것입니다 (당신이 이미 그것을 본 것을 봅니다). 그리고 문제에 대한 이해를 얻습니다. 예상대로 일 수 있습니다. 임시 해결책으로 델라 이벤트를 스케쥴하고 테스트에서 모의 클래스를 작성하고 프록시 클래스를 작성했습니다. 테스트를 통과하기위한 추가 기능을 작성하는 것은 좋지 않지만 작동해야합니다. –
나는 티켓을 신청했습니다 : https://github.com/robolectric/robolectric/issues/1509 – gruszczy
이 문제는 Android의 자체 스케줄러에있는 것으로 보입니다. 나는 Handler.postDelayed (foo, 1000)가 적어도 안드로이드 4.2에서 약 200ms 후에 발생한다는 것을 발견했다. – fluffy