#startService を使用してサービスにバインドするアプリケーションがあります。Service は、AIDL を使用して定義されたリモート サービスです。
サービスによって配信されるデータを制御できるように、いくつかのテスト データを配信する「モック」サービスにバインドする Robotium 4.x テストを作成したいと考えています。そのようなシナリオをセットアップするのに十分な理解がありません。
私の最初の試みは、ActivityInstrumentationTestCase2 によって起動される Activity のメソッドを呼び出し、ServiceConnection を単純に渡し、手動で #onServiceConnected を呼び出して、システムからのコールバックをシミュレートすることでした。
activity.setConnection(new FakeServiceConnection());
これにより、常に
Instrumentation run failed due to 'java.lang.IllegalArgumentException'
ServiceConnection は何らかの方法で Android ランタイムによって既に認識されているようです。
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 を使用して、私のような特別なコンテキストをセットアップする方法を理解していなかったと思います。
乾杯