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