最简单的方法来模拟没有可用磁盘空间的情况?

Ily*_*man 31 php apache testing macos diskspace

我需要在没有剩余磁盘空间的情况下测试我的Web应用程序,即我无法再写入任何文件.但我不想用垃圾填满我的硬盘只是为了确保没有剩余的空间.我想要的是用特定的过程(实际上是一个PHP应用程序)来模拟这种情况.

实际上,暂时禁止磁盘写入进程必须足够.

最简单的方法是什么?我正在使用带有内置Apache/PHP软件包的Mac OS X 10.6.2.谢谢.

编辑:磁盘可用空间检查不可靠,因为它可以随时更改.许多页面同时提供.检查时可以有足够的可用空间,但是当你实际写东西时没有空间.此外,检查磁盘可用空间将需要在我写入文件的任何地方更改代码,这不是我想要的:-)最后,这个解决方案与我正在尝试测试的完全相反:我的应用程序将在何时表现它不能再写了.

Ham*_*jan 28

我打赌你也可以创建自己的.dmg文件,文件系统大小...说2Mb并写入它.如果这样可行,那么它非常容易进行测试 - 您只需安装它并切换测试路径即可.如果dmg足够小,你甚至可以将它上传到源代码控件.

  • 或使用符号链接. (4认同)

rye*_*guy 13

当我需要这样做时,我创建了一个虚拟机,其中有足够的空间分配给虚拟磁盘.


Gor*_*don 5

无需使用预先填充的虚拟文件系统.
使用disk_free_space()嘲笑文件系统

disk_free_space() - 给定包含目录的字符串,此函数将返回相应文件系统或磁盘分区上可用的字节数.

要模拟,只需将函数包装到FileSystem类中.然后将它注入到您的类中,将保存作为依赖项并在执行实际保存之前检查驱动器是否已满.在你的UnitTest中,只需用模拟完整文件系统的类替换常规类,你就完成了.这样,无论何时想要重新运行测试,都不必重新创建完整的磁盘驱动器或将驱动器与项目文件保持在一起,例如

class MyFileSystem
{
    public static function df($drive)
    {
        return disk_free_space($drive);
    }
}
Run Code Online (Sandbox Code Playgroud)

并模拟完整的FileSystem做

class MyFileSystemFull
{
    public static function df($drive)
    {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果要重置函数以始终返回0,则可以使用RunKit Pecl扩展并执行:

runkit_function_redefine('disk_free_space','string','return 0;');
Run Code Online (Sandbox Code Playgroud)

作为对vfsStream的另一种看法:

vfsStream是虚拟文件系统的流包装器,可能有助于单元测试模拟真实文件系统.它可以与任何单元测试框架一起使用,如PHPUnit或SimpleTest.

  • 我对于php部分非常不称职,但这听起来像是在嘲笑你的依赖,这正是我试图做的事情. (3认同)