3

我有一个使用#startService 绑定到服务的应用程序。Service 是一个远程服务,使用 AIDL 定义。

我想编写一个绑定到“模拟”服务的 Robotium 4.x 测试,该服务提供一些测试数据,以便我可以控制服务提供哪些数据。我对设置这样的场景还不够了解。

我的第一次尝试是调用由我的 ActivityInstrumentationTestCase2 启动的 Activity 上的一些方法,然后简单地传入 ServiceConnection 并手动调用 #onServiceConnected 以模拟来自系统的回调。

 activity.setConnection(new FakeServiceConnection());

这总是导致

 Instrumentation run failed due to 'java.lang.IllegalArgumentException'

似乎Android运行时已经以某种方式看到了ServiceConnection。

我阅读了有关 RenamingDelegateContext 和 IsolatedContext 的信息,但我不知道在调用运行时#startService 时如何控制或设置服务上的创建。

文档说我可能必须像这样覆盖相应的方法。

public class ServiceRenamingContext extends RenamingDelegatingContext {

    @Override
    public ComponentName startService(Intent service) {
        throw new UnsupportedOperationException("I got called!!!!");
        // return super.startService(service);
    }

    @Override
    public boolean stopService(Intent name) {
        throw new UnsupportedOperationException("I got called!!!!");
        // return super.stopService(name);
    }

    public ServiceRenamingContext(Context context, String filePrefix) {
        super(context, filePrefix);

    }

    @Override
    public boolean bindService(Intent service, ServiceConnection conn, int flags) {

        throw new UnsupportedOperationException("I got called!!!!");

        // return super.bindService(service, conn, flags);
    }
}

如您所见,这只是引发某种异常以查看它是否被运行时调用。但什么也没有发生。

非常感谢任何提示如何设置它。

我想我不明白如何使用 ActivityInstrumentationTestCase2 设置像我这样的特殊上下文。

干杯

4

0 回答 0