如何测试 PHP 程序? [复制]

2023-12-22

有没有办法测试程序代码?我一直在研究 PHPUnit,它似乎是创建自动化测试的好方法。然而,它似乎是面向面向对象的代码,是否有过程代码的替代方案?

或者我应该在尝试测试网站之前将网站转换为面向对象?这可能需要一段时间,这有点问题,因为我没有太多时间可以浪费。


您可以使用 PHPUnit 测试程序代码。单元测试与面向对象编程无关。他们测试代码单元。在面向对象中,代码单元是方法。在程序化 PHP 中,我猜它是一个完整的脚本(文件)。

虽然 OO 代码更容易维护和测试,但这并不意味着过程 PHP 无法测试。

例如,您有以下脚本:

simple_add.php

$arg1 = $_GET['arg1'];
$arg2 = $_GET['arg2'];
$return = (int)$arg1 + (int)$arg2;
echo $return;

你可以这样测试:

class testSimple_add extends PHPUnit_Framework_TestCase {

    private function _execute(array $params = array()) {
        $_GET = $params;
        ob_start();
        include 'simple_add.php';
        return ob_get_clean();
    }

    public function testSomething() {
        $args = array('arg1'=>30, 'arg2'=>12);
        $this->assertEquals(42, $this->_execute($args)); // passes

        $args = array('arg1'=>-30, 'arg2'=>40);
        $this->assertEquals(10, $this->_execute($args)); // passes

        $args = array('arg1'=>-30);
        $this->assertEquals(10, $this->_execute($args)); // fails
    }

}

对于这个例子,我声明了一个_execute方法接受 GET 参数数组,捕获输出并返回它,而不是一遍又一遍地包含和捕获。然后,我使用 PHPUnit 的常规断言方法来比较输出。

当然,第三个断言将失败(尽管取决于 error_reporting),因为测试的脚本将给出一个未定义索引 error.

当然,测试的时候,应该把error_reporting放到E_ALL | E_STRICT.

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

如何测试 PHP 程序? [复制] 的相关文章

  • jetty服务器运行php代码

    我想配置让jetty运行PHP文件 但到目前为止还没有成功 我在 Eclipse IDE 中安装了 Jetty WTP 工具 当我启动 Jetty 服务器时 我得到了例外 java lang ClassNotFoundException o
  • 将 PHP 变量传递给 Jquery 而不刷新

    对于我缺乏 jquery 知识 我预先表示歉意 在我正在构建的这个网站中 向用户展示了许多代表植物的缩略图 单击缩略图时 将启动 jquery 弹出窗口 我希望能够做的是将一个包含植物 ID 的 php 变量传递给 jquery 弹出窗口以
  • WordPress 中的 jQuery.post()

    我目前正在为 Wordpress 编写一个聊天框插件 该插件使用 jQuery post 方法将数据发送到 php 文件 以便将输出写入 html 文件 该文件又将使用 jQuery 加载到聊天窗口 在我用来将聊天日志写入html文件的ph
  • 如何覆盖 suhosin 最大值?

    suhosin 正在过滤一个重要的 GET 参数 当以下方法不起作用时 如何覆盖 suhosin public html php ini suhosin suhosin get max value length 2048 将 suhosin
  • 如何从 Visual Studio 以调试模式运行 NUnit?

    我最近正在为我一直在研究的一些 C 构建一个测试框架 我在工作区中设置了 NUnit 和一个新项目来测试该组件 如果我从 Nunit v2 4 加载单元测试 一切都会很好 但我已经到了在调试模式下运行并设置一些断点非常有用的地步 我已经尝试
  • 需要有关使用 PHP 在 mysql 数据库中插入逗号分隔数据的帮助

    数据库表中已有的演示数据 INSERT INTO csvtbl ID SKU Product Name Model Make Year From Year To VALUES 1 C2AZ 3B584 AR Power Steering P
  • 如何将日期/时间从 24 小时格式转换为 12 小时 AM/PM? [复制]

    这个问题在这里已经有答案了 我从数据源中获取以下格式的日期和时间 19 24 15 06 13 2013 我需要将其转换为 12 小时 AM PM 格式 不带秒 所以上面的时间是晚上 7 24 日期应保留为 mm dd yyyy 格式 在
  • 如何在 Laravel 中编写联合查询?

    我正在使用 laravel 5 0 并且我有 mysql 查询 SELECT surat masuk id surat surat masuk nomor surat FROM surat masuk WHERE EXISTS SELECT
  • Kohana_Exception [ 0 ]:需要有效的 cookie salt。请设置 Cookie::$salt

    我正在学习本教程 http kowsercse com 2011 09 04 kohana tutorial beginners http kowsercse com 2011 09 04 kohana tutorial beginners
  • 如何在 Cakephp 3 中创建按字段集分组的多个复选框

    我在阅读本文档时遇到问题 Cakephp3 Cookbook 表单 创建选择选择器 http book cakephp org 3 0 en views helpers form html creating select pickers我尝
  • 代码点火器 JSON

    你好 我使用 codeigniter 然后我从控制器中的数据库中回显输出 然后在我的视图文件中执行以下操作 但它没有显示任何内容 S 我的模型文件 function forumList this gt db gt select oversk
  • PHP Netbeans:xdebug 在每个 include() 或 require() 上停止

    我刚刚发现使用 netbeans IDE 中集成的 xdebug 进行 PHP 调试 我认为这很棒 没有它我怎么生活 但有一个问题 如果我在代码深处设置了一个断点 我必须在到达断点之前多次按 继续 F5 因为脚本会在每个 include 和
  • Guice 字段注入不起作用(返回 null)

    我在使用 Guice 时遇到空值问题 接下来我将向您展示一个类似场景的示例 我知道字段注入是一种不好的做法 但我希望它在演示中像这样工作 我有一个名为B 这是我要注入的 class B Inject public B public void
  • zend 模块特定配置问题

    我使用 zend 框架构建 REST Web 服务 并且使用模块来分隔我的 api 版本 现在 我想为每个模块 v1 和 v2 都有一个单独的配置文件 主要用于指定单独的数据库连接 我有这样的目录结构 application modules
  • 何时以及为何应使用 $_REQUEST 而不是 $_GET / $_POST / $_COOKIE?

    标题中的问题 当所有 3 个都发生时会发生什么 GET foo POST foo and COOKIE foo exist 其中哪一个被包含到 REQUEST 我想说永远不会 如果我想通过各种方法设置某些内容 我会为每个方法编写代码以提醒自
  • 从 CodeIgniter 中的 URL 捕获哈希值 (#)

    我有一个看起来像的网址 mysite com transactions view 123456 效果很好 但是我的客户现在希望在 url 中包含 hashbang mysite com transactions view 123456 现在
  • PHP邮件功能有时可以工作

    我正在编写一个脚本 需要通过PHP邮件功能发送电子邮件 如下所示 它在向 gmail 帐户发送电子邮件时有效 但在我的域中的帐户却无效 我们正在运行 Exchange 服务器 截至目前 电子邮件是从 www server 发送的 有谁知道
  • php 崩溃后 mysql 表被锁定

    我有一个 MySQL DB 和一个 innoDB 表 我有一个 php 页面 用于连接 锁定表 进行一些更新 然后解锁表 PHP 页面通过 wamp 与 apache 一起提供 php页面将文件上传到数据库 我决定通过上传一个大小大于分配给
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • 如何在 Laravel 中创建一条包罗万象的路线

    我需要一个 Laravelroutes php将捕获所有流量到特定的条目example com premium section网站 以便我可以提示人们在访问优质内容之前成为会员 您还可以通过在参数上使用正则表达式来捕获 全部 Route g

随机推荐

  • PHP echo SQL 计数[重复]

    这个问题在这里已经有答案了 好的 所以我遇到了问题 我似乎无法在 PHP 中成功回显 SQL 计数 SQL SELECT TableA C COUNT FROM TableA JOIN TableB ON TableA C TableB D
  • 32位机器如何处理大于2^32的数字?

    I am trying to understand how calculations involving numbers greater than 232 happen on a 32 bit machine C code cat size
  • 部分类调试

    我已经为我的 xsd 自动生成的类创建了一个部分类 问题在于调试这个部分类 无法识别断点或者编译器不会在分部类中设置的断点处中断 Autogenerated class by xsd exe public partial class Cla
  • 如何使用 Rust 合并两个 JSON 对象?

    我有两个 JSON 文件 JSON 1 title This is a title person firstName John lastName Doe cities london paris JSON 2 title This is an
  • 如何获取 TFS WIQL 项目的所有用户以及团队迭代?

    我想让所有用户在项目中进行迭代 假设项目 Precient 有 9 个不同的用户 进行了 20 次迭代 所以我希望不同的用户具有项目中的所有迭代WIQL C 这与问题有关 WIQL 查询获取项目中的所有团队和用户 https stackov
  • IE9 忽略某些页面的 CSS?

    我有不同的网站提供服务 基本上运行相同的代码 一个页面可以正确呈现 而另一页面似乎没有可用的 CSS 当我打开损坏页面的 IE9 开发者控制台时 我看到 SEC7113 CSS was ignored due to mime type mi
  • 在在线正则表达式测试器中工作时,正则表达式无法在 Angular Validators.pattern() 中工作

    我已经在 Regex101 com 上编写并严格测试了正则表达式 但是当实现到我的 FormControl Validators pattern 方法中时 它显示了意外的行为 这是用于要邮寄的包裹的宽度输入 仅限正值 最多 2 位小数 最小
  • 从 npm 下载一个包作为 tar (不是将其安装到模块中)

    是否有一些 URL 可以让我从 npm 下载给定的包 作为 tarball 或其他东西 我需要最初上传到 npm 的确切文件 Using npm install例如 获取不同的生成的 package json 我想要已发布的确切原始文件集
  • 将 Gradle 5.3.1 升级到 6.5。旧版本下载依赖项正常,但在 6.5 上失败

    我已将问题简化为一个非常简单的项目 该项目声明了对从客户的工件实例提供的模块工件的模块依赖关系 这在 5 3 1 中运行良好 从下面的日志中可以看出 有一行表明 DefaultExternalResourceArtifactResolver
  • java 中的 Thread.sleep() 与同步

    当 Thread sleep 10000 被调用时 当前线程将进入睡眠状态 如果在同步方法中调用Thread sleep 10000 那么在此期间其他线程是否可以执行 如果你这样做Thread sleep 10000 在同步方法中或阻止您d
  • 使用 CakePHP Auth 时出现未定义方法 stdClass::user() 错误

    我对 CakePHP 相当陌生 正在使用 Auth 组件构建一个网站 有几次我尝试用这个组件做一些导致错误的事情 Fatal error Call to undefined method stdClass user in ftphome s
  • 是否可以在 Android 上创建符号链接?

    我想知道在 android 中是否可以从我的 android 应用程序创建符号链接 因为我想使用 sdcard 创建我的应用程序的文件夹 数据的符号链接 我不是 android 方面的专家 但我通常使用 Java nio File File
  • 如何自定义QCalendarWidget?

    我正在尝试将一些样式表应用到我的QCalendarWidget 我已经做了一些改变 这是我现在的代码 QCalendarWidget QWidget background color magenta color green QCalenda
  • multinom() 默认情况下如何处理 NA 值?

    当我跑步时multinom say Y X1 X2 X3 如果对于某一特定行X1 is NA 即缺失 但是Y X2 and X3全部都有值 是否会丢弃整行 就像 SAS 中那样 如何处理缺失值multinom 这是一个简单的例子 来自 mu
  • 如何将 Docker Hub 镜像拉取到 Google Cloud Run?

    我正在尝试将 Docker 映像拉入 Google Cloud Run 我发现我可能需要先将其拉到 Google 容器注册表 但我可以以某种方式避免它吗 另外 我宁愿直接从源头获取它以使其保持最新 我查看了该项目 最后在 Cloud Run
  • Java 对象、更改字段侦听器、设计模式

    有一个类 public class MyClass private String field1 private String field2 private String field3 getters setters 然后我们更新一些字段 M
  • 尽管 flex-basis: 0 [重复],Flexbox 项目的宽度并不相等

    这个问题在这里已经有答案了 我在 Flexbox 中有 4 列 我希望它们的宽度相等 那个有overflow hidden比其他人占据更多的位置 而我无法修复它 在我看来 我遇到了与这篇文章中所述相同的问题 Flexbox 和溢出隐藏无法正
  • 使用“从浏览器中单击”按钮打开客户端的桌面应用程序 - Python/HTML [重复]

    这个问题在这里已经有答案了 我想打开桌面应用程序 例如 记事本 Powerpoint Putty 附上它在共享点上如何工作的图像 随附的示例图像显示了如何通过单击按钮打开 Microsoft Teams 我需要这个精确的复制品 单击 打开
  • Visual Studio 2015 调试并继续

    我们将环境从 Visual Studio 2008 更改为 2015 更新 1 现在我们遇到了一些奇怪的调试行为 当我们遇到断点并更改一些代码并继续时 我们无法再在快速监视或立即窗口中看到某些类型的变量内容 例如数据表 图像 A type
  • 如何测试 PHP 程序? [复制]

    这个问题在这里已经有答案了 有没有办法测试程序代码 我一直在研究 PHPUnit 它似乎是创建自动化测试的好方法 然而 它似乎是面向面向对象的代码 是否有过程代码的替代方案 或者我应该在尝试测试网站之前将网站转换为面向对象 这可能需要一段时