Версии, которые я использую-
скомпилируйте 'org.robolectric: robolectric: 2.4'
Версия Android 2.3.3
Контрольный пример из тестового файла.
@Test
public void onStartTest() throws Exception{
IMMMDialogPopup immmDialogPopup = mock(IMMMDialogPopup.class);
objMIPDialogActivity.setDialogPopup(immmDialogPopup);
ComponentName expectedComponentName = new ComponentName(objMMMDialogActivity.getPackageName(),MIPService.class.getName());
Binder expectedBinder = new Binder();
ShadowApplication shadowApplication = Robolectric.getShadowApplication();
shadowApplication.setComponentNameAndServiceForBindService(expectedComponentName,expectedBinder);
objMMMDialogActivity.onStart();
}
Фактическая реализация для проверки.
mConnection является объектом ServiceConnection.Call bindService (), затем он переходит к onServiceConnected () из ServiceConnection.
@Override
protected void onStart() {
super.onStart();
bindService(new Intent(this, MIPService.class), mConnection, Context.BIND_AUTO_CREATE);
}
Вызовите метод ServiceConnection onServiceConnected (), из которого он генерирует исключение при приведении Binder к локальному binder.
Это дает исключение в строке "MIPService.LocalBinder binder = (MIPService.LocalBinder) service;"
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
if(dialogPopup != null) {
MIPService.LocalBinder binder = (MIPService.LocalBinder) service;
mipService = binder.getService();
mipService.registerListener(MMMDialogActivity.this);
showPopup(MMMDialogActivity.this.dialogPopup.getDialog(), false, centerInParent);
mBound = true;
}
}
Исключение -
It jumps to Scheduler.class and throws exception and hit in this.isExecutingRunnable = false;
private void runOrQueueRunnable(Runnable runnable, long scheduledTime) {
if(this.isExecutingRunnable) {
this.queueRunnableAndSort(runnable, scheduledTime);
} else {
this.isExecutingRunnable = true;
try {
runnable.run();
} finally {
this.isExecutingRunnable = false;
}
}