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();
}
}