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