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.
|
|
4 weeks ago | |
|---|---|---|
| .. | ||
| code | 1 month ago | |
| src | 4 weeks ago | |
| FINAL_TEST_SUCCESS.md | 4 months ago | |
| README.md | 4 months ago | |
| TEST_REPORT.md | 4 months ago | |
| TEST_RESULTS.md | 2 months ago | |
| bootstrap.php | 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.2', '8.3']
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:
- 检查错误消息
- 确认测试环境配置正确
- 验证被测试代码的逻辑
- 必要时更新测试用例
Q: 如何添加新测试?
A:
- 确定要测试的功能
- 在相应的测试文件中添加测试方法
- 遵循现有的测试风格和命名规范
- 确保测试独立且可重复
Q: 测试覆盖率目标是多少?
A:
- Platform 层:100%
- Backend 层:100%
- Factory 层:100%
- Adapter 层:80%+
下一步
- ✅ 完成 Platform 层测试
- ✅ 完成 Backend 层测试
- ✅ 完成工厂类测试
- ✅ 完成适配器测试
- ⏳ 添加更多边缘情况测试
- ⏳ 添加性能测试
- ⏳ 集成到 CI/CD 流程
总结
本次创建的测试套件:
- ✅ 66 个测试方法
- ✅ 1,060 行测试代码
- ✅ 覆盖所有重构的核心功能
- ✅ 遵循 PHPUnit 最佳实践
- ✅ 支持跨平台测试
这是一个生产就绪的测试套件!🚀