我有一个使用#startService绑定到服务的应用程序。该服务是使用AIDL定义的远程服务。
我想编写一个Robotium 4.x测试,该测试绑定到“Mock”服务,该服务提供一些测试数据,以便我可以控制服务提供哪些数据。我不太了解设置这样的场景。
我的第一次尝试是调用我的ActivityInstrumentationTestCase2启动的Activity上的一些方法,并在ServiceConnection中简单传递,并手动调用#onServiceConnected来模拟来自系统的回调。
activity.setConnection(new FakeServiceConnection());
这总是导致
Instrumentation run failed due to 'java.lang.IllegalArgumentException'
因为似乎Android Runtime已经以某种方式看到了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设置像我这样的特殊上下文。
欢呼声