Как прописать специфичные для тест кейса определения в контейнер в API тестах?

В Yii фреймворке для PHP есть возможность использовать контейнер зависимостей, который позволяет более эффективно управлять зависимостями в приложении. В API тестах это может быть особенно полезно, так как вы можете использовать контейнер для определения специфичных зависимостей для каждого теста.

Для прописывания специфичных для тест кейса определений в контейнере в API тестах в Yii, вы можете использовать следующий подход:

1. Создайте класс расширяющий yiidiContainer, который будет управлять определениями зависимостей для каждого теста. Назовем его TestContainer.

   <?php
   
   namespace apptests;
   
   use yiidiContainer;
   
   class TestContainer extends Container
   {
       public function __construct($config = [])
       {
           parent::__construct($config);
           // Здесь вы можете прописывать специфичные для тест кейса определения
           // например:
           //$this->set('SomeDependency', ['class' => 'apptestsSomeDependency']);
       }
   }

2. В каждом тестовом классе, в котором вы хотите использовать контейнер, создайте метод getContainer(), который будет возвращать экземпляр класса TestContainer.

   <?php
   
   namespace apptests;
   
   use Yii;
   use appcontrollersSomeController;
   
   class SomeTest extends PHPUnitFrameworkTestCase
   {
       private $container;
   
       protected function setUp()
       {
           parent::setUp();
           $this->container = $this->getContainer();
       }
   
       protected function tearDown()
       {
           $this->container = null;
           parent::tearDown();
       }
   
       public function getContainer()
       {
           if ($this->container === null) {
               $this->container = new TestContainer();
               Yii::$container = $this->container;
           }
   
           return $this->container;
       }
   
       public function testSomeAction()
       {
           // Здесь вы можете использовать контейнер для получения зависимостей
           // например:
           //$someDependency = $this->container->get('SomeDependency');
           //$someController = new SomeController($someDependency);
           //$result = $someController->someAction();
   
           // Здесь вы можете выполнять тесты на результат
           //$this->assertEquals($expectedResult, $result);
       }
   }

Когда вы запустите свои API тесты, каждый тест создаст свой собственный экземпляр TestContainer, в котором будут прописаны специфичные для теста определения. Это позволяет вам управлять зависимостями и тестируемыми объектами в каждом конкретном тесте.