代码之家  ›  专栏  ›  技术社区  ›  Ilya Birman

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

  •  31
  • Ilya Birman  · 技术社区  · 16 年前

    实际上,暂时禁止向进程写入磁盘就足够了。

    编辑

    13 回复  |  直到 16 年前
        1
  •  28
  •   Hamish Grubijan    16 年前

    我打赌您也可以创建自己的.dmg文件,文件系统大小为。。。说2Mb,然后写信给它。如果这是可行的,那么测试就非常容易了——您只需安装它并切换测试路径。如果dmg足够小,您甚至可以将其上载到源代码管理。

        2
  •  14
  •   ryeguy    16 年前

        3
  •  5
  •   Gordon Haim Evgi    15 年前


    使用 disk_free_space() 模拟文件系统

    此函数将返回数字 相应的文件系统或磁盘 隔断

    要进行模拟,只需将函数包装到文件系统类中。然后将其作为依赖项注入到进行保存的类中,并在实际保存之前检查驱动器是否已满。在单元测试中,只需将常规类替换为模拟完整文件系统的类,就完成了。这样,您就不必在需要重新运行测试时重新创建完整的磁盘驱动器或始终将驱动器与项目文件一起保存,例如。

    class MyFileSystem
    {
        public static function df($drive)
        {
            return disk_free_space($drive);
        }
    }
    

    要模拟完整的文件系统,请执行以下操作:

    class MyFileSystemFull
    {
        public static function df($drive)
        {
            return 0;
        }
    }
    

    如果希望重载函数以始终返回0,可以使用RunKit Pecl扩展并执行以下操作:

    runkit_function_redefine('disk_free_space','string','return 0;');
    

    作为另一种选择 vfsStream :

        4
  •  4
  •   Cheeso    16 年前

    我使用了一个拇指驱动器作为进程的音量。

        5
  •  3
  •   Noufal Ibrahim    16 年前

    或者创建一个空文件(一个小文件),将其格式化为ext3分区,使用环回设备挂载它,并在其中运行PHP应用程序。这将更接近于空间不足的物理磁盘。

        6
  •  2
  •   Pekka    16 年前

    一个快速而简单的解决方案是为专门的用户帐户设置配额。 Quota support on Mac OS X

        7
  •  2
  •   Norman Ramsey    16 年前

    在常规文件(大小有限)中创建一个磁盘/文件系统映像,并循环装载它。

        8
  •  1
  •   Mathias    16 年前

        9
  •  0
  •   knittl    16 年前

    递归删除webfolder、应用程序要写入的文件夹和文件中的所有写入权限。

        10
  •  0
  •   bbum    16 年前

    不 启动卷和已启动

    如果它是启动驱动器,系统很可能会死机或崩溃后,满磁盘无论如何。或者,如果没有,它的行为将不稳定。

    如果您谈论的是数据卷,那么您的 只有 正在写入的应用程序?如果有其他应用程序正在编写,您会这样做吗 知道 他们肯定会失败吗?

    磁盘空间不足 永远不会发生。放下一个2TB驱动器,当它达到50%容量时发出警报。实施起来要便宜得多(除非你的时间是免费的),而且要可靠得多。

        11
  •  0
  •   Justin Granger    16 年前

        12
  •  0
  •   treze    15 年前

    我认为模拟课堂的想法是正确的方向。我通常也这样测试我的代码。如果可能的话,我会使用一个框架,而不是自己编写这些类。我对PHP不太了解(更多地使用C#和Java编程),但这似乎很好。 https://github.com/padraic/mockery

        13
  •  -1
  •   AlastairDewar    16 年前

    无论您在哪里获得剩余的磁盘空间,只需对其进行注释,然后使用替换值(如0.1、0、-1)运行应用程序

    推荐文章