php - 测试非 OOP PHP

标签 php unit-testing testing codeception procedural-programming

我想问一下有什么方法可以用单元测试或其他任何方式来测试过程代码。

例如我有下面非常简单的代码:

$a = 10;
$b = 20;

for($i = $a; $i < $b; $i++){
    echo 'Loop ' . $i . PHP_EOL;
}

我知道我可以使用 isset() 和其他内置函数检查变量是否存在,也可以检查变量的类型,通过输出缓冲我可以获得输出并计算循环次数被处决, 但是...我可以检查是否有 for 循环而不是 while 循环吗?

我可以获得整个 php 文件并使用正则表达式找到它,但也许有某种神奇的功能可以告诉我这一点。

最佳答案

对于缺少封装的遗留文件,我建议尽可能在最高级别对其进行测试。

对于这个文件,是否可以在网络服务器级别对其进行测试?哪个是功能测试而不是单元测试?即:

  • 在测试套件的开头启动网络服务器
  • 向为您在上面发布的文件提供服务的端点发出请求
  • 断言内容如预期的那样Loop ...\n ...

只断言输出而不是实现(使用什么样的循环,设置的变量等)应该让你更容易重构代码,同时仍然有测试的保护,确保输出符合预期。

如果无法进行网络服务器功能测试,您可以创建一个单元测试以类似的方式捕获输出:

ob_start();
include 'your_php_file_listed_above';
$out = ob_get_clean();

然后您可以断言 $out 包含 Loop ..\n ... 正确。

我建议不要断言特定于实现的细节,即使用了哪个循环,设置了哪些变量,因为它们可能会减慢重构速度。

关于php - 测试非 OOP PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41191583/

相关文章:

testing - 发布 Web 应用程序之前应该检查什么?

javascript - 在 React 中导入新库时,Jest 遇到意外标记

php - 无法将 URL 转换为超链接存储在 MySQL 中

php - 禁用 Magento "manage products"区域中产品 &lt;input&gt; 字段的编辑?

java - 加密/解密单元测试

javascript - Sinon如何对异步函数进行单元测试的 stub 方法

web-services - 用于使用 webServices 的 Curl 命令行?

php - CakePHP : How to Create OptGroup Drop down list from DataBase?

php - MySQL/PHP 如何设置和填充关系数据库以一次插入几行?

unit-testing - 以编程方式将.reg文件合并到win32注册表中