Использование активов в тестах robolectric
В моих тестах robolectric я пытаюсь прочитать файл.
Поскольку этот файл содержит только тестовые данные, я поместил их в активы тестов.
Структура каталогов выглядит так.
src/main/assets/prod_data_file
src/test/assets/test_data_file
Однако, когда я пытаюсь прочитать файл getShadowApplication().getAssets().open(MY_FILE_PATH)
, он дает мне FileNotFoundException
.
Кто-нибудь знает, как это исправить?
Ответы
Ответ 1
Поскольку мои тесты просто читают эти файлы и возвращают данные файла как String
, я смог сделать это через getClass().getClassLoader().getResourceAsStream(MY_FILE_PATH)
, а затем прочитать файл. Не нужно читать, чтобы использовать getShadowApplication().getAssets().open(MY_FILE_PATH)
.
Я только что перенесла файлы тестовых данных на src/test/resources
, и он сработал.:)
Ответ 2
Я смог сделать это вот так:
1) Скопируйте (или создайте) AndroidManifest.xml в тестовую папку
2) Добавьте @Config(emulateSdk = 18, manifest = "src/test/AndroidManifest.xml")
для этого конкретного теста
Мне удалось прочитать файл. Таким образом, вы можете играть с классом AndroidManifest
и специальным бегуном (больше вдохновения здесь https://groups.google.com/forum/#!topic/robolectric/YvbdqRFcdnA)
Я думаю, что можно также играть с build.gradle
:
android {
sourceSets {
androidTest.setRoot( 'src/test' )
androidTest {
assets.srcDir file( 'src/test/assets' )
}
}
}
но я не уверен, поскольку плагин не создает какой-либо вариант сборки, а просто выполняет задачи.