pkly / phpunit-service-create-trait

PHPUnit 10+ 的辅助特性,简化了具有依赖项的服务在单元测试中的创建

1.0.3 2024-04-26 10:34 UTC

This package is auto-updated.

Last update: 2024-09-26 11:34:55 UTC


README

PHPUnit 10+ 的辅助特性,简化了具有依赖项的服务在单元测试中的创建

Packagist Downloads

安装

只需运行

composer require --dev pkly/phpunit-service-create-trait

目前仅与 PHPUnit 10 (11?) 兼容

用法

在您的任何 PHPUnit 测试用例中简单地

class MyTestCase extends \PHPUnit\Framework\TestCase {
    use \Pkly\ServiceMockHelperTrait;
    
    private AnyClass $service;
    
    public function setUp(): void {
        $this->service = $this->createRealMockedServiceInstance(AnyClass::class);
    }

    public function testSomething(): void
    {
        $mock = $this->createMock(MyEntity::class);
    
        $this->getMockedService(EntityManagerInterface::class)
            ->expects($this->once())
            ->method('delete')
            ->with($mock);
            
        $this->service->deleteSomething($mock);
    }
}

构造函数以及标记有 Symfony 的 #[Required] 属性的方法中的任何依赖项都将自动用模拟插件。这允许您在不浪费时间更新构造调用的情况下编写复杂的测试。

好吧,但如果我需要使用自定义的东西怎么办呢?

只需在适当的函数中为 $constructor$required 分配正确的参数名。这将会使用您的对象而不是为您创建一个,请记住您不能通过 $this->getMockedService() 获取它。

部分对象呢?

当然,工作方式相同,只需用 createRealPartialMockedServiceInstance 替代 createRealMockedServiceInstance,在这种情况下,您还必须指定要覆盖的模拟方法。返回的实例是 T&MockObject

测试?更多示例?

我很快会添加它们,目前这段代码正在我工作的几个项目中广泛使用,我厌倦了在多个仓库中更新它。它也非常简单,所以我怀疑没有人会抱怨。

功能请求?

当然,如果您愿意,请提交一个问题。