PHPUnit:我如何模拟这个文件系统?

2024-04-28

考虑以下场景(这不是生产代码):

 class MyClass {
    public function myMethod() {
        // create a directory
        $path = sys_get_temp_dir() . '/' . md5(rand());
        if(!mkdir($path)) {
            throw new Exception("mkdir() failed.");
        }

        // create a file in that folder
        $myFile = fopen("$path/myFile.txt", "w");
        if(!$myFile) {
            throw new Exception("Cannot open file handle.");
        }
    }
}

对啊,那有什么问题吗?代码覆盖率报告未覆盖此行:

throw new Exception("Cannot open file handle.");

这是正确的,但由于我在逻辑上创建了上面的文件夹,因此似乎不可能fopen()失败(除非在极端情况下,例如磁盘处于 100%)。

我可以忽略代码覆盖率中的代码,但这是一种作弊。有什么方法可以模拟文件系统以便它可以识别myFile.txt并模拟文件系统无法创建文件?


vfsStream is a stream wrapper for a virtual filesystem这在单元测试中非常有用,可以模拟真实的文件系统。您可以从安装它composer https://packagist.org/packages/mikey179/vfsStream.

更多信息请访问:

https://github.com/mikey179/vfsStream https://github.com/mikey179/vfsStream

https://phpunit.de/manual/current/en/test-doubles.html https://phpunit.de/manual/current/en/test-doubles.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHPUnit:我如何模拟这个文件系统? 的相关文章

  • 关闭旧的 php websocket

    我在用PHP Websockets https github com ghedipunk PHP Websockets创建一个简单的聊天服务器 当我第一次运行在我的服务器上创建 websocket 的 php 脚本时 一切正常 如果脚本由于
  • 在订单项目视图中显示自定义产品数据

    我在添加到购物车时遇到问题 我有一个具有不同定制条件的产品可供选择 当客户选择特定选项时 它添加到购物车 当客户选择另一种选择并添加时 它显示为购物车中的第二件商品 这没关系 但付款后 订单在第 1 项和第 2 项下均显示自定义选项 但没有
  • DOMDocument PHP 内存泄漏

    在 MAC 上的 MAMP 下运行 PHP 5 3 6 内存使用量每调用 x 次 3 到 8 次 就会增加 直到脚本因内存耗尽而终止 我该如何解决 libxml use internal errors true while true dom
  • 是否需要使用fetch_object或fetch_array?

    我最近发现我可以打印数据库中的结果而不使用mysqli fetch object功能 例如 假设我们有一个简单的 sql select 语句 可以使用如下所示的语句来执行 conn mysqli connect localhost root
  • Laravel 验证:对 null 的成员函数调用失败()

    这段代码几天前还可以工作 但我似乎做了一些事情导致它崩溃 我有这条路线 Route post admin routemanagement AdminController addRoute 看起来像这样 public function add
  • 如何使用 Angular4 进行 Codeigniter 视图?

    首先 我的 PHP Codeigniter 项目当前在服务器上运行 然后我在服务器上安装了最新的 Angular4 CLI Typescript 但我不知道如何与Codeigniter项目集成 如何像 AngularJS 一样在 Codei
  • MySQL JSON 存储与两个表

    与使用单独的元表相比 使用 JSON 在表中存储数据有什么好处吗 这是原始架构 Users Table UserId Username Etc 5 John Avatar Table Id UserId ImageName ImageTyp
  • Laravel 所有会话 ID 与 Redis 驱动程序

    在我的应用程序中 我希望允许某些用户能够注销除他 她之外的所有其他用户 当会话驱动程序设置为文件时 我已经完成了此功能 但现在我使用 redis 作为会话驱动程序 并且我无法找到任何方法来列出所有当前会话 就像我在文件时所做的那样司机 问题
  • 将数组文字传递给 PostgreSQL 函数

    我有一个包含 select 语句的 Postgres 函数 我需要使用包含字符串值数组的传入变量添加条件 CREATE OR REPLACE FUNCTION get questions vcode text RETURN return v
  • 在另一列中查找重复值时,如何将列数据存储为逗号分隔值? [复制]

    这个问题在这里已经有答案了 如果任何公司的产品都相同 我必须组合或内爆子数组值 预期输出应该类似于 0 gt array company gt 1 6 product gt 5 我的数组是 array 0 gt array company
  • 通过自定义文本更改库存文本中的 WooCommerce 产品可用性

    我想更改库存数量后面的 有库存 文字 我尝试在我的 WordPress php 编辑器中添加此 PHP 代码 但它不起作用 你知道为什么吗 谢谢 add filter woocommerce get availability text bb
  • PHP 中的循环数组

    我创建了一个由部分和问题组成的数组 如何循环浏览各个部分并显示每个部分的嵌套问题 这是我创建数组的方式 db db open query SELECT FROM assessment selections WHERE assessment
  • 无循环按键对多维数组求和

    我有这个 Array 0 gt Array f count gt 1 uid gt 105 1 gt Array f count gt 0 uid gt 106 2 gt Array f count gt 2 uid gt 107 3 gt
  • Mailgun 内联图像,它是如何工作的?

    我正在使用 mailgun 并希望将图像添加到我的时事通讯中 现在我这样做了 mg gt sendMessage domain array from gt email protected cdn cgi l email protection
  • 为什么 opcache 没有刷新?

    我用guzzlehttp guzzle封装在拉拉维尔 8 升级到后PHP 8 I get Symfony Component ErrorHandler Error FatalError Invalid opcode 117 2 0 in f
  • Laravel 5.2 如何更新迁移而不丢失数据

    我使用的是 laravel 5 2 我通常会根据项目要求更新数据库 所以我希望在不丢失数据库记录的情况下执行此操作 我的意思不是如何为我的数据库播种 我的意思是当我的数据库处于活动状态并且我想更新它时抛出 laravel 迁移 我正要扔La
  • 解析 PHP 多维数组

    这里 下面给出 是我正在做的一些非常简单的 php 解析多维数组的事情 我只是搜索 突出显示 键 然后将一些键值对存储在另一个数组中 有没有更好的方法来实现这一点 我的意思是关于性能 而不是有 n 个 foreach 循环来达到你想要的效果
  • PHP:检查任何基于拉丁语的语言中的字母字符?

    使用 PHP 我想检查一个字符串仅包含字母字符 我不想允许任何数字或特殊字符 例如 ctype alpha 对于这个目的来说似乎很棒 问题是我想允许重音字母 例如法语等 例如 我想允许 L rien 我知道ctype alpha 可以与se
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • Google Analytics PHP(发送信息)

    大意 我正在开发一个项目 我需要使用 Google Analytics 服务器端 我不需要检索信息 但我需要发送信息 我最终可以发送 js 脚本客户端 但在这种情况下它不是一个选项 以下大多数链接都非常旧 2012年 检索 不是我需要的 我

随机推荐