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

Robolectric говорит, что "AndroidManifest.xml не найден"

При попытке заставить Robolectric RC3 работать в Android Studio, я получаю

Caused by: java.lang.RuntimeException: build/intermediates/bundles/debug/AndroidManifest.xml not found or not a file; it should point to your project AndroidManifest.xml
at org.robolectric.manifest.AndroidManifest.validate(AndroidManifest.java:120)
at org.robolectric.manifest.AndroidManifest.getResourcePath(AndroidManifest.java:469)
at org.robolectric.manifest.AndroidManifest.getIncludedResourcePaths(AndroidManifest.java:475)
at org.robolectric.RobolectricTestRunner.createAppResourceLoader(RobolectricTestRunner.java:479)
at org.robolectric.RobolectricTestRunner.getAppResourceLoader(RobolectricTestRunner.java:471)
at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:73)
at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:421)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:234)

Я пробовал

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

и я попытался установить расположение манифеста в своем TestRunner, ничего не получилось. В файловой системе я вижу, что манифест находится в

./app/build/intermediates/manifests/full/debug/AndroidManifest.xml

не в месте нахождения Robolectric. В какой-то момент манифест просто проигнорировался, затем аналогичная проблема возникла для ресурсов, приложение или Robolectric не смогли найти сырьевой ресурс, который использует мое приложение. Это в моем файле сборки:

   sourceSets {
    main {
        java.srcDirs = ['src/main/java']
        resources.srcDirs = ['src/main/res']
    }
    test {
        java.srcDirs = ['src/test/java', 'src/main/java']
        resources.srcDirs = ['src/test/res', 'src/main/res']
    }
}

Как сказать Robolectric, где искать манифест, и что еще более важно, где искать ресурсы?

Изменить: Я проверил Robolectric из github, я его построил, установил в своем локальном репозитории .m2, файл gradle теперь относится к локальной сборке SNAPSHOT, и я убедился, что gradle не получит новую версию от удаленного репо. Затем я скопировал RobolectricGradleTestRunner в свой проект, я изменил строки, в которых определены местоположения файлов: он не содержит имени модуля. Теперь это работает.

4b9b3361

Ответ 1

Я предполагаю, что вы пытаетесь запустить тесты с помощью JUnit. Вы можете попробовать две разные вещи:

  • Создайте собственный класс TestRunner, как показано здесь. Проверьте раздел CustomTestRunner, где вы в основном создаете TestRunner, который фактически знает правильный манифест для использования. Укажите свои тесты для их запуска с помощью вашего тестового бегуна с аннотацией @Config.
  • (Мой предпочтительный выбор). Перейдите в конфигурацию JUnit, Запустите > Изменить конфигурации. Обратите внимание на текстовое поле "Рабочий каталог". Добавьте /app (для OSX и Linux) или \app (Windows) в путь, написанный в текстовом поле. Попробуйте снова запустить, и он должен работать.

Ответ 2

Такая же проблема для Android Studio. Я решил эту проблему, чтобы отредактировать конфигурацию Unit4. вы можете следовать этим.

В Android Studio.

  • Изменить конфигурации
  • В Junit вы должны изменить рабочий каталог на $MODULE_DIR $.

Важно $MODULE_DIR $.

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

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

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

Ответ 3

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

  • Тесты студии Android запускают конфигурацию

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

  1. Unit test должен быть аннотирован следующим образом:

    @RunWith (RobolectricTestRunner.class) @Config (константы = BuildConfig.class, sdk = 21, manifest = "src/main/AndroidManifest.xml", packageName = "com.example.yourproject" ) public class SomeFragmentTest {

Ответ 4

Если вы все еще получаете эту ошибку с Android Studio 3.0, убедитесь, что ваша конфигурация gradle имеет следующие параметры:

android {
    ...
    testOptions {
        unitTests {
            includeAndroidResources = true
        }
    }
}

Ответ 5

Обратите внимание, что intellij 16 EAP имеет ошибку об этой переменной $MODULE_DIR $(она указывает на неправильное место), в результате чего тесты сбой исключаются из этого исключения. См. https://youtrack.jetbrains.com/issue/IDEA-149802#tab=History. Должен быть установлен в середине января 2016 года.

Ответ 6

Вы можете указать ту же проблему здесь: https://github.com/robolectric/robolectric/issues/1648

Вы должны упомянуть об этом в своем тестовом коде:

@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = 18)

Это говорит robolectric, где находится ваш файл манифеста. Это должно работать, если вы не измените значения своего каталога.

также попробуйте использовать шаблон, доступный в Интернете. Все там настроено. Вам не нужно менять значения каталога. Вы можете получить это отсюда: https://github.com/robolectric/deckard-gradle

Изменить: способ, которым я вижу, - это исключение, возникающее при "build/intermediates/bundles/debug/AndroidManifest.xml ", но вы говорите, что файл находится в "app/build/intermediates/manifests/full/debug/AndroidManifest.xml", я думаю, что эти два разных местоположения. Убедитесь, что у вас есть xml файл в build/intermediates/bundles/debug/AndroidManifest.xml "

Ответ 7

Это правильно @Кристина. Я также сталкиваюсь с точной проблемой. И дело в том, что процесс сборки не создает папку пакетов вообще под промежуточными звеньями. И обычай robolectric бегун также не работал. Вот пользовательский runner I используемый. Я еще не понял решение, но кажется, что проблема может быть связана с версией инструмента сборки, которая должна использоваться.

[Update] Меняет рабочий каталог в моей конфигурации unit test, чтобы указать на корневой каталог модуля, который тестируется. [Update]

Ответ 8

У меня была эта ошибка после того, как я обновил AndroidStudio до 2.3.3, а также обновлен плагин gradle. Он был решен, установив working directory в $MODULE_DIR$, а также обновив зависимость robolectric от testCompile 'org.robolectric:robolectric:3.0' до testCompile 'org.robolectric:robolectric:3.4.2'.

Обратите внимание, что установка working directory в то время как версия robolectric устарела, не решит ее.

Ответ 9

 Hi All Iam new to RoboElectric was facing lot of struggle to run my first test 
please find the below steps which resolves all the issues.
Step 1: use the version in dependencies     
    testImplementation"org.robolectric:robolectric:4.0" in app.gradle    
step 2: 
in app.gradle inside android use below
testOptions {    
        unitTests {    
            includeAndroidResources = true      
        }    
    }    

шаг 3: в gradle.properties вставьте ниже
enableUnitTestBinaryResources = верно

Оно работает !!!