插件窝 干货文章 告别代码调试噩梦:使用 Composer 和 phpstan/phpstan-mockery 提升单元测试效率

告别代码调试噩梦:使用 Composer 和 phpstan/phpstan-mockery 提升单元测试效率

phpstan 测试 mockery PHPUnit 628    来源:    2025-03-14

在软件开发过程中,单元测试是确保代码质量的关键步骤。然而,调试单元测试中的问题往往令人头疼,尤其是当涉及到复杂的依赖关系和模拟对象时。为了提升单元测试的效率并减少调试的困扰,我们可以借助 Composer 和 phpstan/phpstan-mockery 工具来优化我们的测试流程。

1. 使用 Composer 管理依赖

Composer 是 PHP 生态系统中广泛使用的依赖管理工具。通过 Composer,我们可以轻松地安装和管理项目所需的库和工具,包括测试框架和模拟库。

首先,确保你的项目已经初始化了 Composer。如果没有,可以通过以下命令初始化:

composer init

然后,安装 PHPUnit 和 Mockery,这两个是 PHP 中最常用的测试框架和模拟库:

composer require --dev phpunit/phpunit mockery/mockery

2. 引入 phpstan/phpstan-mockery

phpstan/phpstan-mockery 是一个 PHPStan 扩展,专门用于处理 Mockery 的静态分析。PHPStan 是一个强大的静态分析工具,可以帮助我们在代码运行之前发现潜在的错误。通过结合 Mockery,我们可以更早地发现测试中的问题,从而减少调试时间。

安装 phpstan/phpstan-mockery

composer require --dev phpstan/phpstan-mockery

3. 配置 PHPStan

在项目根目录下创建一个 phpstan.neon 配置文件,并添加以下内容:

includes:
    - vendor/phpstan/phpstan-mockery/extension.neon

parameters:
    level: 5
    paths:
        - src
        - tests

这个配置文件告诉 PHPStan 使用 phpstan-mockery 扩展,并对 srctests 目录进行静态分析。

4. 编写单元测试

现在,我们可以编写单元测试并使用 Mockery 来模拟依赖对象。以下是一个简单的示例:

use Mockery as m;
use PHPUnit\Framework\TestCase;

class MyServiceTest extends TestCase
{
    public function testSomething()
    {
        // 创建一个模拟对象
        $dependency = m::mock(MyDependency::class);
        $dependency->shouldReceive('doSomething')->once()->andReturn('mocked result');

        // 创建被测试的服务,并注入模拟对象
        $service = new MyService($dependency);

        // 执行测试
        $result = $service->doSomething();

        // 断言结果
        $this->assertEquals('mocked result', $result);
    }

    protected function tearDown(): void
    {
        m::close();
    }
}

5. 运行 PHPStan 和 PHPUnit

在编写完测试后,我们可以运行 PHPStan 进行静态分析:

vendor/bin/phpstan analyse

然后运行 PHPUnit 进行单元测试:

vendor/bin/phpunit

通过结合 PHPStan 和 Mockery,我们可以在代码运行之前发现潜在的错误,从而减少调试时间并提高测试效率。

6. 持续集成

为了确保每次代码提交都能通过静态分析和单元测试,可以将 PHPStan 和 PHPUnit 集成到持续集成(CI)流程中。例如,在 GitHub Actions 中,可以添加以下配置:

name: CI

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'

      - name: Install dependencies
        run: composer install --prefer-dist --no-progress --no-suggest

      - name: Run PHPStan
        run: vendor/bin/phpstan analyse

      - name: Run PHPUnit
        run: vendor/bin/phpunit

通过这种方式,每次代码提交都会自动运行静态分析和单元测试,确保代码质量。

总结

通过使用 Composer 管理依赖、引入 phpstan/phpstan-mockery 进行静态分析,并结合 PHPUnit 和 Mockery 编写单元测试,我们可以显著提升单元测试的效率,减少调试时间,并确保代码质量。希望这些工具和方法能帮助你告别代码调试的噩梦,享受更高效的开发体验。