Я следую Android Code Lab для тестирования эспрессо

Он устарел, потому что в нем используется ActivityTestRule вместо рекомендуемого ActivityScenarioRule

Устаревшие фрагменты кода

Правило

@RunWith(AndroidJUnit4.class)
public class SpinnerSelectionTest {
@Rule
public ActivityTestRule mActivityRule = new ActivityTestRule<>(
                 MainActivity.class);

Тест

@Test
public void iterateSpinnerItems() {
String[] myArray = 
     mActivityRule.getActivity().getResources()
     .getStringArray(R.array.labels_array);
}

Рекомендуемый код

Я понял правило

@RunWith(AndroidJUnit4.class)
public class SpinnerSelectionTest {

@Rule
public ActivityScenarioRule<EspressoSpinnerActivity> mActivityRule = new ActivityScenarioRule(
        EspressoSpinnerActivity.class);

Тест

Как получить ресурс R.array.labels_array, как это было сделано в старом коде (см. выше)?

0
user919426 26 Фев 2021 в 14:45

1 ответ

Лучший ответ

Я нашел решение. Ключ в том, чтобы получить контекст с помощью InstrumentationRegistry.getInstrumentation().getTargetContext()

Создайте вспомогательную функцию для получения значений ресурса строкового массива

private String[] getResourceArray(int id) {
    Context targetContext = 
        InstrumentationRegistry.getInstrumentation().getTargetContext();

    return targetContext.getResources().getStringArray(id);
}

Затем в методе @Test вы можете получить массив

 @Test
 public void iterateSpinnerItems() {
    String[] arr = getResourceArray(R.array.labels_array);

}
0
user919426 26 Фев 2021 в 12:01