mcpField
P
phpunit-skill

phpunit-skill

github.com/lambdatest测试与质量384271 次安装2 周前更新
代码仓库

关于 phpunit-skill

phpunit-skill 为 PHP 开发者提供 PHPUnit 测试参考,涵盖基础测试模式及从测试数据到 CI 集成的深入实践。

主要功能

  1. 01测试用例与生命周期钩子
  2. 02断言与数据提供器
  3. 03模拟对象与测试替身
  4. 04HTTP、数据库和 CI 模式

适用场景

  1. 01组织隔离的 PHPUnit 测试
  2. 02使用严格断言检查行为
  3. 03测试仓储和 API 端点
  4. 04排查常见测试问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lambdatest/agent-skills --skill phpunit-skill

安装后在 Claude Code 中输入/phpunit-skill确认已加载。

附带文件reference/advanced-patterns.mdreference/playbook.md

详细介绍

PHPUnit 测试技能

核心模式

基本测试
<?php
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase
{
    private Calculator $calculator;

    protected function setUp(): void
    {
        $this->calculator = new Calculator();
    }

    public function testAddition(): void
    {
        $this->assertEquals(5, $this->calculator->add(2, 3));
    }

    public function testDivideByZero(): void
    {
        $this->expectException(\DivisionByZeroError::class);
        $this->calculator->divide(10, 0);
    }

    public function testMultipleAssertions(): void
    {
        $this->assertSame(4, $this->calculator->add(2, 2));
        $this->assertSame(0, $this->calculator->subtract(2, 2));
        $this->assertSame(6, $this->calculator->multiply(2, 3));
    }
}
数据提供器
/**
 * @dataProvider additionProvider
 */
public function testAdd(int $a, int $b, int $expected): void
{
    $this->assertEquals($expected, $this->calculator->add($a, $b));
}

public static function additionProvider(): array
{
    return [
        'positive numbers' => [2, 3, 5],
        'negative numbers' => [-1, -1, -2],
        'zeros'            => [0, 0, 0],
        'mixed'            => [10, -5, 5],
    ];
}
断言
$this->assertEquals($expected, $actual);
$this->assertSame($expected, $actual);          // Strict type
$this->assertNotEquals($unexpected, $actual);
$this->assertTrue($condition);
$this->assertFalse($condition);
$this->assertNull($value);
$this->assertNotNull($value);
$this->assertCount(3, $array);
$this->assertContains('item', $array);
$this->assertArrayHasKey('key', $array);
$this->assertInstanceOf(MyClass::class, $obj);
$this->assertStringContainsString('sub', $string);
$this->assertMatchesRegularExpression('/\d+/', $string);
$this->assertEmpty($collection);
$this->assertGreaterThan(5, $value);
$this->assertJsonStringEqualsJsonString($expected, $actual);
模拟
public function testCreateUser(): void
{
    $mockRepo = $this->createMock(UserRepository::class);
    $mockRepo->expects($this->once())
        ->method('save')
        ->with($this->isInstanceOf(User::class))
        ->willReturn(new User(1, 'Alice'));

    $mockEmail = $this->createMock(EmailService::class);
    $mockEmail->expects($this->once())
        ->method('sendWelcome')
        ->with('[email protected]');

    $service = new UserService($mockRepo, $mockEmail);
    $result = $service->createUser('[email protected]', 'Alice');

    $this->assertEquals(1, $result->getId());
}
生命周期
public static function setUpBeforeClass(): void { }   // Once before all
protected function setUp(): void { }                    // Before each test
protected function tearDown(): void { }                 // After each test
public static function tearDownAfterClass(): void { }  // Once after all
反模式
不佳做法良好做法原因
对严格比较使用 assertEquals使用 assertSame 比较类型和值类型强制转换
不使用数据提供器使用 @dataProvider避免重复
使用全局状态使用 setUp()/tearDown()隔离
不使用分组使用 @group smoke运行部分测试

设置:composer require --dev phpunit/phpunit

运行:./vendor/bin/phpunit 或 ./vendor/bin/phpunit --group smoke

配置:使用测试套件和覆盖率配置的 phpunit.xml

深入模式

生产级模式请参阅 reference/playbook.md:

章节内容
§1 项目设置composer.json、带测试套件的 phpunit.xml、覆盖率配置、项目结构
§2 测试模式断言、#[DataProvider]、Generator 生成值、严格比较
§3 模拟使用回调的 createMock、Mockery 间谍、连续返回值
§4 测试替身内存中的伪实现、仓储模式、测试辅助工具
§5 Faker 与测试固件可覆盖字段的 TestDataFactory、批量生成
§6 异常测试详细的异常断言、警告测试
§7 HTTP 与 API 测试Symfony WebTestCase、身份验证、验证、分页
§8 数据库测试事务回滚、仓储集成、Doctrine
§9 CI/CD 集成使用 MySQL/Redis 的 GitHub Actions、覆盖率阈值
§10 调试表12 个常见问题及其原因和修复方法
§11 最佳实践包含 14 项的生产级 PHP 测试清单

评论

支持 Markdown