1

Я работаю над приложением для обработки изображений. Я хочу реализовать модульное тестирование для связанных с Bitmap функций. Мне также нужно увидеть выходной битмап.Как модульный тест android.graphics.Bitmap и BitmapFactory?

Я попробовал два варианта:

  1. запустить тест в test/java так что я могу сбросить выходное изображение в файл на моем Mac и открыть его вручную. Но у меня есть android.graphics.BitmapFactory not mocked.

  2. запустить тест в androidTest/java так BitmapFactory полностью реализован, но:

    • я получил access denied при попытке вытащить файл, используя adb pull с помощью mockContext.openFileOutput(fileName, Context.MODE_PRIVATE)
    • Я не могу написать на внешний каталог, потому что я не могу предоставить доступ для записи без использования и действия с использованием Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) (EDIT: я был не прав, вы можете предоставить хранилище READ и WRITE с помощью утилиты adb)
    • Если я заработал, я не знаю, как подключиться к задаче градации для автоматизации команда pull// или большой доступ к записи во время выполнения.

Так как проверить Bitmap код, связанный? У меня нет вариантов!

+0

Группа имеет те же привилегии, что и приложение, что это тестирование. Для модульного теста должно быть возможно сделать снимок из частного хранилища и перенести его в общедоступное хранилище. Можно было бы даже перенести его на файловый сервер. – DeeV

ответ

0

Для приложения, связанного с растровым изображением, главное, чтобы управлять этим является потребление памяти устройством.

Поэтому вам необходимо правильно управлять растровым изображением с помощью некоторого механизма кеширования.

Для тестирования вы можете использовать сервис мониторов с разделением памяти в студии Android.

+0

Я не понимаю, что вы отвечаете – RenaudBlue

+0

Вы хотите протестировать реализацию растрового изображения с помощью устройства? – ViramP

+0

Нет, я хочу протестировать сложную операцию с участием android.graphics.Bitmap – RenaudBlue

1

То, что я наконец-то сделал:

  1. Создание двух Gradle Задачи, которые можно вызвать вручную до и после испытания.

    • в imagingBeforeTest является предоставление разрешения на доступ для хранения и очистки каталогов
    • imagingAfterTest вытягивает содержимое каталога на устройстве в локальном каталоге сборки, так что вы можете изучить его позже.
  2. Создайте константу, указывающую на тот же каталог, который я определил в задачах Gradle.

Java константа:

public static final File ANDROID_TEST_DIR = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "mypackage"); 

Gradle файл: приложение Test

def androidPlugin = project.plugins.findPlugin("android") 
def adb = androidPlugin.sdkHandler.sdkInfo?.adb 
def mypackageDir = '/storage/emulated/0/Download/mypackage' 

//Grant necessary permissions and create storage dir 
task imagingBeforeTest(type: Exec) { 
    commandLine "$adb", 'shell', 'pm', 'grant', 'fr.mycompany.mypackage', 'android.permission.READ_EXTERNAL_STORAGE' 
    commandLine "$adb", 'shell', 'pm', 'grant', 'fr.mycompany.mypackage', 'android.permission.WRITE_EXTERNAL_STORAGE' 
    commandLine "$adb", 'shell', 'rm', '-r', "$mypackageDir" 
    commandLine "$adb", 'shell', 'mkdir', "$mypackageDir" 
} 

//Pull content of storage dir to the local build directory 
task imagingAfterTest(type: Exec) { 
    // Alias is /storage/self/primary/Download/mypackage 
    File testDir = new File(rootProject.buildDir.absoluteFile, "/pulledTest") 
    testDir.mkdir() 
    commandLine "$adb", 'pull', "$mypackageDir", testDir.getAbsolutePath() 

} 
Смежные вопросы