PHPUnit and die function


PHPUnit and die function

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

public function A() {
 try {
   (...some code...)
   die (json_encode ($data));
 }
 catch (Exception $e) {
   die(false);
 }
}

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

断言,我不能用于此。

谢谢。

你无法测试...

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

在这里,您不应该使用 die 函数(实际上您不应该使用 die 返回 HTTP 响应),而是echo json,然后让脚本正确完成(或return json 并将其echo其他地方)。

对此进行测试,您可以捕获输出并检查它(这是一个基本示例,我想要好得多)。

结论:问题出在您的代码上,请修复此问题,然后您可以尝试对其进行测试。如果你不能,那就不要测试。

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

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

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

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

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

现在用shell_exec调用此脚本。

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

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