webignition/symfony-test-service-injector-trait
Composer 安装命令:
composer require --dev webignition/symfony-test-service-injector-trait
包简介
Inject Symfony services into test class properties
README 文档
README
A trait to use in your Symfony tests to populate test class properties with their services from the container.
How to Use It
use TestClassServicePropertyInjectorTraitin any test that extendsSymfony\Bundle\FrameworkBundle\Test\KernelTestCase- call
$this->injectContainerServicesIntoClassProperties()in yoursetUp()method
What It Does
Sets all private and protected properties to their respective services. For a property to be set it must:
- be
privateorprotected - be type-hinted to a non-scalar type
- have a type hint that matches a service in the container
Usage Example
use App\Services\FooService; use App\Services\BarService; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use webignition\SymfonyTestServiceInjectorTrait\TestClassServicePropertyInjectorTrait; class AcmeControllerTest extends WebTestCase { use TestClassServicePropertyInjectorTrait; private FooService $fooService; private BarService $barService; protected function setUp(): void { parent::setUp(); $this->injectContainerServicesIntoClassProperties(); } public function testUsingFooService(): void { $foo = $this->fooService->createFoo(); // ... carry out tests that depend on FooService creating $foo } public function testUsingBarService(): void { $bar = $this->barService->createBar(); // ... carry out tests that depend on BarService creating $bar } }
Before-and-after Comparison
Before
use App\Services\ServiceA; use App\Services\ServiceB; use App\Services\ServiceC; use App\Services\ServiceD; use App\Services\ServiceE; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class AcmeControllerTest extends WebTestCase { private ServiceA $serviceA; private ServiceB $serviceB; private ServiceC $serviceC; private ServiceD $serviceD; private ServiceE $serviceE; protected function setUp(): void { parent::setUp(); $serviceA = self::$container->get(ServiceA::class); if ($serviceA instanceof ServiceA) { $this->serviceA = $serviceA; } $serviceB = self::$container->get(ServiceB::class); if ($serviceB instanceof ServiceB) { $this->$serviceB = $serviceB; } $serviceC = self::$container->get(ServiceC::class); if ($serviceC instanceof ServiceC) { $this->$serviceC = $serviceC; } $serviceD = self::$container->get(ServiceD::class); if ($serviceD instanceof ServiceD) { $this->$serviceD = $serviceD; } $serviceE = self::$container->get(ServiceE::class); if ($serviceE instanceof ServiceE) { $this->$serviceE = $serviceE; } } }
After
use App\Services\ServiceA; use App\Services\ServiceB; use App\Services\ServiceC; use App\Services\ServiceD; use App\Services\ServiceE; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use webignition\SymfonyTestServiceInjectorTrait\TestClassServicePropertyInjectorTrait; class AcmeControllerTest extends WebTestCase { use TestClassServicePropertyInjectorTrait; private ServiceA $serviceA; private ServiceB $serviceB; private ServiceC $serviceC; private ServiceD $serviceD; private ServiceE $serviceE; protected function setUp(): void { parent::setUp(); $this->injectContainerServicesIntoClassProperties(); } }
统计信息
- 总下载量: 4.77k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-11-13