В конечном итоге я пытаюсь выполнить тестирование тестового адаптера базы данных, но я застрял в одном месте: я не могу понять, как заставить поток пользовательского интерфейса обрабатывать сообщение, которое я только что передал ему, через sendEmptyMessage(...)
,Обработчик единиц измерения
В моей деятельности у меня есть «addFoo(Foo foo)
» метод, который обновляет массив, а затем называет «sendEmptyMessage(1)
», и у меня есть handleMessage
метод, который вызывает адаптер в ListView, чтобы сказать ему, данные изменились.
Я вареный тест блока вниз, грубо:
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 или его обработчику или петлителю, чтобы заставить его обрабатывать все ожидающие сообщения сообщения? Я пробовал некоторые предложения, которые я читал о вызове Looper.loop(), в потоке пользовательского интерфейса, но это теги в темноте, и они потерпели неудачу.
FWIW, я уверен, что код handleMessage правильно, потому что если я буду называть его непосредственно (внутри @UiThreadTest
) как так:
@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());
}
тест заканчивает работать, как ожидалось.
можете ли вы разместить свой код, который устанавливает обработчик? – techiServices
@sugarynygs: обработчик настроен с помощью «mHandler = new Handler();» внутри действия, объявленного как «public class FooActivity extends Activity, реализует Handler.Callback». mHandler предоставляется JUnit через «public Handler getHandler() {return mHandler;}» –
Я правильно говорю, что вы явно создаете новый «Обработчик», а также реализуете «Handler.Callback»? – techiServices