PhpStorm с PHPUnit 8.4 выдает исключение Uncaught PHPUnit \ Runner \ Exception class ... не найден - PullRequest
7 голосов
/ 06 октября 2019

Я пытался использовать PHPUnit v8. Однако мне не удалось PhpStorm. Когда я запускаю простой тест (метод класса) в PhpStorm, я получаю следующее сообщение:

PHP Fatal error:  Uncaught PHPUnit\Runner\Exception: Class 'Mrself\\TreeType\\Tests\\Functional\\BuildingTest' could not be found in '/vagrant/symfony-tree-type/tests/Functional/BuildingTest.php'. in /vagrant/symfony-tree-type/vendor/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php:65

Да, у меня есть этот класс, и да, я правильно настроил psr:

"autoload": {
        "psr-4": {
            "Mrself\\TreeType\\": "./src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Mrself\\TreeType\\Tests\\": "./tests/"
        }
    }

Доказательством того, что у меня все правильно настроено, является то, что когда я запускаю vendor/bin/phpunit, это дает мне правильный результат.

Когда я запускаю метод в PhpStorm, я получаю следующий вызов:

/usr/bin/php /vagrant/symfony-tree-type/vendor/phpunit/phpunit/phpunit --configuration /vagrant/symfony-tree-type/phpunit.xml --filter "/(::testFormCanBeBuild)( .*)?$/" Mrself\\TreeType\\Tests\\Functional\\BuildingTest /vagrant/symfony-tree-type/tests/Functional/BuildingTest.php --teamcity

Однако еслиЯ добавляю пространство имен класса к \\, все также работает правильно. Я не могу понять, что происходит. PHPUnit версии 7 также работает.

1 Ответ

4 голосов
/ 14 октября 2019

То же самое случилось со мной. Внезапно я начал получать следующую ошибку:

PHP Fatal error:  Uncaught PHPUnit\Runner\Exception: Class 'Tests\\Feature\\ExampleTest' could not be found 

И после того, как я прочитал комментарий @ frank-vue, я заметил то же самое, и он сделал: если я запускаю тесты для всей папки, она работает нормально, но если я запускаю тестирование для определенного класса / метода, я получаю эту ошибку.

Я пробовал более раннюю версию PHPStorm, пониженный плагин PHP и т. д ... и ничего не получалось.

В моем случаеКогда я проверял, трассировка стека выглядит следующим образом:

#0 /var/www/vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php(145): PHPUnit\Runner\StandardTestSuiteLoader->load('Tests\\\\Unit\\\\Ex...', '/var/www/tests/...')
#1 /var/www/vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php(105): PHPUnit\Runner\BaseTestRunner->loadSuiteClass('Tests\\\\Unit\\\\Ex...', '/var/www/tests/...')
#2 /var/www/vendor/phpunit/phpunit/src/TextUI/Command.php(177): PHPUnit\Runner\BaseTestRunner->getTest('Tests\\\\Unit\\\\Ex...', '/var/www/tests/...', Array)
#3 /var/www/vendor/phpunit/phpunit/src/TextUI/Command.php(159): PHPUnit\TextUI\Command->run(Array, true)
#4 /var/www/vendor/phpunit/phpunit/phpunit(61): PHPUnit\TextUI\Command::main()
#5 {main}
  thrown in /var/www/vendor/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php on line 69

Обратите внимание Tests\\\\Unit\\\\Ex... вместо Tests\\Unit\\Ex....

Итак, в итоге я нарушил правило и изменил файл поставщика,этого следует избегать любой ценой, но как временное решение это решает мою проблему.

Поэтому я добавил 1 строку к vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php в строке 98 (PHPUnit version 8.4.1), которая заменяет ненужные '\

1019 *
...