Как получить доступ к текстовому файлу для теста JUnit в Android?

Как я могу получить доступ к текстовому файлу в моем каталоге «src/test/resources»

Кажется, я не могу получить его во время теста JUnit.

мобильный/build.gradle:

sourceSets {
        test {
            java {
                srcDirs = [ 'src/test/java' ]
            }
            resources {
                srcDirs = [ 'src/test/resources' ]
            }
        }
    }

Метод испытания:

@Test
public void test_file() {
    URL resource = getClass().getResource("file_four_lines.txt");
    File file = new File(resource.getFile()); // Get NullPointerException here
    ...

}

person Kamilski81    schedule 14.05.2016    source источник


Ответы (3)


Укажите путь к файлу с префиксом /.

В принципе, вы бы сделали что-то вроде этого:

File helloBleprintJson = new File(
        getClass().getResource("/helloBlueprint.json").getPath());

Вышеприведенный фрагмент взят из здесь.

person rharter    schedule 27.05.2016
comment
И мне также не нужно изменять исходные наборы в моем build.gradle. Спасибо @rharter - person Kamilski81; 16.07.2016

Я думаю, эта ссылка поможет. В вашем случае, почему бы не использовать жесткий код для тестирования? Почему бы не использовать String.xml вместо «file_four_lines.txt». Интернационализация требует структуры каталогов для каждого файла ресурсов, имеющего различный язык, размер экрана, ориентацию, вид, версию ночного/дневного видения. По этой причине ресурсы компилируются и доступны из файла R. Вы пытаетесь обойти это соглашение, используя .txt вместо .xml и обращаясь к ресурсу напрямую, это кажется неправильным. Я не думаю, что тестирование - это ваша проблема, а не следование соглашению.

person Pomagranite    schedule 14.05.2016
comment
Спасибо. Допустим, я хотел проверить ввод файла и хотел получить файл json из пути к классам... разве это не был бы просто файл в файловой системе. Не уверен, что для моего модульного теста здесь нужна локализация. - person Kamilski81; 14.05.2016

Простите меня за двойное сообщение, у меня есть ответ из официальной документации" Произвольные файлы для сохранения в необработанном виде. Чтобы открыть эти ресурсы с помощью необработанного InputStream, вызовите Resources.openRawResource() с идентификатором ресурса, которым является R.raw.filename.

Однако, если вам нужен доступ к исходным именам файлов и файловой иерархии, вы можете сохранить некоторые ресурсы в каталоге assets/ (вместо res/raw/). Файлам в assets/ не присваивается идентификатор ресурса, поэтому вы можете прочитать их только с помощью AssetManager. " rel="nofollow">являются нестандартными (неподдерживаемыми) , поэтому вы должны предоставить свою собственную реализацию/парсер для чтения файла этого типа. Спасибо за этот пост. Я кое-что знал о ресурсах, но теперь благодаря вашим советам Я знаю даже больше. Напомним, что система ресурсов Android отслеживает все активы кода, связанные с приложением. Инструменты Android SDK компилируют ресурсы вашего приложения в двоичный файл приложения во время сборки. Чтобы использовать ресурс, вы должны правильно установить его в дереве исходного кода (внутри каталога res/ вашего проекта) и собрать приложение. В рамках процесса сборки инструменты SDK генерируют символы для каждого ресурса, которые вы можете использовать в коде своего приложения для доступа к ресурсам. ресурсы и, конечно же, упомянутые символы находятся в сгенерированном файле R

person Pomagranite    schedule 14.05.2016