Подтвердить что ты не робот

Доступ к ресурсам контрольно-измерительных приборов

Я пытаюсь найти способ, чтобы мои контрольные тесты имели доступ к строковым ресурсам, сгенерированным в тестовом пакете.

Подробнее:

У меня есть тестовый пример Android, который наследуется от ActivityInstrumentationTestCase2. Я использовал Eclipse New Android Test Project, чтобы создать тест в первую очередь. В тестовом проекте есть ресурсы (похожие на ресурсы для обычного Android-проекта). Я пытаюсь найти способ программного доступа к ресурсам String в тестовом проекте в различных индивидуальных тестах. Я пробовал:

String s = getInstrumentation().getContext().getString(R.string.blah);

и

String s = mActivity.getApplicationContext().getString(R.string.blah);

Оба метода вызывают исключение NotFoundException. У меня есть строка "blah", определенная в моем файле strings.xml. R в коде выше - это импорт из моего тестового пакета, а не пакета тестируемого приложения. Я могу получить доступ к ресурсам, определенным в пакете приложений, с помощью последнего вызова.

Было бы полезно выяснить способ доступа к строковым ресурсам, определенным в XML, в моих тестах (поскольку я хочу избежать ввода строк в код). Что я делаю неправильно?

4b9b3361

Ответ 1

Даже если этот пост больше не является текущим - это дополнение может помочь кому-то:

Чтобы понять, как это работает, вы должны иметь в виду, что контекст, в котором работает ваше инструментарий, отличается от контекста приложения, с которым вы выполняете свой тест. Как вы заявили правильно, вы НЕ МОЖЕТЕ получить доступ к ресурсам своей цели из контекста instumentation. Вы можете определить некоторые для вашего инструментального контекста в отдельном XML файле внутри тестового проекта или - если вы хотите использовать предопределенные ресурсы - вы можете получить их следующим образом:

 Resources res = getInstrumentation().getTargetContext().getResources();
 res.getString(R.string.xxx); // get a string resource

Ни контекст инструментария (как писал Wujun), ни целевой контекст не доступны, пока конструкция тестового блока не будет полностью завершена.

Ответ 2

Я пробовал:

String s = getInstrumentation().getContext().getString(com.myProject.test.R.string.blah);

где com.myProject - это пакет тестируемого проекта, а com.myProject.test - пакет проекта тестирования.

Это сработало для меня, если я поместил код внутри setup(). Он не работает, если я помещаю его внутри конструктора.

Ответ 3

Я думаю, что это невозможно без сохранения файлов ресурсов в другом месте, но вы можете использовать что-то вроде Robotium где вы просто используете Solo.getString(), и вы получаете свой ресурс.