pkly / phpunit-service-create-trait
PHPUnit 10+ 的辅助特性,简化了具有依赖项的服务在单元测试中的创建
1.0.3
2024-04-26 10:34 UTC
Requires
- php: >=8.2
- phpunit/phpunit: >=10
This package is auto-updated.
Last update: 2024-09-26 11:34:55 UTC
README
PHPUnit 10+ 的辅助特性,简化了具有依赖项的服务在单元测试中的创建
安装
只需运行
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。
测试?更多示例?
我很快会添加它们,目前这段代码正在我工作的几个项目中广泛使用,我厌倦了在多个仓库中更新它。它也非常简单,所以我怀疑没有人会抱怨。
功能请求?
当然,如果您愿意,请提交一个问题。