現在、robolectric をバージョン 1 から 2 にアップグレードしています。現在のバージョンでは、以下を使用して、テスト モジュール (バインド用) を roboguice に提供しています。
public class RoboTestRunner extends RobolectricTestRunner {
public RoboTestRunner(Class<?> testClass) throws
InitializationError {
super(testClass);
}
@Override
public void prepareTest(Object test) {
Application app = Robolectric.application;
RoboGuice.setBaseApplicationInjector(app, RoboGuice.DEFAULT_STAGE,
Modules.override(RoboGuice.newDefaultRoboModule(app)).with(new
TestModule()));
Injector injector = RoboGuice.getInjector(app);
injector.injectMembers(test);
}
}
ただし、今は prepareTest メソッドがこのクラスにないことをアップグレードしました。新しいバージョンでは、このコードをどこで実行すればよいですか?
アップデート
私はこれを行う方法を見つけました。プロジェクトで android.app.Application を拡張するクラスを作成し、これをマニフェストで参照する必要があります。次に、そのようなクラスを作成します
public class TestApplication extends Application implements TestLifecycleApplication {
@Override
public void onCreate() {
super.onCreate();
RoboGuice.setBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE,
RoboGuice.newDefaultRoboModule(this), new TestModule());
}
@Override
public void beforeTest(Method method) {}
@Override
public void prepareTest(Object test) {
TestApplication application = (TestApplication) Robolectric.application;
RoboGuice.setBaseApplicationInjector(application, RoboGuice.DEFAULT_STAGE,
RoboGuice.newDefaultRoboModule(application), new TestModule());
RoboGuice.getInjector(application).injectMembers(test);
}
@Override
public void afterTest(Method method) {}
}
このクラスには最初に Test があるため、robolectric は自動的にそれを見つけて使用する必要があります。しかし、これは起こっていないようです。理由を知っている人はいますか?
更新 2
このブログでは、テストモジュールを同じパッケージに含める必要があることを示唆していますが、すべてのテストを別のパッケージに入れています。これを回避するにはどうすればよいですか?