Я смог заставить это работать, используя процедуру, приведенную ниже. Любой желающий может перезвонить, если это неверно, но приведенный выше пример работает (т.е. обработчик MyBindServer получает сообщения)
Кажется, что метод bindService () ServiceTestCase намеревается действовать как локальный сервис. В этом случае цель состоит в том, чтобы протестировать как отдельный процесс, что означает использование следующего вместо bindService ServiceTestCase:
Intent bindIntent = new Intent(<registered intent>); //Where registered intent is declared in the manifest file
getContext().bindService(bindIntent,mConn,Context.BIND_AUTO_CREATE);
, где mConn - это объект ServiceConnection, реализованный для выполнения того, что требуется вашему тесту, в вышеописанном случае установите mServer.
С учетом вышеизложенного метод handleMessage () MyBindServer вызывается для теста testAHello ().
ОБНОВЛЕНИЕ: я заметил, что в зависимости от того, насколько быстро выполняется тестовая обработка, teardown () может быть вызван до того, как привязка будет готова к использованию. В приведенном выше случае добавление управляющих переменных для регулирования потока программы на основе вызова onServiceConnected в mConn обеспечивает согласованные результаты.
1012 * Е.Г. *
protected boolean bound = false;
protected boolean processed = false;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder service) {
Log.i(TAG,"Service conn");
mServer = new Messenger(service);
if(mServer != null
&& mServer != null){
bound = true;
}
processed = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
Log.i(TAG,"Service Disconn");
}
};
Затем добавьте:
while(!processed){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
для проверкиAHello ()