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.
 
 
韩天峰 0d0e62fbc7 fix(array-def): update list index validation to use PHP's append position 6 days ago
..
code fix(array-def): update list index validation to use PHP's append position 6 days ago
src fix(array-def): update list index validation to use PHP's append position 6 days ago
BashCompletionTest.php 移除 8.2、8.3 版本的支持 2 weeks ago
FINAL_TEST_SUCCESS.md test(backend): 添加后端编译器单元测试并修复编译选项构建功能 4 months ago
README.md 移除 8.2、8.3 版本的支持 2 weeks ago
TEST_REPORT.md 移除 8.2、8.3 版本的支持 2 weeks ago
TEST_RESULTS.md refactor(docs): update file paths and directory structure references 2 months ago
bootstrap.php feat(compiler): add constant expression validation and runtime attribute factories 1 month 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 最佳实践
  • 支持跨平台测试

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