Android系统。浓咖啡。如何在没有硬编码字符串的情况下检查文本是否以特定语言显示?

时间:2017-06-25 12:05:07

标签: android android-espresso

我需要在更改应用语言时检查我的片段。 这是我的Android Espresso测试:

 @Test
    public void changeLanguages() {
        Resources resources = context.getResources();
        String[] appLanguages = resources.getStringArray(R.array.app_lang_codes);
        for (int index = 0; index < appLanguages.length; index++) {
            String currentLang = appLanguages[index];
            Locale currentLocale = new Locale(currentLang);
            if (currentLocale.equals(AppLanguageService.getLocaleRO(context))) {
                // click Romanian
                onView(withId(R.id.containerLanguageRO)).perform(click());

                onView(withId(R.id.textViewSelectLanguage)).check(matches(withText("Selecți limba")));
            } else if (currentLocale.equals(AppLanguageService.getLocaleEN(context))) {
                // click English
                onView(withId(R.id.containerLanguageEN)).perform(click());

                onView(withId(R.id.textViewSelectLanguage)).check(matches(withText("Select language")));
            } 
        }
    }

Ant它的工作正常。 OK!

但正如您所看到的,我需要为测试的特定语言硬编码字符串。 “Selecţilimba”和“选择语言”。而且我认为这不好。

是否可以不使用硬代码字符串来检查文本是否以特定语言显示?

1 个答案:

答案 0 :(得分:0)

您可以使用

  mActivityRule.getActivity()

获取您正在测试的活动。有了这个,你可以从你的资源中获取一个字符串,如下所示:

mActivityRule.getActivity().getResources().getString(R.string.your_string)

您可以像这样重写支票:

onView(withId(R.id.textViewSelectLanguage)).check(matches(withText(mActivityRule.getActivity().getResources().getString(R.string.your_string))));

其中your_string是strings.xml文件中字符串资源的名称。