Android Espresso - утверждение текста на экране против строки в ресурсах

У меня есть следующий текст в файле ресурсов strings.xml:

<string name="txt_to_assert">My Text</string>

Обычно в коде приложения, чтобы использовать этот текст и отображать его на экране, я делаю следующее:

getString(R.string.main_ent_mil_new_mileage);

В настоящий момент я пытаюсь использовать этот строковый ресурс в тесте UI, написанном с помощью Espresso. Я собираюсь сделать что-то подобное:

String myTextFromResources = getString(R.string.main_ent_mil_new_mileage);
onView(allOf(withId(R.id.my_text_on_screen), withText(myTextFromResources))
    .check(matches(isDisplayed()));

Однако метод getString(...) не может быть использован здесь.
Есть ли способ получить текст из файла ресурсов strings.xml и использовать его в тесте, написанном с помощью Espresso?

Ответ 1

Используйте эту функцию:

private String getResourceString(int id) {
    Context targetContext = InstrumentationRegistry.getTargetContext();
    return targetContext.getResources().getString(id);
}

Вам просто нужно вызвать его с идентификатором строки и выполнить свое действие:

String myTextFromResources = getResourceString(R.string.main_ent_mil_new_mileage);
onView(allOf(withId(R.id.my_text_on_screen), withText(myTextFromResources))
    .check(matches(isDisplayed()));

* EDIT для новой версии Espresso:

С новой версией Espresso вы должны иметь возможность напрямую ссылаться на строковый ресурс с помощью ViewMatcher. Поэтому сначала я рекомендую попробовать непосредственно этот импорт

import static android.support.test.espresso.matcher.ViewMatchers.withText;

И затем в коде:

withText(R.string.my_string_resource)

Ответ 2

Если в случае, если вам нужно добавить текст перед ресурсом String, вам придется сделать это следующим образом

val text=getApplicationContext<Context().getResources().getString(R.string.title_tenth_char) 

теперь, когда у вас есть доступ к тексту, добавьте строку к этому

Ответ 3

Котлин:

var resources: Resources = InstrumentationRegistry.getInstrumentation().targetContext.resources