PHPUnit和die函数

时间:2011-05-09 09:47:52

标签: php phpunit

我正在使用phpunit框架,我有这样的代码:

public function A() {

 try {

   (...some code...)

   die (json_encode ($data));

 }

 catch (Exception $e) {
   die(false);
 }

}

这个函数是通过AJAX调用的,我不能用return替换die。问题是: 我如何使用这样的代码进行单元测试?

我不能用于此,断言。

感谢。

3 个答案:

答案 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的输出。