以 Clover XML 格式生成代码覆盖率报告 ... PHP 致命错误:无法声明类 ...,因为名称已在
Posted
技术标签:
【中文标题】以 Clover XML 格式生成代码覆盖率报告 ... PHP 致命错误:无法声明类 ...,因为名称已在【英文标题】:Generating code coverage report in Clover XML format ... PHP Fatal error: Cannot declare class ..., because the name is already in use in 【发布时间】:2021-05-21 15:45:35 【问题描述】:我想获取 CodeCov 的 coverage.xml。 php 8.0.2 PHPUnit 9.5.2 Xdebug 3.0.2
我的班级。很简单,只是练习一下代码覆盖率 src/Car.php
<?php
/**
* This class is for car.
*/
class Car
public function GetColor()
return 'Blue';
测试文件。 测试/CarTest.php
<?php
include_once __DIR__ .'/../src/Car.php';
use PHPUnit\Framework\TestCase;
/**
* @coversDefaultClass Car
*/
class CarTest extends TestCase
/**
* @covers Car::GetColor
*/
public function testCarGoodColor(): void
$car = new Car();
$this->assertSame('Blue', $car->GetColor());
当我进入时
./vendor/bin/phpunit tests/ --coverage-clover ./coverage.xml
我收到这条消息:
PHPUnit 9.5.2 by Sebastian Bergmann and contributors.
Runtime: PHP 8.0.2 with Xdebug 3.0.2
Configuration: /Applications/CI-CD/phpunit.xml
. 1 / 1 (100%)
Time: 00:00.187, Memory: 8.00 MB
OK (1 test, 1 assertion)
Generating code coverage report in Clover XML format ... PHP Fatal error: Cannot declare
class Car, because the name is already in use in /Applications/CI-CD/src/Car.php on line 8
Fatal error: Cannot declare class Car, because the name is already in use in /Applications/CI-CD/src/Car.php on line 8
如何用类解决这个问题?
【问题讨论】:
1) 你使用 Composer 自动加载器吗?如果你这样做 .. 那么你真的不需要include_once __DIR__ .'/../src/Car.php';
行,因为自动加载器会处理这个问题(如果它在你的应用程序和 PHPUnit 文件中都使用 - 例如,在引导文件中)。 2) 也许你的项目中有不止一个带有Car
类的文件?到那时它可能已经加载了......进行全局(整个项目)搜索。你也可以检查一个有名字的类是否已经在get_declared_classes()注册了
正确的方法是进行全局搜索。在我的文件夹 src/ 中,我有一个 index.php,并且需要“Car.php”。我不知道为什么,但这是一个问题。非常感谢!
不要对类使用 require/include。让自动加载器为您加载类——它做得很好。并且仅对其他内容使用 require/include(例如加载配置/模板等)
【参考方案1】:
非常感谢LazyOne
问题出在
include_once __DIR__ .'/
../src/Car.php';
我用自动加载来修复它。 另外,我在 src/ 中有 index.php 并将其添加到 ignore 以进行代码覆盖。
【讨论】:
以上是关于以 Clover XML 格式生成代码覆盖率报告 ... PHP 致命错误:无法声明类 ...,因为名称已在的主要内容,如果未能解决你的问题,请参考以下文章
Android - Jacoco 无法正确生成 xml 报告(已解决)
如何使用 angular9 和 Jasmine 为所有组件生成 .pdf 格式的单元测试用例代码覆盖率报告