PHPUnit 和 die 函数

发布于 2024-11-05 13:42:03 字数 289 浏览 0 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我爱人 2024-11-12 13:42:04

为什么不能用 return 替换 die()

我的解决方案是使其抛出异常,然后用另一种方法捕获异常。然后您可以对function a()进行单元测试,检查它是否抛出正确类型的异常。另一个函数处理die()

Why can you not replace die() with a return?

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 the die().

泪意 2024-11-12 13:42:04

实际上死在这里似乎不是一个好的解决方案。
但如果无法更改此设置,您可能可以在另一个进程中运行该函数。

为此,您必须编写一个运行函数 A 的测试文件。
前任。

<?php
include 'fileWithAFunction.php';
A();
?>

现在使用 shell_exec 调用此脚本。

$return = shell_exec('testscript.php');

返回变量保存测试脚本的输出。

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.

<?php
include 'fileWithAFunction.php';
A();
?>

now call this script with shell_exec.

$return = shell_exec('testscript.php');

the return variable holds the output of the testscript.

叹沉浮 2024-11-12 13:42:03

你无法测试...

有时单元测试会带来这样的问题(无法测试的情况)。这通常意味着问题不在于测试,而在于您的代码及其架构。

这里你不应该使用 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 use die to return a HTTP response), but echo the json and then let the script finish properly (or return the json and echo 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文