android,如何单元测试BroadcastReceiver使用doAsync()



在android应用程序上,使用Broadcastreceiver来处理通知点击。

public class NotificationReceiver extends BroadcastReceiver {
public void onReceive(final Context context, final Intent intent) {

final PendingResult asyncResult = goAsync();
ExecutorService executor = Executors.newSingleThreadExecutor();
asycTask(executor, new Runnable() {
@Override
public void run() {
handleAction(context, intent);  //a length process
asyncResult.finish(); //<=== unit test throws exception, asyncResult is null
}
});   
}
@VisibleForTesting
void asycTask(ExecutorService executor, final Runnable task) {
try {
executor.execute(task);
} catch (Throwable ex) {}
}
}

单元测试中的

@Test
public void test_{

NotificationReceiver receiver = new NotificationReceiver();
final CountDownLatch latch = new CountDownLatch(1);
receiver.onReceive(application, intent);
latch.await(10, TimeUnit.SECONDS);
// verify
// ... ...
}

但是它抛出一个异常,因为asyncResult是空的。

如何测试当它使用doAsync()?

有办法,必有更好的办法。

BroadcastReceiver.PendingResult pendingResultMock = 
mock(BroadcastReceiver.PendingResult.class);
NotificationReceiver receiverSpy = spy(new NotificationReceiver());
doReturn(pendingResultMock).when(receiverSpy).goAsync();

相关内容

  • 没有找到相关文章

最新更新