ActivityTestRule - как вызвать код перед созданием приложения в onCreate

Я использую Espresso 2.1 с ActivityTestRule, и я ищу способ установить статические флаги перед onCreate() в моем приложении будет называться.

У меня есть код инициализации, который я не хочу вызывать во время тестирования приборов.

2 ответа

Решение

заявка onCreate() называется после приборостроения onCreate(), В этом случае вам необходимо реализовать собственный тестовый прогон, который будет наследовать AndroidJUnitRunner и переопределит callApplicationOnCreate() с вашей пользовательской настройкой.

public class MyCustomTestRunner extends AndroidJUnitRunner {
@Override
public void callApplicationOnCreate(Application app) {
    InstrumentationRegistry.getTargetContext().getSharedPreferences().doMyStuff();
    super.callApplicationOnCreate(app);
}
}

Обязательно обновите ваш defaultConfig в build.gradle, чтобы использовать новый testInstrumentationRunner, например так:

testInstrumentationRunner "com.myapp.MyCustomTestRunner"

Если вы хотите запустить некоторый код перед Activity onCreate(), подкласс ActivityTestRule с вашей собственной реализацией beforeActivityLaunched()

Я решил эту проблему в Kotlin, добавив это в свой тестовый метод:

      val scenario = ActivityScenario.launch(MyActivity::class.java)

Затем добавьте / обновите свои переменные перед этим вызовом или в своем @Before метод.

Другие вопросы по тегам