Robolectric不绑定另一个线程的服务

时间:2017-08-11 08:11:05

标签: android junit robolectric

我正在使用Robolectric 3.4.2,我需要测试两个服务之间的交互。

在我的测试中,我写了一个虚拟服务:

ShadowApplication.getInstance().setComponentNameAndServiceForBindService(
        new ComponentName(SERVICE.getPackageName(), SERVICE.getClassName()),
            new Binder() {
                @Override
                public IInterface queryLocalInterface(final String descriptor) {
                    return null;
                }
            }
    );

如果我直接从我的测试用例中调用BindService,它就可以工作,但是如果对bindService的调用是在另一个线程中(就像在实际应用程序中那样),则onServiceConnected()回调永远不会被称为。

ServiceConnection connection = new ServiceConnection(){

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        try {
            doSomething();
        } catch (Exception e) {
            Log.e(TAG, "Cannot Do Something", e);
        }
        mContext.unbindService(this);
    }

    @Override
    public void onServiceDisconnected(ComponentName name) { }
};

new Thread(new Runnable() {
    @Override
    public void run() {
        mContext.bindService(SERVICE.createIntent()), connection, Context.BIND_AUTO_CREATE);
    }
}).start();

我做错了什么,还是希望以这种方式工作?

0 个答案:

没有答案