我正在开发一个成像应用程序。 我想为Bitmap相关函数实现单元测试。 我还需要看输出Bitmap。
我尝试了两个选项:
在test/java
中运行测试,这样我就可以将输出图像转储到Mac上的文件中并手动打开。但我得到了android.graphics.BitmapFactory not mocked
。
在androidTest/java
中运行测试,因此BitmapFactory已完全实现,但是:
access denied
使用adb pull
mockContext.openFileOutput(fileName, Context.MODE_PRIVATE)
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
授予写访问权限(编辑:我错了,您可以使用adb实用程序授予READ和WRITE存储空间)那么如何测试与Bitmap相关的代码呢?我没有选择权!
答案 0 :(得分:1)
我最终做了什么:
创建两个我可以在测试前后手动调用的Gradle任务。
创建一个指向我在Gradle任务中定义的目录的常量。
Java常量:
public static final File ANDROID_TEST_DIR = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "mypackage");
Gradle文件:
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()
}
答案 1 :(得分:0)
对于位图相关应用程序主要需要管理的是设备的内存消耗。
因此,您需要使用一些缓存机制正确管理位图。
对于测试,您可以在Android studio中使用监视器服务和内存部分。