PHPUnit 和 die 函数
我正在使用 phpunit 框架,并且有这样的代码:
public function A() {
try {
(...some code...)
die (json_encode ($data));
}
catch (Exception $e) {
die(false);
}
}
此函数是通过 AJAX 调用的,我无法用 return 替换 die 。问题是: 如何使用这样的代码进行单元测试?
我不能用这个断言。
谢谢。
I'm using phpunit framework and I have a code like this:
public function A() {
try {
(...some code...)
die (json_encode ($data));
}
catch (Exception $e) {
die(false);
}
}
This function is called via AJAX and I can't replace die with return. The question is:
How I can make a unit test with a code like this?
I can't use for this, the asserts.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为什么不能用
return
替换die()
?我的解决方案是使其抛出异常,然后用另一种方法捕获异常。然后您可以对
function a()
进行单元测试,检查它是否抛出正确类型的异常。另一个函数处理die()
。Why can you not replace
die()
with areturn
?My solution would be to make this throw an exception, and then catch the exception with another method. Then you can unit test
function a()
, checking that it throws the right kind of exception. The other function handles thedie()
.实际上死在这里似乎不是一个好的解决方案。
但如果无法更改此设置,您可能可以在另一个进程中运行该函数。
为此,您必须编写一个运行函数 A 的测试文件。
前任。
现在使用 shell_exec 调用此脚本。
返回变量保存测试脚本的输出。
actually die seems to be not a good solution here.
but if there is no way to change this you could probably run the function in another process.
for this you have to write a test file which runs the function A.
ex.
now call this script with shell_exec.
the return variable holds the output of the testscript.
你无法测试...
有时单元测试会带来这样的问题(无法测试的情况)。这通常意味着问题不在于测试,而在于您的代码及其架构。
这里你不应该使用
die
函数(实际上你不应该使用die
返回 HTTP 响应),而是echo
json,然后让脚本正确完成(或者返回
json 并在其他地方echo
它)。为了测试这一点,您可以捕获输出并检查它(这是一个基本示例,我猜还有更好的)。
结论:问题出在您的代码上,修复此问题,然后您可以尝试测试它。如果不能,那就不用测试。
You can't test that...
Sometimes unit testing brings up problems like this (untestable situations). That usually means that the problem is not with the testing, but with your code and its architecture.
Here you shouldn't use the
die
function (actually you shouldn't usedie
to return a HTTP response), butecho
the json and then let the script finish properly (orreturn
the json andecho
it somewhere else).To test this, you can then capture the output and check it (this is a basic example, there is much better I guess).
Conclusion : the problem is with your code, fix this and then you can try to test it. If you can't, then no testing.