2014-10-10 2 views
0

Это очень простой вопрос, на который я не могу найти решение. У меня довольно сложное приложение для Android, которое использует камеру и делает некоторые манипуляции с изображениями. Теперь я хочу написать Unit-тесты для некоторых функций, но я не могу загрузить файл.Местоположение файла для модульного тестирования

В тестовом проекте Android, где следует вставлять изображение для проверки и как загрузить это изображение в объект File? У меня есть нормальный класс junit.framework.TestCase, который должен отправить File классу для тестирования. Заранее спасибо!

ответ

1

Это может быть не лучшее решение, так как оно может сильно раздуть ваш проект. Однако, за исключением написания кода для загрузки изображения в ваши тестовые примеры, я не уверен, какой другой подход может быть.

Просто у меня есть «тестовые» чертежи в моих ресурсах, и я загружаю их как растровые изображения, а затем храним их где-то на диске, чтобы в конце концов ссылаться на них в моих тестах. Это код, который я использую:

public File saveResourceImageToExternalStorage(Activity activity, String picFileName, int imageId) 
{ 
    Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), imageId); 
    File picFile = null; 
    OutputStream os = null; 
    try 
    { 
     picFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), picFileName); 

     picFile.createNewFile(); 

     os = new FileOutputStream(picFile); 

     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    return file; 
} 

Возможно, вы захотите сделать этот способ более надежным.

Наконец, вы можете просто спрятать свои тестовые изображения в своей папке с ресурсами для своего проекта. Тогда вы можете получить их из папки вашего активов с использованием getAssets() в деятельности или используя путь, который должен быть чем-то вроде file:///android_asset/your_file_name.jpg

EDIT

Я думаю, что лучшее решение, после некоторых исследований, можно было бы добавить ваш файлы к активам вашего тестового проекта и используйте InputStream input = this.getContext().getAssets().open("file.jpg");. Вы должны вызвать это из класса, который наследуется от InstrumentationTestCase или, я полагаю, ActivityInstrumentationTestCase2. Затем вы можете манипулировать входным потоком, как вам нужно

+0

Это определенно не идеально. В идеале я хотел бы иметь изображения в тестовом проекте, но, увы, кажется, что это то, что я должен делать. –

+0

После небольшого исследования кажется, что было бы намного проще добавить ваши файлы в активы вашего тестового проекта и использовать InputStream input = this.getContext(). GetAssets(). Open ("file.jpg") ;. Вы должны вызвать это из класса, который наследуется от InstrumentationTestCase или, я полагаю, ActivityInstrumentationTestCase2. Затем вы можете манипулировать входным потоком, как вам нужно. – maraci

+0

Спасибо. Это тот тип ответа, который я искал. Не могли бы вы дать ответ или обновить свой ответ, чтобы я мог его пометить. –