Android サービス ( ) に加えている一連の変更をテストしようとしていますandroid.app.Service
- 私は Dagger と Robolectric を使用しており、テスト範囲を縮小するために、サービス内のフィールド注入クラスをいくつかのモックに置き換える必要があります.. .それを(わずかに)より「ユニット」のようにします。
というわけでショートバージョン…
私はProviders.of
(そこにGuice構文...)を挿入しますandroid.app.Service
。単体テスト中にそれらを MockProviders に置き換えるにはどうすればよいですか?
ロングバージョンは…
関連するサービス コードは次のようになります。
@Inject SpotService spotService;
@Inject Provider<SynchroniseTidePosition> syncTidePosition;
@Inject Provider<SynchroniseSwellDataTask> syncBuoyData;
@Inject Provider<SynchroniseConditionsTask> syncConditionsData;
@Inject SpotRatingCalculator spotRatingCalculator;
@Inject LocalBroadcastManager localBroadcastManager;
@Inject NotificationManager notificationManager;
/**
* @see android.app.Service#onCreate()
*/
@Override
public void onCreate() {
super.onCreate();
inject(this);
...
したがって、通常の操作では、startService(intent)
呼び出しによってサービスが依存関係を挿入できるようになり、問題onCreate
はありません。
私のテストでは、注入されたProvider
sget()
呼び出しを Mockito モックに置き換えたいと考えています。私はDagger テストの例に従うことを試み、次のようなテスト モジュールを作成しました。
@Module(includes = OceanLifeModule.class,
injects = {TestSynchronisationServiceNotifications.class},
overrides = true)
static class TestSynchronisationServiceNotificationsModule {
@Provides LocalBroadcastManager provideLocalBroadcastManager() {
return LocalBroadcastManager.getInstance(Robolectric.application);
}
@Provides NotificationManager providesNotificationManager() {
return (NotificationManager) Robolectric.application.getSystemService(Context.NOTIFICATION_SERVICE);
}
@Provides SpotService provideSpotService() {
return mock(SpotService.class);
}
@Provides SpotRatingCalculator provideSpotRatingCalculator() {
return mock(SpotRatingCalculator.class);
}
@Provides SynchroniseTidePosition provideSyncTidePosition() {
return mock(SynchroniseTidePosition.class);
}
@Provides SynchroniseConditionsTask provideSyncConditionsTask() {
return mock(SynchroniseConditionsTask.class);
}
@Provides SynchroniseSwellDataTask provideSyncSwellDataTask() {
return mock(SynchroniseSwellDataTask.class);
}
}
実際の Service コードが Provider を呼び出すと、 Mockitoget()
モックが返されることを期待しています (これらは、テスト モジュール @Provides のモックです)。
これは起こっていません。私がここに向かっているアプローチの何が問題なのですか?