Используя активы в тестах robolectric


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

Структура каталогов выглядит следующим образом.
src/main/assets/prod_data_file
src/test/assets/test_data_file

Однако, когда я пытаюсь прочитать файл по getShadowApplication().getAssets().open(MY_FILE_PATH), он дает мне FileNotFoundException.

Кто-нибудь знает, как это исправить?

2 12

2 ответа:

Поскольку мои тесты просто читают эти файлы и возвращают данные файла в виде String, я смог сделать это через getClass().getClassLoader().getResourceAsStream(MY_FILE_PATH), а затем прочитать файл. На самом деле не нужно читать, чтобы использовать getShadowApplication().getAssets().open(MY_FILE_PATH).

Я просто переместил свои файлы тестовых данных в src/test/resources, и это сработало. :)

Я смог сделать это так:

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' )
    }
  }
}

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