为 Composer 包配置自动化测试与 CI 的核心是:编写 PHPUnit 测试、配置 phpunit.xml.dist、在 GitHub Actions 中定义多 PHP 版本测试工作流,确保测试类命名规范、自动加载正确、CI 中声明 dev 依赖。

为 Composer 包编写自动化测试并接入 CI,核心是三件事:写好 PHPUnit 测试、配置 phpunit.xml 或 phpunit.xml.dist、在 GitHub Actions 中定义 PHP 测试工作流。下面分步说明。
1. 确保项目结构支持测试
标准 Composer 包应包含 src/(源码)、tests/(测试用例)和 composer.json。测试文件通常与源码一一对应,比如 src/Helper.php 对应 tests/HelperTest.php,类名以 Test 结尾,继承 PHPUnit\Framework\TestCase。
安装测试依赖:
composer require --dev phpunit/phpunit ^10
如果使用较新 PHP 版本(如 8.2+),推荐 PHPUnit 10;若需兼容 PHP 7.4,可用 PHPUnit 9。
2. 编写可运行的测试用例
在 tests/ 下创建测试类,例如 tests/CalculatorTest.php:
class CalculatorTest extends TestCase
{
public function testAddReturnsCorrectResult(): void
{
$this->assertSame(5, 2 + 3);
}
}
确保 composer.json 中定义自动加载规则,让测试能加载源码:
"autoload": {
"psr-4": {
"MyVendor\\MyPackage\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"MyVendor\\MyPackage\\Tests\\": "tests/"
}
}
运行测试前执行:composer dump-autoload,保证命名空间解析正确。
3. 配置 PHPUnit 并验证本地运行
在项目根目录创建 phpunit.xml.dist:
tests/
然后终端执行:./vendor/bin/phpunit。看到绿色 OK 表示测试就绪。
4. 添加 GitHub Actions 工作流
在项目根目录新建 .github/workflows/test.yml:
name: Test Packageon: [push, pull_request]
jobs: test: runs-on: ubuntu-latest strategy: matrix: php-version: ['8.1', '8.2', '8.3']
steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-version }} extensions: mbstring, xml, curl coverage: none - name: Install dependencies run: composer install --no-interaction --prefer-dist - name: Run tests run: vendor/bin/phpunit --testdox该流程会:
- 在 PHP 8.1/8.2/8.3 上分别运行测试
- 自动拉取代码、安装扩展、安装 Composer 依赖
- 用
--testdox输出易读的测试报告
提交后,GitHub 会自动触发检查,失败时 PR 页面显示红叉,点击可查看详细日志。
不复杂但容易忽略:记得在 composer.json 的 require-dev 中声明 phpunit/phpunit,否则 CI 安装依赖时可能漏掉它;另外,测试类文件名必须以 Test.php 结尾,且类名匹配,否则 PHPUnit 默认扫描不到。










