定制 webignition/symfony-test-service-injector-trait 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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 TestClassServicePropertyInjectorTrait in any test that extends Symfony\Bundle\FrameworkBundle\Test\KernelTestCase
  • call $this->injectContainerServicesIntoClassProperties() in your setUp() method

What It Does

Sets all private and protected properties to their respective services. For a property to be set it must:

  • be private or protected
  • 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

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-11-13

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固