我想问一下有什么方法可以用单元测试或其他任何方式来测试过程代码。
例如我有下面非常简单的代码:
$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/