Я выполняю некоторые модульные тесты, использую 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