有没有办法在 PHPUnit 中测试 STDERR 输出?

2024-01-10

我有一个类输出到STDERR,但我无法找到让 PHPUnit 测试其输出的方法。

班上,PHPUnit_Extensions_OutputTestCase,也没起作用。


我没有看到缓冲的方法stderr尽你所能stdout,所以我会重构你的类,将执行实际输出的调用移至新方法。这将允许您在测试期间模拟该方法,以使用缓冲的方法验证输出或子类。

例如,假设您有一个列出目录中文件的类。

class DirLister {
    public function list($path) {
        foreach (scandir($path) as $file) {
            echo $file . "\n";
        }
    }
}

首先,提取调用echo。使其受到保护,以便您可以覆盖和/或模拟它。

class DirLister {
    public function list($path) {
        foreach (scandir($path) as $file) {
            $this->output($file . "\n");
        }
    }

    protected function output($text) {
        echo $text ;
    }
}

其次,在测试中模拟或子类化它。如果您有一个简单的测试或者不希望有很多调用,则模拟很容易output。如果您有大量输出需要验证,则通过子类化来缓冲输出会更容易。

class DirListTest extends PHPUnit_Framework_TestCase {
    public function testHomeDir() {
        $list = $this->getMock('DirList', array('output'));
        $list->expects($this->at(0))->method('output')->with("a\n");
        $list->expects($this->at(1))->method('output')->with("b\n");
        $list->expects($this->at(2))->method('output')->with("c\n");
        $list->list('_files/DirList'); // contains files 'a', 'b', and 'c'
    }
}

压倒一切output缓冲所有$text进入内部缓冲区作为读者的练习。

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

有没有办法在 PHPUnit 中测试 STDERR 输出? 的相关文章

  • 如何从 Laravel 中的表中选择所有列名称?

    我试图从表中获取所有列名Teller 功能 public function getTableColumns tables return DB select DB raw SELECT COLUMN NAME DATA TYPE COLUMN
  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛
  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • Laravel 从 5.6 升级到 Laravel 6

    我有一个项目https github com javedbaloch4 Laravel Booking https github com javedbaloch4 Laravel Booking发展于Laravel 5 6现在我想将其升级到
  • 删除PHP字符串中所有不匹配的字符?

    我有一个文本 我想从中删除所有不属于以下字符的字符 所需字符 0123456789 abcdefghijklmnopqrstuvwxyz n 最后一个是我确实想保留的 n 换行符 要匹配除列出的字符之外的所有字符 请使用反转字符集 http
  • 在 php 中为类自动生成 getter 和 setter 的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常创建一个包含一些私有变量的类 当设置此类的实例时 应该可以使用 getter 和 setter 填充该类的所有变量 有没有一种简单的方法可
  • 是否可以使用 PHP 重定向发送 POST 数据?

    更新 这不是重复的如何使用 PHP 发送 POST 请求 https stackoverflow com questions 5647461 how do i send a post request with php 那里的解决方案对我不起
  • 使用 preg_replace 仅替换第一个匹配项

    我有一个结构类似于以下的字符串 aba aaa cba sbd dga gad aaa cbz 该字符串每次都可能有点不同 因为它来自外部源 我只想替换第一次出现的 aaa 但其他人则不然 是否可以 可选的第四个参数预替换 http php
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • 使用 SSL 证书验证 Web 浏览器

    是否可以使用 ssl 证书对 Web 浏览器进行身份验证 假设我在应用程序中存储私钥 有什么方法可以从浏览器读取密钥并尝试基于该私钥进行身份验证 您可以使用 SSL TLS 客户端证书身份验证来对浏览器 用户进行身份验证 服务器必须请求客户
  • PHP 脚本可以在终端中运行,但不能在浏览器中运行

    我正在尝试执行exec命令 但我遇到了问题 当我运行以下代码时 当我通过浏览器运行它时它不起作用 但如果我把输出 str将其复制并粘贴到终端中 它工作得很好 造成这种情况的原因是什么 我该如何解决 目前我正在运行localhost php
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • php 错误 fopen(): 文件名不能为空

    发送带有附件代码的电子邮件工作正常 最近我们已将文件传输到另一个托管服务器 idk 发生了什么 它显示以下错误 警告 fopen 第 106 行 home hugerecruitmetnt public html validatecva p
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 为什么 Composer 降级了我的包?

    php composer phar update这样做了 删除了 2 3 0 软件包并安装了整个 2 2 5 Zend Framework php composer phar update Loading composer reposito
  • 简单的 PHP 表单:电子邮件附件(代码 Golf)

    想象一下 一个用户想要在其网站上放置一个表单 该表单将允许网站访问者上传一个文件和一条简单的消息 该消息将立即通过电子邮件发送 即 该文件未存储在服务器上 或者如果该文件存储在服务器上 仅暂时 作为文件附件 并在邮件正文中添加注释 查看更多
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • 将结构传递给 dbus 方法的工具?

    我创建了一个守护进程 该守护进程提供了一个 dbus 接口 其方法之一具有如下签名 uu 这是一个由两个组成的结构uint32 fields 是否有一个现成的工具可供我调用该方法并传入结构 dbus send and d feet似乎没有帮
  • 接受多个输入(如 +、- 和数字平方)的计算器。从文本文件中提取信息

    我的代码应该能够在一个文本文件中打印多个不同的方程 导致方程停止并转到下一行的字符 并且 字符取数字的平方 然而 该代码只打印一个方程然后停止 有人告诉我 我需要在已经建立的循环上再循环一次 但我不知道该怎么做 谢谢 INPUT 5 5 4
  • 非类型化 npm 模块的 TypeScript 自定义声明文件

    我正在使用一个名为的 React 组件shiitake https github com bsidelinger912 shiitake从 npm 到我使用 TypeScript 的项目 该库没有 TypeScript 声明 所以我想我应该
  • 有没有更快的方法来检查这是否是有效日期?

    有没有更快的方法来简单地捕获如下所示的异常 try date new DateTime model Date Year model Date Month 7 multiplier 7 dow 2 catch Exception This i
  • Android 从 java 类回调 Activity

    如何从 Java 类中回调 Activity Example public class TestClass String text Test public TestClass Context context startActivity ne
  • C 中哪些运算符的优先级错误?

    In the 介绍 K R C 2E 部分有这样一段 C 与任何其他语言一样 也有其缺陷 一些运算符的优先级错误 这些是哪些运营商 他们的优先顺序怎么错了 Is this https www lysator liu se c dmr on
  • Bash 脚本等待(如果已在运行),然后继续

    我有一个 bash 脚本 一旦进程完成 程序就会调用该脚本 我需要一种方法让 bash 脚本在其自身的另一个实例正在运行时等待退出 然后再继续 我不能只使用锁定文件并退出 因为该脚本不会按任何定期计划再次调用 我不能只使用锁定文件并退出 因
  • 使用转置表进行 Alpha-beta 剪枝,迭代深化

    我正在尝试实现通过换位表增强的 alpha beta 最小 最大修剪 我使用这个伪代码作为参考 http people csail mit edu plaat mtdf html abmem http people csail mit ed
  • NSTableView 上的圆角

    我有一个类似于的自定义视图子类NSBox绘制圆形框背景 问题是 如果我放置一个像NSTableView在盒子视图中 它不会夹到圆角 有没有什么方法可以把角变圆NSTableView及其父滚动视图 我还没有尝试过使用表视图 但尝试过使用其他控
  • 无法从 ASP.NET Core 2.0 中的 IdentityUser 和 IdentityRole 继承

    我正在尝试完成对 NET Core 2 0 的更新 但弹出一些错误 问题 我有两个类 ApplicationRole 和 ApplicationUser 它们从 IdentityRole 和 IdentityUser 继承一些属性 更新到
  • 使用Python进行3D绘图

    我正在尝试用 python 绘制曲面 我有一个包含 N N 值的表 我创建了两个向量 X 和 Y 每个向量都有 N 个元素 当我尝试绘制此图时 出现错误 ValueError total size of new array must be
  • 为什么打字稿不能在这里推断类型参数“T”的“T[key of T]”类型?

    我正在尝试编写一个传递密钥的通用类key对应于构造时一组已知接口之一的键 并且稍后可以传递对象thing和类型安全的访问thing key 这就是我所拥有的 interface AB a string b number interface
  • 为什么 CLLocationManager 委托在 iPhone SDK 4.0 中没有被调用?

    这是我的 AppDelegate 类中的代码 BOOL application UIApplication application didFinishLaunchingWithOptions NSDictionary launchOptio
  • 集成 Liferay 和 Alfresco

    我使用 Liferay 版本 5 2 3 和 Alfresco Community Edition 我想将 Alfresco 与 Liferay 集成 我想将 Alfresco 显示为 Liferay 中的一个 portlet 有人可以告诉
  • Visual Studio 升级建议 2008 / 2010 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Java 10 时忽略 Jaxb 包信息

    我正在努力解决这个问题 任何信息将不胜感激 我有一个项目 它已经使用 JAXB 一段时间来从 XML 架构构建 Java 模型并使用该模型 现在它已经在 J ava 8 中运行了一些 但是 我已经升级到 Open JDK 10 当我尝试将
  • Scriptaculous / Prototype 模态窗口

    我想使用原型和 scriptaculous 制作一个模式窗口 我想知道是否有任何网站有教程 或者是否有人可以给我一些想法从哪里开始 我不需要预建的 除了 Control Window 之外 我还发现了其他一些 http okonet ru
  • 使用什么来代替 document.write 或 InnerHTML?

    假设我有这样的 html 代码
  • Inno Setup中的通配符(测试固定字符串前缀后是否有值)

    Inno Setup 是否有一些通配符 我正在尝试遍历字符串 如果我正在搜索某些值 程序应该返回 1 我正在使用Pos 函数已经满足了我的需要 但我的问题是我正在搜索的字符串部分不是静态的 所以我需要一些通配符 例如 可以替换一个或多个字符
  • 有没有办法在 PHPUnit 中测试 STDERR 输出?

    我有一个类输出到STDERR 但我无法找到让 PHPUnit 测试其输出的方法 班上 PHPUnit Extensions OutputTestCase 也没起作用 我没有看到缓冲的方法stderr尽你所能stdout 所以我会重构你的类