phpfui/phpunit-syntax-coverage

PHPUnit 测试扩展,用于完整检查项目中所有文件和类的语法

V1.0.17 2024-09-05 20:32 UTC

This package is auto-updated.

Last update: 2024-09-05 20:45:50 UTC


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

命名空间测试

assertValidPHPFileassertValidPHPDirectory 断言将检查文件路径中的正确命名空间(对于 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 是以下之一 数字

  1. 更喜欢 PHP 7
  2. 更喜欢 PHP 5
  3. 仅 PHP 7
  4. 仅 PHP 5

示例

请参阅 示例

完整类文档

PHPFUI/InstaDoc

许可

PHPFUI 根据 MIT 许可证分发。