При попытке заставить 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 в свой проект, я изменил строки, в которых определены местоположения файлов: он не содержит имени модуля. Теперь это работает.