在 Espresso 测试中,如何使用 ActivityTestScenario 获取资源

In an Espresso Test, how do I get a resource using ActivityTestScenario

我正在关注 Android Code Lab for Espresso testing

它已经过时了,因为它使用 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,就像在旧代码(上面)中所做的那样?

我找到了解决方案。关键是使用 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);

}