本文给出从编写到执行的完整路径:如何组织测试金字塔、度量覆盖率并在 CI 中设定门槛,结合 PHPStan 静态分析发现早期缺陷,形成可持续的质量保障机制。


## 安装与基础命令


composer require --dev phpunit/phpunit:^10 phpstan/phpstan:^1.11

基础执行:


./vendor/bin/phpunit --colors=always
./vendor/bin/phpstan analyse src --level=max

## 覆盖率度量


使用 Xdebug 或 PCOV:


./vendor/bin/phpunit --coverage-text --coverage-html coverage/

在 `phpunit.xml` 中设定覆盖率目录与白名单:


<phpunit colors="true">
  <coverage>
    <include>
      <directory>src</directory>
    </include>
    <report>
      <html outputDirectory="coverage"/>
    </report>
  </coverage>
</phpunit>

## 静态分析与规则


`phpstan.neon` 示例:


parameters:
  level: max
  paths:
    - src
  checkMissingIterableValueType: true
  treatPhpDocTypesAsCertain: true

## CI 集成与质量门禁


典型 GitHub Actions 片段:


name: CI
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'
          extensions: xdebug
      - run: composer install --no-interaction --prefer-dist
      - run: ./vendor/bin/phpunit --coverage-text --coverage-clover=coverage.xml
      - run: ./vendor/bin/phpstan analyse src --level=max
      - name: Enforce Coverage >= 80%
        run: |
          php -r '$c=simplexml_load_file("coverage.xml");$r=(float)$c->project->metrics[0]["statements"];$m=(float)$c->project->metrics[0]["coveredstatements"];$p=$m/$r*100;echo "Coverage: $p%\n";if($p<80){exit(1);}';

## 测试金字塔建议


  • 单元测试占多数,聚焦纯函数与小型类;集成测试覆盖关键边界;端到端测试针对核心流程。
  • 使用 Test Doubles 控制外部依赖;将慢测试隔离并在夜间构建运行。

## 相关文章(同分类热门)


  • [PHP 8 性能优化与 Opcache 与 FPM 调优:生产可验证实践指南](./PHP 8 性能优化与 Opcache 与 FPM 调优:生产可验证实践指南.md)
  • [Composer 2 与自动加载优化:PSR-4、Classmap 与 Opcache 结合实战](./Composer 2 与自动加载优化:PSR-4、Classmap 与 Opcache 结合实战.md)

## 结语


将覆盖率度量与静态分析门禁写入 CI,可让质量基线从“偶然”变为“必然”。通过持续的度量与反馈循环,团队能够更可靠地交付可维护的 PHP 代码。



点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部