phpfui / phpunit-syntax-coverage
PHPUnit 测试扩展,用于完整检查项目中所有文件和类的语法
Requires
- php: >=8.0 <8.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.64
- nikic/php-parser: ^5.0
- phpstan/phpstan: ^1.8
- phpunit/phpunit: <12.0
- roave/security-advisories: dev-latest
- symfony/translation-contracts: >=2.3
README
PHPUnit 扩展,用于完整 PHP 语法代码覆盖率
此包将检查您所有 PHP 代码中容易遗漏的语法错误。它还将检查所有类以查看它们是否可加载,但不会实际实例化类。
我们经常不小心提交带有容易检测到的语法错误的代码,但如果文件或类没有被 PHP 实际加载,我们可能看不到错误。通常文件或类在语法上是正确的,但方法签名可能不匹配更新的类或供应商库。通常这种情况只能在运行时检测到,但使用 PHPUnitSyntaxCoverage,您可以确保所有文件和类都被检查。
PHPUnitSyntaxCoverage 使用 PhpParser 检查基本语法错误。然后使用 ReflectionClass 加载源中找到的任何类,而不会实例化它们。这将找到额外的错误(例如,由于包更新而丢失或更改的基类)。
要求
- PHP 和 PHPUnit 的现代版本
- 正确配置的自动加载
安装
composer require phpfui/phpunit-syntax-coverage
使用
从 \PHPFUI\PHPUnitSyntaxCoverage\Extensions 扩展您的单元测试
class UnitTest extends \PHPFUI\PHPUnitSyntaxCoverage\Extensions { public function testProjectSyntax() { $this->addSkipDirectory(__DIR__ . '/../App/Examples'); $this->assertValidPHPDirectory(__DIR__ . '/../App', 'App directory has an error'); $this->assertValidPHPFile(__FILE__, 'Unit Test file not valid'); $this->assertValidPHP('<?php echo "hi";'); } }
您可以使用以下断言中的任何一个
- assertValidPHP(string $code, string $message = '')
- assertValidPHPDirectory(string $directory, string $message = '', bool $recurseSubdirectories = true, array $extensions = ['.php'])
- assertValidPHPFile(string $fileName, string $message = '')
目录测试
而不是逐个文件测试,请使用 assertValidPHPDirectory 测试整个目录。任何添加到目录中的文件都将自动进行测试。
$this->assertValidPHPDirectory(__DIR__ . '/../App', 'App directory error');
错误信息将包括违规文件名和行号。
使用 addSkipDirectory 添加简单的不区分大小写的文件匹配以跳过特定的目录/文件。
自动加载
您必须确保为所有类正确配置自动加载。这意味着您不能传递无法正确解析的类的引用。如果您的测试代码可能无法正确验证,请使用 addSkipDirectory。
命名空间测试
assertValidPHPFile 和 assertValidPHPDirectory 断言将检查文件路径中的正确命名空间(对于 PSR-0 自动加载和完全路径的 PSR-4 自动加载),但您可以使用 skipNamespaceTesting 关闭命名空间测试或使用 addSkipNamespace 排除特定的命名空间测试。
PHP 版本
虽然此库仅支持当前支持的 PHP 版本,但您可以为项目创建一个指向 PHP 5.2 或更高版本的链接。默认情况下,更喜欢 PHP 7 代码,但可以通过配置 phpunit.xml(.dist) 来选择或仅解析 PHP 5:
<php> <env name="PHPFUI\PHPUnitSyntaxCoverage\Extensions_parser_type" value="X"/> </php>
其中 X 是以下之一 数字
- 更喜欢 PHP 7
- 更喜欢 PHP 5
- 仅 PHP 7
- 仅 PHP 5
示例
请参阅 示例
完整类文档
许可
PHPFUI 根据 MIT 许可证分发。