我尝试使用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
Run Code Online (Sandbox Code Playgroud)
是的,我有该类,是的,我已正确配置了psr:
"autoload": {
"psr-4": {
"Mrself\\TreeType\\": "./src/"
}
},
"autoload-dev": {
"psr-4": {
"Mrself\\TreeType\\Tests\\": "./tests/"
}
}
Run Code Online (Sandbox Code Playgroud)
我一切设置正确的证明是,当我运行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
Run Code Online (Sandbox Code Playgroud)
但是,如果我将类名称空间放在前面,那么\\一切也将正常运行。我不知道发生了什么事。PHPUnit版本7也可以正常工作。
小智 7
同样的事情发生在我身上。突然间,我开始收到以下错误:
PHP Fatal error: Uncaught PHPUnit\Runner\Exception: Class 'Tests\\Feature\\ExampleTest' could not be found
Run Code Online (Sandbox Code Playgroud)
在我阅读了@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
Run Code Online (Sandbox Code Playgroud)
注意Tests\\\\Unit\\\\Ex...而不是Tests\\Unit\\Ex...。
所以最后我打破了规则并修改了供应商文件,应该不惜一切代价避免这种情况,但作为临时解决方案,它解决了我的问题。
所以我vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php在第 98 行(PHPUnit 版本 8.4.1)中添加了 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |