TypePHP 编译器 https://swoole.com/aot/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
韩天峰 35f6110842 devirtualize statically exact magic calls 15 hours ago
..
code devirtualize statically exact magic calls 15 hours ago
src devirtualize statically exact magic calls 15 hours ago
BashCompletionTest.php fix(cli): support Composer entrypoint and isolate stub symbols 6 days ago
BinaryEntrypointTest.php fix(cli): support Composer entrypoint and isolate stub symbols 6 days ago
README.md 移除 8.2、8.3 版本的支持 3 weeks ago
bootstrap.php fix(translator): allow overrides to add a by-ref return (#53) --skip-tests 15 hours ago

README.md

PHPUnit 单元测试指南

概述

本项目使用 PHPUnit 进行单元测试,覆盖重构的 Platform 和 Backend 层代码。

测试文件结构

phpunit/
├── bootstrap.php                    # 测试引导文件
├── src/                             # 测试文件目录
│   ├── Platform/
│   │   └── PlatformTest.php        # Platform 层测试 (283行)
│   ├── Backend/
│   │   └── BackendTest.php         # Backend 层测试 (427行)
│   ├── FactoryTest.php             # 工厂类测试 (176行)
│   └── CompilerBaseAdapterTest.php # CompilerBase 适配器测试 (174行)
└── code/                            # 测试用例代码目录

测试覆盖范围

1. Platform 层测试 (PlatformTest.php)

Windows Platform:

  • 基本信息(名称、扩展名、路径分隔符)
  • 包含路径格式化
  • 库路径格式化
  • 库文件格式化
  • 路径规范化
  • 路径组合
  • 子系统选项
  • CRT 配置
  • 调试选项

Linux Platform:

  • 基本信息
  • 包含路径格式化
  • 库路径格式化
  • 库文件格式化(自动去除 lib 前缀和扩展名)
  • RPATH 选项
  • PIC 标志
  • 共享库链接标志

macOS Platform:

  • 基本信息
  • install_name 选项
  • 动态库链接标志

通用测试:

  • 空数组处理

总计:23 个测试方法

2. Backend 层测试 (BackendTest.php)

MSVC Backend:

  • 编译器基本信息
  • 编译单个文件
  • 链接对象文件
  • 完整编译命令
  • 完整链接命令
  • 完整编译选项(含 ZTS、Sanitizer、警告屏蔽等)
  • 调试模式编译选项
  • 完整链接选项(含子系统、DLL等)

GCC Backend:

  • 编译器基本信息
  • 编译单个文件
  • 完整编译选项(含优化、Sanitizer、PIC等)
  • 调试模式编译选项
  • 完整链接选项(含共享库、RPATH等)

Clang Backend:

  • 编译器基本信息
  • Windows 平台链接器检测
  • Unix 编译选项
  • Windows 编译选项(MSVC 兼容模式)
  • Windows 链接选项
  • Unix 链接选项

通用测试:

  • 不同优化级别(O0-O3)
  • 默认值测试

总计:24 个测试方法

3. 工厂类测试 (FactoryTest.php)

PlatformFactory:

  • 自动检测当前平台
  • 平台判断方法
  • 获取平台名称

CompilerFactory:

  • 自动创建编译器
  • 按名称创建编译器(MSVC、GCC、Clang)
  • 不支持的编译器错误处理
  • 自动检测(带和不带指定编译器)
  • 平台与编译器匹配(Windows+MSVC, Linux+GCC, macOS+Clang)
  • 编译器获取平台实例

总计:13 个测试方法

4. CompilerBase 适配器测试 (CompilerBaseAdapterTest.php)

  • CompilerBase 初始化新架构
  • parseIncludes 使用新架构
  • parseLdflags 使用新架构
  • parseLibs 使用新架构
  • 平台检测方法一致性
  • 向后兼容性

总计:6 个测试方法

运行测试

运行所有测试

cd D:\workspace\compiler
php vendor/bin/phpunit phpunit/

运行特定测试文件

# 运行 Platform 测试
php vendor/bin/phpunit phpunit/src/Platform/PlatformTest.php

# 运行 Backend 测试
php vendor/bin/phpunit phpunit/src/Backend/BackendTest.php

# 运行工厂测试
php vendor/bin/phpunit phpunit/src/FactoryTest.php

# 运行适配器测试
php vendor/bin/phpunit phpunit/src/CompilerBaseAdapterTest.php

运行特定测试方法

# 运行 Windows 平台测试
php vendor/bin/phpunit --filter testWindowsBasic phpunit/src/Platform/PlatformTest.php

# 运行 MSVC 编译测试
php vendor/bin/phpunit --filter testMsvcCompileFile phpunit/src/Backend/BackendTest.php

生成代码覆盖率报告

php vendor/bin/phpunit --coverage-html coverage phpunit/

然后打开 coverage/index.html 查看详细的覆盖率报告。

测试统计

测试文件 测试方法数 代码行数 说明
PlatformTest.php 23 283 Platform 层完整测试
BackendTest.php 24 427 Backend 层完整测试
FactoryTest.php 13 176 工厂类测试
CompilerBaseAdapterTest.php 6 174 适配器层测试
总计 66 1,060 完整测试套件

测试原则

1. 独立性

每个测试方法都是独立的,不依赖其他测试的执行结果。

2. 可重复性

测试应该在任何环境下都能产生相同的结果。

3. 自包含

测试应该包含所有必要的设置和清理逻辑。

4. 清晰的断言

每个断言都应该有明确的目的,失败时能提供有用的信息。

最佳实践

1. 测试命名

  • 使用描述性的测试方法名
  • 格式:test[功能][场景][预期结果]
  • 示例:testWindowsIncludeFlags, testMsvcDebugCompileOptions

2. 测试组织

  • 按功能分组相关测试
  • 使用注释分隔不同的测试组
  • 保持测试方法的简洁性

3. 断言选择

  • 使用最具体的断言方法
  • 提供有意义的失败消息
  • 避免过度断言

4. 测试数据

  • 使用有意义的数据
  • 覆盖边界情况
  • 包括正常和异常情况

持续集成

GitHub Actions 示例

name: Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ${{ matrix.os }}
    
    strategy:
      matrix:
        os: [windows-latest, ubuntu-latest, macos-latest]
        php-version: ['8.4', '8.5']
    
    steps:
    - uses: actions/checkout@v2
    
    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: ${{ matrix.php-version }}
    
    - name: Install dependencies
      run: composer install
    
    - name: Run tests
      run: php vendor/bin/phpunit phpunit/

常见问题

Q: 测试失败怎么办?

A:

  1. 检查错误消息
  2. 确认测试环境配置正确
  3. 验证被测试代码的逻辑
  4. 必要时更新测试用例

Q: 如何添加新测试?

A:

  1. 确定要测试的功能
  2. 在相应的测试文件中添加测试方法
  3. 遵循现有的测试风格和命名规范
  4. 确保测试独立且可重复

Q: 测试覆盖率目标是多少?

A:

  • Platform 层:100%
  • Backend 层:100%
  • Factory 层:100%
  • Adapter 层:80%+

下一步

  1. 完成 Platform 层测试
  2. 完成 Backend 层测试
  3. 完成工厂类测试
  4. 完成适配器测试
  5. 添加更多边缘情况测试
  6. 添加性能测试
  7. 集成到 CI/CD 流程

总结

本次创建的测试套件:

  • 66 个测试方法
  • 1,060 行测试代码
  • 覆盖所有重构的核心功能
  • 遵循 PHPUnit 最佳实践
  • 支持跨平台测试

这是一个生产就绪的测试套件!🚀