gpt4 book ai didi

phpunit - PHPUnit 8.4 的 PhpStorm 给出异常 Uncaught PHPUnit\Runner\Exception class ... 无法找到

转载 作者:行者123 更新时间:2023-12-02 17:11:09 28 4
gpt4 key购买 nike

我尝试使用 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

但是,如果我在类 namespace 前面加上 \\ ,一切都会正常工作。我不知道发生了什么事。 PHPUnit 版本 7 也可以工作。

最佳答案

同样的事情也发生在我身上。突然我开始收到以下错误:

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...

所以最终我打破了规则,修改了供应商文件,应该不惜一切代价避免这种情况,但作为临时解决方案,它解决了我的问题。

因此,我在第 98 行(PHPUnit 版本 8.4.1)的 vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php 中添加了 1 行,替换了不必要的 '\'。

if (empty($suiteClassFile) && \is_dir($suiteClassName) && !\is_file($suiteClassName . '.php')) {
/** @var string[] $files */
$files = (new FileIteratorFacade)->getFilesAsArray(
$suiteClassName,
$suffixes
);

$suite = new TestSuite($suiteClassName);
$suite->addTestFiles($files);

return $suite;
}
$suiteClassName = str_replace('\\\\', '\\', $suiteClassName); // THIS IS THE LINE I ADDED
try {
$testClass = $this->loadSuiteClass(
$suiteClassName,
$suiteClassFile
);
} catch (Exception $e) {
$this->runFailed($e->getMessage());
return null;
}

关于phpunit - PHPUnit 8.4 的 PhpStorm 给出异常 Uncaught PHPUnit\Runner\Exception class ... 无法找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58257682/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com