3

現在、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

このブログでは、テストモジュールを同じパッケージに含める必要があることを示唆していますが、すべてのテストを別のパッケージに入れています。これを回避するにはどうすればよいですか?

4

1 に答える 1

2

クラスは、 ではなくTestApplication独自のクラスを拡張する必要があり、 と同じパッケージにある必要があります。Applicationandroid.app.ApplicationApplication

...しかし、私はすべてのテストを別のパッケージに入れています。

それは問題ではないはずです。TestApplicationをテスト モジュールに入れますが、 のパッケージを使用してくださいApplication

たとえば、maven を使用している場合、ファイルは次の場所にあります。

src/main/java/com/example/Application.java src/test/java/com/example/TestApplication.java

于 2013-10-07T21:07:31.513 に答える