我正在使用phpunit框架,我有这样的代码:
public function A() {
try {
(...some code...)
die (json_encode ($data));
}
catch (Exception $e) {
die(false);
}
}
这个函数是通过 AJAX 调用的,我不能用返回替换 die。问题是:如何使用这样的代码进行单元测试?
断言,我不能用于此。
谢谢。
你无法测试...
有时单元测试会带来这样的问题(无法测试的情况)。这通常意味着问题不在于测试,而在于您的代码及其架构。
在这里,您不应该使用 die
函数(实际上您不应该使用 die
返回 HTTP 响应),而是echo
json,然后让脚本正确完成(或return
json 并将其echo
其他地方)。
对此进行测试,您可以捕获输出并检查它(这是一个基本示例,我想要好得多)。
结论:问题出在您的代码上,请修复此问题,然后您可以尝试对其进行测试。如果你不能,那就不要测试。
为什么不能用return
替换die()
?
我的解决方案是使其引发异常,然后使用另一种方法捕获异常。然后你可以对function a()
进行单元测试,检查它是否抛出正确的异常类型。另一个函数处理die()
。
实际上死亡在这里似乎不是一个好的解决方案。但是,如果没有办法更改此设置,则可以在另一个进程中运行该函数。
为此,您必须编写一个运行函数 A 的测试文件。前任。
<?php
include 'fileWithAFunction.php';
A();
?>
现在用shell_exec调用此脚本。
$return = shell_exec('testscript.php');
返回变量保存测试脚本的输出。