2

MyApplicationクラス (extends Application) は、起動時に値をチェックするサービスを起動しSharedPreferenceます。値が の場合、false一部のデータが初期化されます。

テスト目的で、データの初期化が行われないようにこれSharedPreferenceを変更したいと思います。trueただし、これを行うと、競合状態が発生しMyApplication.onCreate()、設定を変更する前に が呼び出されます。

MyApplication.onCreate()が呼び出される前に設定を変更するにはどうすればよいですか? このようなことは可能ですか?

MyApplication.java

public class MyApplication extends Application {
    public static AppComponent component;

    public MyApplication() {
    }

    @Override
    public void onCreate() {
        injectDependencies();

        super.onCreate();
        initializeDatabase();
    }

    private void injectDependencies() {
        if (component == null)
            component = DaggerAppComponent.builder()
                    .appModule(new AppModule(this))
                    .build();

        component.inject(this);
    }

    @VisibleForTesting
    public static void setComponent(AppComponent component) {
        MyApplication.component = component;
    }

    private void initializeDatabase() {
        Intent intent = DataInitializationService.createIntent(this, null);
        startService(intent);
    }
}

SearchFragmentTest.java (src/androidTest フレーバー)

public class SearchScreenFragmentTest {
    @Rule
    public ActivityTestRule activityRule = new ActivityTestRule<>(
            SearchActivity.class,
            true,    // initialTouchMode
            false);  // launchActivity. False to set intent per method

    public SearchScreenFragmentTest() {
    }

    @Before
    public void setUp() throws Exception {
        //gets run AFTER `MyApplication.onCreate()`. I want this to be called BEFORE.
        new TestUtils.TestDataInitter(InstrumentationRegistry.getTargetContext())
                .clearPrefs(true)
                .acceptIntro(true)
                .initDatabaseFake(true)
                .init();
    }

    @After
    public void tearDown() throws Exception {
        new TestUtils.TestDataInitter(InstrumentationRegistry.getTargetContext())
                .clearPrefs(true)
                .acceptIntro(true)
                .initDatabaseFake(false)
                .init();
    }

}
4

0 に答える 0