Intereting Posts
Создание пользовательского списка или вида сетки Android: поиск вызовов API, требующих разрешения WebView со встроенным видео в фоновом режиме Не удается найти идентификатор макета для <1% пользователей? Android NSD не обнаруживает всех сервисов Android: какие инструменты профилирования доступны в Eclipse для просмотра масштабируемости? Процентное кодирование в URI Какая часть стека программного обеспечения Android обрабатывает команды через разъем для наушников? (Например, отвечать на вызовы с гарнитурой) Получение «Фатального сигнала 11 (SIGSEGV) при 0x00000010 (код = 1)» при записи в массив jfloat UnsupportedOperationException AudioEffect: неверная операция с параметрами Android – java.lang.IndexOutOfBoundsException: Неверная позиция позиции 0 (0). Количество элементов: 0 Как получить файл в активах с Android NDK Как я могу заставить игроков взломать данные уровня игры? Что такое токен API Android Расширяемое поведение селектора списков

Как найти ресурсы библиотеки поддержки с помощью robolectric?

Я пытаюсь использовать robolectric, чтобы издеваться над моими приложениями для Android. К сожалению, после включения внешней библиотеки в мой проект тесты разбились. Информация об ошибке – о некотором ресурсе библиотеки, который не найден.

java.lang.RuntimeException: Could not find any resource from reference ResName{com.company.app:style/Theme_AppCompat_Light_NoActionBar} from style StyleData{name='AppTheme_Base', parent='Theme_AppCompat_Light_NoActionBar'} with theme null 

У кого-то есть эта проблема?

Библиотеки, содержащие внутренние ресурсы (AKA aar), должны отображаться в файлах project.properties (в src / main). Содержимое файла будет чем-то вроде этого (если вы используете Android Studio):

 android.library.reference.1=../app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.0 

Взгляните на документацию .

Это происходит, когда у Robolectric возникают проблемы с поиском каталога res. Вы можете создать Custom Test Runner, чтобы указать правильный путь к директории res.

 public class CustomTestRunner extends RobolectricTestRunner { public CustomTestRunner(Class<?> testClass) throws InitializationError { super(testClass); } @Override protected AndroidManifest getAppManifest(Config config) { final String BUILD_PATH = "src/main"; final FileFsFile manifestFile = FileFsFile.from(BUILD_PATH, "AndroidManifest.xml"); AndroidManifest appManifest = super.getAppManifest(config); return new AndroidManifest(manifestFile, appManifest.getResDirectory(), appManifest.getAssetsDirectory()); } } 

Чтобы использовать его, замените:

@RunWith(RobolectricTestRunner.class) с: RunWith(MyRobolectricTestRunner.class) в ваших тестах Robolectric.

В моем случае appManifest.getResDirectory() вернул "build/intermediates/res/merged/debug" .