Имитационные вызовы API, сделанные в классе Application в рамках тестирования пользовательского интерфейса.

Предыстория:

Наше приложение для Android, onCreate, запускает некоторые варианты использования инициализации, которые выполняют некоторые вызовы сетевого API.

Параллельно запускается наша активность LAUNCHER.

В наших тестах пользовательского интерфейса мы используем MockWebServer для заглушки ответов API и используем ANDROIDX_TEST_ORCHESTRATOR 1.1.1.

Проблема:

В наших тестах пользовательского интерфейса, включающих основное действие, мы хотели бы заглушить разные ответы на вызовы API инициализации из теста.

Другими словами, каждый тест должен иметь возможность указать, какие ответы возвращаются вызовами API инициализации.

Однако, поскольку службы инициализации запускаются до действия, а весь код в тестах пользовательского интерфейса запускается ПОСЛЕ того, как приложение уже запущено. Мы не в силах повлиять на реакции, возникающие перед ним.

Вопрос:

Есть ли способ вручную запустить приложение из теста, как мы можем сделать с ActivityTestRule для Activity? Это позволит нам заглушить вызовы API инициализации на основе требований теста, а затем запустить приложение.


person Tushar Nallan    schedule 25.11.2019    source источник


Ответы (1)


Если вы проверите документы ActivityTestRule:

ActivityTestRule (Class<T> activityClass, 
                boolean initialTouchMode, 
                boolean launchActivity)

Таким образом, вы можете установить false параметр launchActivity:

@Rule
public final ActivityTestRule<ActivityToTest> mActivityRule = 
    new ActivityTestRule<>(ActivityToTest.class, true, false);

и выполните то, что вам нужно в начале тестов, а затем запустите активность в нужный момент с нулевым параметром:

mActivity = mActivityRule.launchActivity(null);

или с намерением с необходимыми дополнениями, если они вам понадобятся:

Intent intent = new Intent();
intent.putExtra("your_key", "your_value");
mActivity = mActivityRule.launchActivity(intent);
person jeprubio    schedule 27.11.2019
comment
даже если launchActivity имеет значение false, экземпляр класса приложения все равно создается - person Tushar Nallan; 28.11.2019