Как сделать библиотеки черного ящика в стеке PhpStorm при использовании точек останова исключений - PullRequest
1 голос
/ 22 марта 2019

Я выполняю некоторые модульные тесты, использую PHPUnit через Codeception, и когда завершение не удается, я бы хотел сосредоточиться на строке в моем классе тестирования, где утверждение не удалось.

Обычно я должен скопировать имя класса и номер строки из выходных данных терминала и использовать поиск PhpStorm, а затем «goto line», чтобы найти место, где он остановился. Это довольно утомительно делать это многократно (весь день TDD).

Я попытался включить «Точки прерывания исключения» в PhpStorm, поэтому среда IDE останавливается на строке, которая выдает исключение. Обычно это нормально, но в этом случае это глубоко в библиотеке assert. Я хочу, чтобы среда IDE автоматически перевернула стек в файл MY и сфокусировала на нем свое внимание. Я могу сделать это вручную на панели кадров стека, и это, конечно, на правильной линии, но опять же это повторяется и, следовательно, утомительно.

Я знаю, что для Xdebug есть инструменты для «черного ящика»: «Пропущенные пути» и «Фильтры шагов> Пропущенные пути», но, похоже, они не влияют на фокусировку обнаруженных исключений.

Я с оптимизмом надеялся, что если я положу в черный ящик файлы библиотеки PHPUnit, то точка остановки исключения может подниматься вверх, пока не найдет файл без черного ящика.

, например

Test  tests/src/Domain/TestSession/TestSessionTest.php:testStart
'2019-03-22 17:05:15' does not match expected type "object".
mylib/vendor/phpunit/phpunit/src/Framework/Constraint/IsEqual.php:135   << It halts here
mylib/vendor/phpunit/phpunit/src/Framework/Assert.php:2060
mylib/vendor/phpunit/phpunit/src/Framework/Assert.php:485
mylib/tests/src/Domain/TestSession/TestSessionTest.php:93   << I want it to halt here in MY code
mylib/vendor/phpunit/phpunit/src/Framework/TestCase.php:1062
mylib/vendor/phpunit/phpunit/src/Framework/TestCase.php:913
mylib/vendor/phpunit/phpunit/src/Framework/TestResult.php:686
mylib/vendor/phpunit/phpunit/src/Framework/TestCase.php:868
mylib/vendor/phpunit/phpunit/src/Framework/TestSuite.php:733
mylib/vendor/codeception/phpunit-wrapper/src/Runner.php:110
mylib/vendor/codeception/codeception/src/Codeception/SuiteManager.php:158
mylib/vendor/codeception/codeception/src/Codeception/Codecept.php:192
mylib/vendor/codeception/codeception/src/Codeception/Codecept.php:159
mylib/vendor/codeception/codeception/src/Codeception/Command/Run.php:384
mylib/vendor/symfony/console/Command/Command.php:255
mylib/vendor/symfony/console/Application.php:953
mylib/vendor/symfony/console/Application.php:248
mylib/vendor/symfony/console/Application.php:148
mylib/vendor/codeception/codeception/src/Codeception/Application.php:108
mylib/vendor/codeception/codeception/codecept:43

Я хочу показать соответствующий код, в котором проблема:

    $this->assertEquals($now, $ts->datetimeStarted);
at
mylib/tests/src/Domain/TestSession/TestSessionTest.php:93

Не этот нерелевантный код внутри машины утверждения:

        throw new PHPUnit_Framework_ExpectationFailedException(
            trim($description . "\n" . $f->getMessage()),
            $f
        );
at
mylib/vendor/phpunit/phpunit/src/Framework/Constraint/IsEqual.php:138

Другая странность заключается в том, что при включенных точках прерывания исключения среда IDE не фокусируется на переднем плане, как это происходит с обычными точками останова, плюс внутренний фокус находится на панели кода, а не на панели кадров стека, как обычно. Поэтому я остался сфокусированным на внешнем окне терминала (а не на встроенном терминале IDE). Если бы он фокусировал окно IDE и по умолчанию фокусировался на панели стека, то я мог бы просто нажать стрелку вниз три раза. Я мог бы жить с этим уровнем RSI.

MacOS 10.12.6
PhpStorm 2018.3.5

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Шаговые фильтры предназначены для пошагового выполнения программы, не влияют на точки останова. Вот запрос пропущенных путей для поддержки точек останова исключений: https://youtrack.jetbrains.com/issue/WI-43959

0 голосов
/ 29 марта 2019

Я нашел дополнительное решение для одной из моих дополнительных жалоб (второй абзац), которое уменьшает необходимость в полном решении.

PHPStorm (2018.3) поддерживает формат file:line в окне поискаи поэтому вам не нужно использовать поиск, а затем перейти к строке.Это значительно экономит время.

Так что мне просто нужно скопировать TestSessionTest.php:93 из середины трассировки стека в терминале и выполнить двойную смену, вставить ее в IDE.Он прыгает прямо на строку в файле.

...