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.
 
 

284 lines
6.7 KiB

# 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 个测试方法**
## 运行测试
### 运行所有测试
```bash
cd D:\workspace\compiler
php vendor/bin/phpunit phpunit/
```
### 运行特定测试文件
```bash
# 运行 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
```
### 运行特定测试方法
```bash
# 运行 Windows 平台测试
php vendor/bin/phpunit --filter testWindowsBasic phpunit/src/Platform/PlatformTest.php
# 运行 MSVC 编译测试
php vendor/bin/phpunit --filter testMsvcCompileFile phpunit/src/Backend/BackendTest.php
```
### 生成代码覆盖率报告
```bash
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 示例
```yaml
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 最佳实践
- ✅ 支持跨平台测试
这是一个**生产就绪**的测试套件!🚀