我有一个使用#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 设置像我这样的特殊上下文。
干杯