Использование активов в тестах 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' )
    }
  }
}

но я не уверен, поскольку плагин не создает какой-либо вариант сборки, а просто выполняет задачи.