Добавление ресурсов макета в androidTest

Я хотел бы добавить XML-файлы макета в мою папку androidTest, чтобы использовать их только для тестирования.

Я добавил папку res/layout в androidTest и попытался добавить в нее файл макета. Но выдает ошибку URI is not registered для xmlns:android="http://schemas.android.com/apk/res/android"

Каким-то образом проект не распознает его как допустимый файл макета.


person Abdullah    schedule 21.11.2016    source источник
comment
Проверьте также этот ответ, вы сделали import <yourDefaultPackage>.test.R: stackoverflow.com/a/31492816/1797950   -  person crgarridos    schedule 11.02.2019


Ответы (3)


Сложно добавить ресурсы xml в androidTest.

Инструментальные тесты Android создают еще один APK для запуска тестов с исходным приложением. Хотя вы можете получить доступ к своим Context и объектам из основного приложения, вы не можете изменить сгенерированный файл APK вашего приложения.

Это означает, что вы не можете поместить в исходное приложение дополнительный XML-макет из тестов, находящихся в папке androidTest.

Решение:

Альтернативно,

  • вы можете создать buildType с именем espresso.
  • Then, create an espresso folder where you can put any java or Android resource you want to add.
    • You can even modify your AndroidManifest there.
  • Затем используйте testBuildType 'espresso'

Ваш build.gradle должен выглядеть так:

android {
  testBuildType 'espresso'

  buildTypes {
    espresso.initWith(buildTypes.release)
  }
}

dependencies {
  espressoCompile 'somedependency' // you can even have special dependencies
}

Когда вы запускаете свои тесты эспрессо вокруг этого аромата, у вас будет доступ к дополнительным XML-файлам макета, которые вы добавили.

Должно выглядеть так:

введите здесь описание изображения

person tasomaniac    schedule 21.11.2016
comment
отличный ответ @tasomaniac. Было бы лучше использовать testBuildType, который не является отладочным, чтобы вы могли не раздувать свой набор вкусов. - person a.bertucci; 27.02.2017

Это легко! В общем, вы должны просто поместить свои ресурсы в папку src/androidTest/res. И это так! Затем вы можете использовать его в своих src/androidTest/java файлах. Да, вы не можете использовать тестовые макеты в рабочем APK, но вы можете использовать тестовые макеты в тестовом APK.

Есть некоторые проблемы, которые могут вас смутить. Например, автодополнение не так часто работает хорошо, но, тем не менее, оно строится и работает.

Недавно я написал пользовательский элемент управления для замаскированного EditText, поэтому я не хочу вносить какие-либо действия в библиотеку. , но я хочу иметь действие для проверки представления, и я хочу раздуть его из XML. Весь код можно увидеть на странице github, вот несколько ключевых моментов:

$ tree androidTest/
androidTest/
├── AndroidManifest.xml
├── java
│   └── ru
│       └── egslava
│           └── lib_phone
│               ├── MainActivityTest.java
│               ├── TestActivity.java
│               └── actions
│                   ├── HintViewAction.java
│                   ├── KeepHintViewAction.java
│                   └── SetTextViewAction.java
└── res
    ├── layout
    │   └── activity_main.xml
    └── values
        └── styles.xml

Итак, вы видите, что под androidTest есть какой-то отдельный проект со своим манифестом, который регистрирует Activity и т. д. :-) Я бы поделился еще файлами, но это просто проект, не более, и вы всегда можете посмотреть ссылку. .

Единственное, что я хотел бы предупредить вас, что вы должны быть готовы к тому, что Android Studio покажет вам, что ваш проект содержит ошибки, даже если это не так :-) Удачи!

«Будьте

person Slava    schedule 07.03.2017
comment
Одно замечание: вы должны использовать класс {module_package}.test.R для доступа к ресурсам в папке androidTest/res. - person user2137020; 24.01.2018

Не могу комментировать, но хотел добавить к ответу @Slava. Если кто-то может добавить это как комментарий, во что бы то ни стало.

Попробуйте подавить ошибки ворса с помощью принятого ответа на этот вопрос. Android Studio Удалить ошибку lint

person Lennin Marte    schedule 29.11.2019