【发布时间】:2012-04-06 02:25:13
【问题描述】:
用于单元测试
class SampleTest extends PHPUnit_Framework_TestCase
{
public function testBreakpoint()
{
$a = 18;
}
}
第 5 行有断点 "$a = 18;",
- Xdebug v2.1.0,
- PHPUnit 3.6.10,
- PHP 5.3.6,
- ubuntu 10.11
使用 NO --process-isolation 选项运行 unittest 会按预期停止第 5 行的脚本执行。 使用 --process-isolation 选项运行相同的配置不会停止第 5 行的执行。
选项 --process-isolation 使用 https://github.com/sebastianbergmann/phpunit/blob/3.6/PHPUnit/Util/PHP.php 的 runJob 函数中的 'proc_open' 在新进程中运行每个测试
使用带有调试器插件的 PhpStorm 3 和 vim 7 进行测试。它允许调试 PHPUnit 本身,但不能调试测试用例。
有什么方法可以调试 PhpUnit 使用 Xdebug 创建的子进程?可能是 Zend 调试器?
【问题讨论】:
-
我没有准备好在 PHP Storm 或 VIM 中进行调试,所以你必须尝试一下。如果您以某种方式可以退出环境变量,则可以使用它们触发 Xdebug 或 ZendDebugger。 Zend 示例 QUERY_STRING="start_debug=1&debug_host=10.1.1.17&no_remote=1&debug_port=10000&debug_stop=1" /usr/local/bin/php /var/www/test.php (kb.zend.com/index.php?View=entry&EntryID=130) 。 Xdebug 示例导出 XDEBUG_CONFIG="idekey=session_name" (xdebug.org/docs/remote)。让我知道这是否有效。
-
@SamHennessy 是的,这正是调试 CLI 脚本的方法。在魔术
export命令之后,环境变量就存在了。调试 CLI 脚本不是问题。正如我所提到的,当 PHPUnit 在同一个线程中运行测试用例时,我可以调试单元测试:phpunit SampleTest就像一个魅力。phpunit --process-isolation SampleTest不起作用。最后一个命令创建了 2 个进程:主 PHPUnit 和每个测试的子进程。我只能调试主进程,不能调试子进程,这是个问题。 -
我的假设是运行 PHPUnit 的用户与 proc_open 操作中使用的用户是同一用户。如果这是真的,那么它应该触发额外的调试会话。我不知道 VIM 或 PHP Storm 是否可以支持多个调试会话。您可能需要在您的个人资料中设置环境变量才能使其正常工作。
-
@SamHennessy 你是对的。不支持多个调试会话。 The issue 已创建半年多。它可以被接受为正确答案。
-
很高兴能帮您解决这个问题。
标签: php phpunit xdebug phpstorm