PHPUnit中使用dd()导出变量触发子进程意外终止问题问询
问题原因
Drupal 9 默认对功能测试、内核测试、浏览器测试类启用进程隔离机制,每个测试用例会在独立的子进程中执行。dd() 函数底层依赖 die()/exit() 终止程序运行,会直接中断子进程执行,导致 PHPUnit 主进程无法接收预期的测试结束回执,因此抛出「Test was run in child process and ended unexpectedly」错误。
你在其他项目可以正常使用 dd(),是因为普通 PHP 项目的 PHPUnit 默认没有开启进程隔离配置。
可行解决方案
- 方案1:临时关闭当前测试类的进程隔离
在你需要调试的测试类中添加如下属性,调试完成后删除即可:
注意:关闭进程隔离可能存在全局变量、服务容器污染的问题,仅适合调试阶段使用。protected $runTestInSeparateProcess = false; - 方案2:替换为不终止进程的打印方法
用dump()函数代替dd(),dump()仅会输出变量内容不会终止程序,测试执行完成后变量内容会正常展示在 PhpStorm 的测试结果控制台中。如果需要打印后停止测试执行,可在dump()后添加$this->fail('调试主动终止');即可正常拿到输出结果。 - 方案3:使用断点调试替代打印调试
配置Xdebug后在对应位置打断点,无需修改代码即可查看所有变量的上下文信息,调试效率比dd()更高。
内容的提问来源于stack exchange,提问作者Jimmyb_1991
相关产品推荐
相关产品推荐

