Intereting Posts
Настройки прокси-сервера Android SDK в LINUX Android Nougat clipPath не работает во время анимации Интересная информация о имени переменной Android GoogleMap или SupportMapFragment – исключение нулевого указателя PreferenceManager.setDefaultValues ​​readAgain параметр и новые настройки Для вызова требуется уровень API 14 (текущий минимум равен 10): ListView Creator вызван, но нет других методов Ошибка при переносе приложения из Eclipse в Android Studio Службы Google-игр входят в систему (неудача первой попытки, успешная вторая) Как начать другое действие с некоторой задержкой после нажатия кнопки в android? Быстрый прокрутка большого пальца исчезает при прокрутке AlphabetIndexer Ошибка приложения при запросе списка друзей Как получить встроенные метаданные главы с помощью MediaMetadataRetriever Отключить пинч / зум в браузере Android 2.1 на устройствах HTC Как установить высоту ширины изображения на основе размера экрана в gridview

Android InstrumentationTestCase getFilesDir () возвращает null

Я использую InstrumentationTestCase для тестирования тестового компонента моего приложения.

Компонент сохраняет данные во внутреннем хранилище и использует Context::fileList(); Для извлечения сохраненных файлов.

Я испытываю следующую проблему: использование этого метода в приложении (на устройстве) работает отлично. Но когда я пытаюсь (Android-) Unit-Test (также на устройстве) с использованием InstrumentationTestCase я получаю fileList() NullPointerException внутри fileList() . Я выкопал в источник Android и выяснил, что getFilesDir() (см. Источник здесь) возвращает null и вызывает эту ошибку.

Код для воспроизведения следующий:

 public class MyTestCase extends InstrumentationTestCase { public void testExample() throws Exception { assertNotNull(getInstrumentation().getContext().getFilesDir()); // Fails } } 

Мои вопросы: Является ли это поведение? Что я могу сделать, чтобы обойти эту проблему? Я правильно использую InstrumentationTestCase или должен использовать что-то другое?

Я нашел этот вопрос, но не уверен, что это касается той же проблемы, что и у меня.

Я думаю, что вы правы, сохраняя ваши тестовые данные отдельно от тестируемого приложения.

Вы можете исправить проблему с помощью Null , создав каталог files для приложения Instrumentation , выполнив следующие команды:

 adb shell cd /data/data/<package_id_of_instrumentation_app> mkdir files 

Вы можете сделать это выше только на эмуляторе или в корневом устройстве.

Тогда тест с вашего вопроса не подведет. Я сделал это, а также загрузил файл с именем tst.txt в files dir, все тесты были успешными:

 assertNotNull(getInstrumentation().getContext().getFilesDir()); assertNotNull(getInstrumentation().getContext().openFileInput("tst.txt")); assertNotNull(getInstrumentation().getContext().openFileOutput("out.txt", Context.MODE_PRIVATE)); 

Но я считаю, что более удобным способом предоставить данные для тестирования проекта является использование assets тестового проекта, где вы можете просто сохранить некоторые файлы и открыть их:

 assertNotNull(getInstrumentation().getContext().getAssets().open("asset.txt")); 

Или если вы хотите сохранить некоторые результаты тестов в файл, вы можете использовать ExternalStorage :

 File extStorage = Environment.getExternalStorageDirectory(); assertNotNull(extStorage);