测试非 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 ...
正确。
我建议不要断言特定于实现的细节,即使用了哪个循环,设置了哪些变量,因为它们可能会减慢重构速度。
我想问一下有什么方法可以用单元测试或其他方式来测试过程代码。
例如我有下面非常简单的代码:
$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 ...
正确。
我建议不要断言特定于实现的细节,即使用了哪个循环,设置了哪些变量,因为它们可能会减慢重构速度。