【发布时间】:2015-10-20 16:04:40
【问题描述】:
我编写了一个(除其他外)将文件写入磁盘的安卓应用程序。现在我想知道当文件系统运行存储空间不足时会发生什么。我想例如java.io.FileOutputStream.write() 会抛出一个IOException,我必须抓住它。
问题是,我不想依赖我的超级忍者能力——我可能忘记在某处放置 try-catch 或者没有正确处理它。因此,我想测试这个场景。
遗憾的是,我找不到任何关于这方面的良好做法的消息 - 甚至在 SO 上也没有。
当然,我用这样的方式手动填充文件系统:
size = N
dir = /some/path
data = generateDataForSize(size)
while( write(data, dir) );
while( round(size/=2) > 1 )
write(generateDataForSize(size), dir)
write() 将生成不同的文件或附加到单个文件。 generateDataForSize() 和大尺寸可能存在一些问题,但我们暂时将其放在一边。
让我很头疼的是,我必须把它放在我的应用程序的某个地方,而且我必须清理那个 $%#!手动上去。好的,如果我把它放在它自己的目录中,我可以用 adb shell 上的一行来丢弃整个东西。
无论如何,有没有更简单的方法可以解决我错过的问题? android 是否为此提供了任何机制,例如临时限制每个应用程序可用的存储空间?任何用于单元测试或 android SDK 工具的集成解决方案?其他人(你)如何做到这一点?
TL;DR:如何有效地填充 fs 以测试写满时写入 fs 的情况。
编辑:我正在未植根的真实设备上进行测试。即使 HAXM 启动并运行,模拟器也非常缓慢。遗憾的是,使用模拟器不是一种选择。
不过,Tasos Moustakas 暗示限制 AVD 的可用空间非常棒。我想如果您避免 android:installLocation="preferExternal" 的问题并将您的应用程序移动到 SD / 将文件写入有限的 SD,这是一个可以接受的解决方案。
接受的答案几乎就是我最终所做的。但这仍然需要一些手动工作,因此请随时发布更多答案。
【问题讨论】:
-
首先,您在哪里测试您的应用程序? AVD 模拟器还是物理设备?
标签: java android testing filesystems