是否可以使用--process-isolation选项调试PhpUnit测试?

时间:2012-03-21 14:38:54

标签: php phpunit xdebug phpstorm

对于unittest

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行的脚本执行,如预期的那样。 运行相同的配置WITH --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 Debugger?

3 个答案:

答案 0 :(得分:2)

进入PHPStorm项目设置 - PHP - 调试并将Xdebug设置为“当脚本在项目外时强制在第一行中断”。

它应该在某个main()方法中断,如果你跳过几次(或按简历),它将会到达你的测试。

答案 1 :(得分:2)

正如对该问题的评论所述。问题是PHP Storm didn't support multiple parallel debugging sessions

答案 2 :(得分:0)

这不是一个完美的答案,但您可以使用xdebug_start_trace()和xdebug_stop_trace()调用来包围任何代码块,以便为目标代码块生成堆栈跟踪。在测试其他人的代码时,我已经用它来查看单元测试中特定点的确切内容。

class SampleTest extends PHPUnit_Framework_TestCase
{
    public function testBreakpoint()
    {
        xdebug_start_trace('/tmp/testBreakPointTrace');
        $a = 18;
        xdebug_stop_trace();
    }
}

请记住,任何失败都会导致PHPUnit的异常处理程序进入并导致堆栈跟踪看起来有点奇怪。如果您收到错误,可以通过添加退出来获得干净的跟踪;在xdebug_stop_trace之后立即调用:

class SampleTest extends PHPUnit_Framework_TestCase
{
    public function testBreakpoint()
    {
        xdebug_start_trace('/tmp/testBreakPointTrace');
        $a = 18;
        xdebug_stop_trace();
        exit;
    }
}