Можно ли отлаживать тесты PhpUnit с опцией --process-изоляция? - PullRequest
7 голосов
/ 21 марта 2012

Для юнит-теста

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

Запуск unittest с опцией NO --process-изоляция останавливает выполнение скрипта в строке 5, как и ожидалось. Запуск той же конфигурации WITH --process-изоляция не останавливает выполнение в строке 5.

Опция --process-изоляция запускает каждый тест в новом процессе, используя 'proc_open' в функции runJob в https://github.com/sebastianbergmann/phpunit/blob/3.6/PHPUnit/Util/PHP.php

Протестировано с PhpStorm 3 и vim 7 с плагином отладчика. Позволяет отлаживать сам PHPUnit, но не тестовые случаи.

Есть ли способ отладки дочернего процесса, созданного PhpUnit с использованием Xdebug? может быть Zend Debugger?

Ответы [ 3 ]

2 голосов
/ 24 марта 2012

Как указано в комментариях к вопросу.Проблема в том, что PHP Storm не поддерживает несколько параллельных сеансов отладки .

2 голосов
/ 21 марта 2012

Зайдите в настройки проекта PHPStorm - PHP - Debug и установите Xdebug на «принудительное прерывание в первой строке, когда скрипт находится за пределами проекта».

В некоторых методах main () он должен сломаться, и если вы перешагнете пару раз (или нажмете «резюме»), он достигнет вашего теста.

0 голосов
/ 21 марта 2012

Это не идеальный ответ, но вы можете окружить любой блок кода вызовами 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;
    }
}
...