测试非 OOP PHP

Testing non OOP PHP

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

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

$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 ... 正确。

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