Intereting Posts
Надежная повторяющаяся фоновая задача на Android Нужно ли нам потреблять поток ошибок HttpURLConnection при выходе IOException Разница между фиксацией и применением в Android SharedPreferences Org.codehaus.jackson.map.exc.UnrecognizedPropertyException: непризнанное поле «id» (критерии класса), не помеченное как невежественное Невозможно отладить приложение Android в Intellij: «Предупреждение: информация об отладке может быть недоступна». Как я могу обратиться к браузеру Android от Samsung? NotifyDataSetChanged в адаптере Curser, не работающем с listfragment Возвращает количество записей в переменной, Sqlite, Android, Java Android – Как сделать мультика аудиофайла и видеофайла? Gradle Загрузить приложение Android android для maven repo (nexus) Высота на Android 5.0 (Lollipop) не работает Как предотвратить совпадение представлений от относительного макета? Как передавать данные из активности в фрагмент Как получить последнее воскресенье до текущей даты? Как определить, покинул ли пользователь мое приложение?

Robolectric не нашел ресурс и AndroidManifest.xml

Я создал новый TestProject и добавил следующую строку в свой метод testMethod:

Robolectric.getShadowApplication().getString(R.string.mystring); 

Мой тест не удался

 android.content.res.Resources$NotFoundException: unknown resource 2131558482 

Консоль отображает предупреждения:

 WARNING: No manifest file found at .\..\..\MyProject\AndroidManifest.xml.Falling back to the Android OS resources only. To remove this warning, annotate your test class with @Config(manifest=Config.NONE). WARNING: no system properties value for ro.build.date.utc 

Требуется ли AndroidManifest.xml для получения строковых ресурсов? Я попытался добавить Manifest через org.robolectric.Config.properties и @Config, но предупреждение все еще происходит, и я не могу получить строковый ресурс. Я убедился, что относительный путь к манифесту правильный. Более того, я менял конфигурацию JUnit, но это не помогло.

Solutions Collecting From Web of "Robolectric не нашел ресурс и AndroidManifest.xml"

Решение проблемы, описанной здесь: http://blog.futurice.com/android_unit_testing_in_ides_and_ci_environments

Пропавший манифест

Вы должны были заметить, что Robolectric жалуется, что не смог найти ваш манифест Android. Мы исправим это, написав собственный тестовый бегун. Добавьте следующее в качестве приложения / src / test / java / com / example / app / test / RobolectricGradleTestRunner.java:

 package com.example.app.test; import org.junit.runners.model.InitializationError; import org.robolectric.AndroidManifest; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.robolectric.res.Fs; public class RobolectricGradleTestRunner extends RobolectricTestRunner { public RobolectricGradleTestRunner(Class<?> testClass) throws InitializationError { super(testClass); } @Override protected AndroidManifest getAppManifest(Config config) { String myAppPath = RobolectricGradleTestRunner.class.getProtectionDomain() .getCodeSource() .getLocation() .getPath(); String manifestPath = myAppPath + "../../../src/main/AndroidManifest.xml"; String resPath = myAppPath + "../../../src/main/res"; String assetPath = myAppPath + "../../../src/main/assets"; return createAppManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resPath), Fs.fileFromPath(assetPath)); } } 

Не забудьте изменить аннотацию RunWith в тестовом классе.

Я столкнулся с такими же ошибками, мы использовали несколько вкусов и типов. Итак, есть шаги, чтобы заставить его работать:

1) Студийные тесты для Android запускают конфигурацию

Вы также должны установить рабочий каталог в $ MODULE_DIR $ в Windows. http://robolectric.org/getting-started/ должен сказать это.

2) Единичный тест должен быть аннотирован следующим образом:

 @RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21, manifest = "src/main/AndroidManifest.xml", packageName = "com.example.yourproject") public class SomeFragmentTest { 

Здесь у нас есть простая ссылка на файл manifest и packageName

Вам нужен AndroidManifest.xml и Robolectric в настоящее время зависит от того, что он находится в корне проекта, как предполагает путь.

Я заметил, что я обычно декларировал манифест вроде этого в верхней части моего тестового класса

 @RunWith(RobolectricTestRunner.class) @Config( constants = BuildConfig.class, manifest="app/src/main/AndroidManifest.xml", sdk = 21 ) 

И я переключился на это, чтобы работать.

 @RunWith(RobolectricTestRunner.class) @Config( constants = BuildConfig.class, manifest="src/main/AndroidManifest.xml", sdk = 21 ) 

Я только что решил ту же проблему с Robolectric (ver: robolectric-2.4-jar-with-dependencies.jar) и возвратил неизвестные ресурсы, в то время как загрузка повторялась из разных значений – * папок, например:

 <resources> <string name="screen_type">10-inch-tablet</string> </resources> 

В моем случае я хотел узнать разные устройства. По этой причине я создал screen.xml в следующих папках:

 values/screen.xml - mobile values-sw600dp/screen.xml - 7-inch tablet values-sw720dp/screen.xml - 10-inch tablet 

Моя рабочая область выглядит следующим образом:

 workspace \-ExProj \-exProj \-src \-exProj \-AndroidManifest.xml \-ExProjTest 

Мой модульный тест с Robolectric:

 @RunWith(RobolectricTestRunner.class) @Config(manifest = "./../ExProj/exProj/src/exProj/AndroidManifest.xml") public class UtilityTest { @Test @Config(qualifiers = "sw720dp") public void testIfDeviceIsTablet() throws Exception { System.out.println(Robolectric.application.getString(R.string.screen_type)); } } 

Выше тестового кода выдается на консоль: 10-дюймовый планшет …

Я перегрузил getConfigProperties () путем подкласса RobolectricTestRunner. Пожалуйста, перейдите по этой ссылке: https://stackoverflow.com/a/29907234/727654