궁극적으로 사용자 정의 기본 어댑터를 단위 테스트하려고하는데 한 순간에 멈추었습니다. 방금 전달한 메시지를 처리하기 위해 UI 스레드를 얻는 방법을 파악할 수 없습니다. sendEmptyMessage(...)
. 내 활동에단위 테스트 처리기
나는 배열을 업데이트하는 "addFoo(Foo foo)
"방법을 가지고 다음 "sendEmptyMessage(1)
"을 호출하고, 나는 데이터가 변경을 말할의 ListView의 어댑터를 호출하는 handleMessage
방법이있다.
나는 약, 단위 테스트 아래에 삶은했습니다
public void testAddFoo() {
Foo foo = new Foo();
assertTrue(mActivity.addFoo(foo));
assertTrue(mActivity.getHandler().hasMessages(1));
assertFalse(mActivity.getHandler().hasMessages(1));
assertTrue(mActivity.fooListNotEmpty());
}
는 당연히이에 실패하는 assertFalse()
(이 최선 내가 할 수있는 그것을 단순화, 인위적인 예입니다).
모든 보류중인 메시지를 처리하기 위해 mActivity 또는 처리기 또는 루퍼를 호출하려면 어떻게해야합니까? UI 스레드 내에서 Looper.loop()을 호출하는 것에 대해 읽은 몇 가지 제안을 시도했지만 어둠 속에서 찌르다가 실패했습니다.
@UiThreadTest
public void testAddFoo() {
Foo foo = new Foo();
assertTrue(mActivity.addFoo(foo));
Message msg = Message.obtain();
msg.what = 1;
mActivity.handleMessage(msg);
assertTrue(mActivity.fooListNotEmpty());
}
테스트가 예상대로 작동 끝 :
FWIW, 나는 내가 지금처럼 (@UiThreadTest
내부에) 직접 호출하는 경우 때문에 handleMessage 코드가 올바른지 확신합니다.
처리기를 설정하는 코드를 게시 할 수 있습니까? – techiServices
@sugarynygs : 핸들러는 "mHandler = new Handler();"로 설정됩니다. "공용 클래스 FooActivity extends Activity extends Handler.Callback"으로 선언 된 활동 내부. mHandler는 "public Handler getHandler() {return mHandler;}" –
"을 통해 JUnit에서 사용할 수있게되었습니다. 여러분이 명시 적으로 새로운 Handler와 Handler.Callback을 구현하고 있다는 점에서 맞습니까? – techiServices