From cf235e0c2960b3bfcf81f03e6dbce909d6a4ca51 Mon Sep 17 00:00:00 2001
From: Alexander Schnitzler <git@alexanderschnitzler.de>
Date: Tue, 8 Sep 2020 16:28:02 +0200
Subject: [PATCH] [TASK] Avoid objectManager->get() in functional tests

To further phase out extbase ObjectManager, the
functional tests now use container->get() to set
up tests.
Some fixture files are moved to over to full
test extensions to supply a Services.yaml file.

Releases: master
Resolves: #94008
Change-Id: I990e95b05b17b648db3861aa4e5618d59ac6ade9
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/65639
Tested-by: core-ci <typo3@b13.com>
Tested-by: Benni Mack <benni@typo3.org>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 composer.json                                 |  1 +
 .../Domain/Repository/BlogRepository.php      | 12 ---
 .../Classes/Domain/Repository/ARepository.php |  5 +-
 .../a/Configuration/Services.yaml             | 11 +++
 .../class_overriding/a/ext_localconf.php      |  3 -
 .../Classes/Domain/Repository/BRepository.php |  5 +-
 .../ActionControllerArgumentTest.php          | 37 +++------
 .../Mvc/Controller/ActionControllerTest.php   | 43 ++++++-----
 .../ControllerArgumentsMappingTest.php        | 10 +--
 .../Domain/Validator/ModelValidator.php       | 33 --------
 .../Controller/ArgumentTestController.php     | 28 +++----
 .../Classes}/Domain/Model/Model.php           |  2 +-
 .../Classes}/Domain/Model/ModelDto.php        |  2 +-
 .../Validation/Validator/FailingValidator.php |  2 +-
 .../Configuration/Services.yaml               |  8 ++
 .../Private/Templates}/InputPresetDto.html    |  0
 .../Private/Templates}/InputPresetModel.html  |  0
 .../ext_emconf.php                            | 21 ++++++
 .../Classes}/Controller/TestController.php    |  6 +-
 .../Classes/Domain/Model/Model.php            | 72 ++++++++++++++++++
 .../Configuration/Services.yaml               |  8 ++
 .../action_controller_test/ext_emconf.php     | 21 ++++++
 .../ActionControllerValidationTest.php        | 25 ++-----
 .../Functional/Mvc/Web/RequestBuilderTest.php | 61 +++++----------
 .../Pagination/QueryResultPaginatorTest.php   |  7 +-
 .../Tests/Functional/Persistence/AddTest.php  | 28 ++-----
 .../Functional/Persistence/CountTest.php      | 30 +-------
 .../Generic/Mapper/DataMapFactoryTest.php     | 14 +---
 .../Generic/Mapper/DataMapperTest.php         | 14 +---
 .../ImplementationClassNameTest.php           | 20 +----
 .../Tests/Functional/Persistence/InTest.php   | 22 ++----
 .../Functional/Persistence/IsDirtyTest.php    | 17 +----
 .../Functional/Persistence/OperatorTest.php   | 16 +---
 .../Persistence/QueryLocalizedDataTest.php    | 19 ++---
 .../Persistence/QueryParserTest.php           | 41 +++-------
 .../Functional/Persistence/RelationTest.php   | 75 ++++++-------------
 .../Persistence/TranslatedSiteContentTest.php | 13 +---
 .../Persistence/TranslationTest.php           | 11 +--
 .../Functional/Persistence/WorkspaceTest.php  |  9 +--
 typo3/sysext/extbase/composer.json            |  3 +-
 40 files changed, 309 insertions(+), 446 deletions(-)
 create mode 100644 typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/Configuration/Services.yaml
 delete mode 100644 typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/ext_localconf.php
 delete mode 100644 typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Domain/Validator/ModelValidator.php
 rename typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/{ => Extension/action_controller_argument_test/Classes}/Controller/ArgumentTestController.php (64%)
 rename typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/{ => Extension/action_controller_argument_test/Classes}/Domain/Model/Model.php (93%)
 rename typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/{ => Extension/action_controller_argument_test/Classes}/Domain/Model/ModelDto.php (93%)
 rename typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/{ => Extension/action_controller_argument_test/Classes/Domain}/Validation/Validator/FailingValidator.php (89%)
 create mode 100644 typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Configuration/Services.yaml
 rename typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/{Templates/ArgumentTest => Extension/action_controller_argument_test/Resources/Private/Templates}/InputPresetDto.html (100%)
 rename typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/{Templates/ArgumentTest => Extension/action_controller_argument_test/Resources/Private/Templates}/InputPresetModel.html (100%)
 create mode 100644 typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/ext_emconf.php
 rename typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/{ => Extension/action_controller_test/Classes}/Controller/TestController.php (88%)
 create mode 100644 typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Classes/Domain/Model/Model.php
 create mode 100644 typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Configuration/Services.yaml
 create mode 100644 typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/ext_emconf.php

diff --git a/composer.json b/composer.json
index 06721b02f4b6..27f707e0d9b9 100644
--- a/composer.json
+++ b/composer.json
@@ -270,6 +270,7 @@
 			"typo3/sysext/extbase/Tests/Unit/Object/Container/Fixtures/",
 			"typo3/sysext/extbase/Tests/UnitDeprecated/Object/Container/Fixtures/",
 			"typo3/sysext/extbase/Tests/Functional/Fixtures/",
+			"typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/",
 			"typo3/sysext/fluid/Tests/Functional/Fixtures/Extensions/fluid_test/Classes/"
 		],
 		"files": [
diff --git a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Classes/Domain/Repository/BlogRepository.php b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Classes/Domain/Repository/BlogRepository.php
index 5c48ea1a9003..4100585f316e 100644
--- a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Classes/Domain/Repository/BlogRepository.php
+++ b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Classes/Domain/Repository/BlogRepository.php
@@ -27,16 +27,4 @@ class BlogRepository extends Repository
         'crdate' => QueryInterface::ORDER_DESCENDING,
         'uid' => QueryInterface::ORDER_DESCENDING
     ];
-
-    /**
-     * Life cycle method.
-     */
-    public function initializeObject()
-    {
-        /*
-        $querySettings = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings::class);
-        $querySettings->setRespectStoragePage(FALSE);
-        $this->setDefaultQuerySettings($querySettings);
-         */
-    }
 }
diff --git a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/Classes/Domain/Repository/ARepository.php b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/Classes/Domain/Repository/ARepository.php
index 3684710dd2df..ad567d79a1c9 100644
--- a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/Classes/Domain/Repository/ARepository.php
+++ b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/Classes/Domain/Repository/ARepository.php
@@ -15,13 +15,10 @@ declare(strict_types=1);
  * The TYPO3 project - inspiring people to share!
  */
 
-namespace ExtbaseTeam\A\Domain\Model;
+namespace ExtbaseTeam\A\Domain\Repository;
 
 use TYPO3\CMS\Extbase\Persistence\Repository;
 
-/**
- * Class ExtbaseTeam\A\Domain\Model\ARepository
- */
 class ARepository extends Repository
 {
 }
diff --git a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/Configuration/Services.yaml b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/Configuration/Services.yaml
new file mode 100644
index 000000000000..c3f4e7a63124
--- /dev/null
+++ b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/Configuration/Services.yaml
@@ -0,0 +1,11 @@
+services:
+  _defaults:
+    autowire: true
+    autoconfigure: true
+    public: false
+
+  ExtbaseTeam\A\Domain\Repository\ARepository:
+    public: true
+
+  ExtbaseTeam\B\Domain\Repository\BRepository:
+    public: true
diff --git a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/ext_localconf.php b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/ext_localconf.php
deleted file mode 100644
index 871e1f782998..000000000000
--- a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/a/ext_localconf.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-
-defined('TYPO3') or die();
diff --git a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/b/Classes/Domain/Repository/BRepository.php b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/b/Classes/Domain/Repository/BRepository.php
index 4dd09e3fbb06..e9d72aa7c6ca 100644
--- a/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/b/Classes/Domain/Repository/BRepository.php
+++ b/typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/b/Classes/Domain/Repository/BRepository.php
@@ -15,13 +15,10 @@ declare(strict_types=1);
  * The TYPO3 project - inspiring people to share!
  */
 
-namespace ExtbaseTeam\B\Domain\Model;
+namespace ExtbaseTeam\B\Domain\Repository;
 
 use TYPO3\CMS\Extbase\Persistence\Repository;
 
-/**
- * Class ExtbaseTeam\B\Domain\Model\BRepository
- */
 class BRepository extends Repository
 {
 }
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ActionControllerArgumentTest.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ActionControllerArgumentTest.php
index 9ba850f5eaf4..1e9ed0eecd67 100644
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ActionControllerArgumentTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ActionControllerArgumentTest.php
@@ -17,19 +17,16 @@ declare(strict_types=1);
 
 namespace TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller;
 
+use ExtbaseTeam\ActionControllerArgumentTest\Controller\ArgumentTestController;
+use ExtbaseTeam\ActionControllerArgumentTest\Domain\Model\Model;
+use ExtbaseTeam\ActionControllerArgumentTest\Domain\Model\ModelDto;
 use Psr\Http\Message\ResponseInterface;
 use TYPO3\CMS\Core\Utility\ArrayUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Http\ForwardResponse;
 use TYPO3\CMS\Extbase\Mvc\Dispatcher;
 use TYPO3\CMS\Extbase\Mvc\Exception\StopActionException;
 use TYPO3\CMS\Extbase\Mvc\Request;
 use TYPO3\CMS\Extbase\Mvc\RequestInterface;
-use TYPO3\CMS\Extbase\Object\Container\Container;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
-use TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Controller\ArgumentTestController;
-use TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model\Model;
-use TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model\ModelDto;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
 /**
@@ -39,36 +36,26 @@ class ActionControllerArgumentTest extends FunctionalTestCase
 {
     private const ENCRYPTION_KEY = '4408d27a916d51e624b69af3554f516dbab61037a9f7b9fd6f81b4d3bedeccb6';
 
-    /**
-     * @var ObjectManager
-     */
-    protected $objectManager;
+    private string $pluginName = 'Pi1';
+    private string $extensionName = 'ActionControllerArgumentTest';
+    private ?string $pluginNamespacePrefix = null;
 
     /**
-     * @var Container
+     * @var array
      */
-    protected $objectContainer;
-
-    private $pluginName;
-    private $extensionName;
-    private $pluginNamespacePrefix;
+    protected $testExtensionsToLoad = [
+        'typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test',
+    ];
 
     protected function setUp(): void
     {
         parent::setUp();
-
-        $this->pluginName = 'Pi1';
-        $this->extensionName = 'Extbase\\Tests\\Functional\\Mvc\\Controller\\Fixture';
         $this->pluginNamespacePrefix = strtolower('tx_' . $this->extensionName . '_' . $this->pluginName);
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->objectContainer = $this->objectManager->get(Container::class);
         $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] = self::ENCRYPTION_KEY;
     }
 
     protected function tearDown(): void
     {
-        unset($this->objectManager, $this->objectContainer);
-        unset($this->extensionName, $this->pluginName, $this->pluginNamespacePrefix);
         unset($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey']);
         parent::tearDown();
     }
@@ -227,7 +214,7 @@ class ActionControllerArgumentTest extends FunctionalTestCase
 
     private function buildRequest(string $actionName, array $arguments = null): Request
     {
-        $request = $this->objectManager->get(Request::class);
+        $request = new Request();
         $request->setPluginName($this->pluginName);
         $request->setControllerExtensionName($this->extensionName);
         $request->setControllerName('ArgumentTest');
@@ -242,6 +229,6 @@ class ActionControllerArgumentTest extends FunctionalTestCase
 
     private function buildController(): ArgumentTestController
     {
-        return $this->objectManager->get(ArgumentTestController::class);
+        return $this->getContainer()->get(ArgumentTestController::class);
     }
 }
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ActionControllerTest.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ActionControllerTest.php
index 438c677c8544..59f0c05fc4e6 100644
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ActionControllerTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ActionControllerTest.php
@@ -17,12 +17,10 @@ declare(strict_types=1);
 
 namespace TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller;
 
+use ExtbaseTeam\ActionControllerTest\Controller\TestController;
 use Psr\Http\Message\ResponseInterface;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Mvc\Request;
 use TYPO3\CMS\Extbase\Mvc\View\JsonView;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
-use TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Controller\TestController;
 use TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Validation\Validator\CustomValidator;
 use TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator;
 use TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator;
@@ -34,7 +32,7 @@ use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 class ActionControllerTest extends FunctionalTestCase
 {
     /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Request
+     * @var Request
      */
     protected $request;
 
@@ -44,24 +42,29 @@ class ActionControllerTest extends FunctionalTestCase
     protected $response;
 
     /**
-     * @var \TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Controller\TestController
+     * @var TestController
      */
-    protected $controller;
+    protected $subject;
+
+    /**
+     * @var array
+     */
+    protected $testExtensionsToLoad = [
+        'typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test',
+    ];
 
     protected function setUp(): void
     {
         parent::setUp();
 
-        $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-
-        $this->request = $objectManager->get(Request::class);
+        $this->request = new Request();
         $this->request->setPluginName('Pi1');
-        $this->request->setControllerExtensionName('Extbase\\Tests\\Functional\\Mvc\\Controller\\Fixture');
+        $this->request->setControllerExtensionName('ActionControllerTest');
         $this->request->setControllerName('Test');
         $this->request->setMethod('GET');
         $this->request->setFormat('html');
 
-        $this->controller = $objectManager->get(TestController::class);
+        $this->subject = $this->getContainer()->get(TestController::class);
     }
 
     /**
@@ -74,10 +77,10 @@ class ActionControllerTest extends FunctionalTestCase
         $this->request->setArgument('barParam', '');
 
         // Test run
-        $this->controller->processRequest($this->request);
+        $this->subject->processRequest($this->request);
 
         // Assertions
-        $arguments = $this->controller->getControllerContext()->getArguments();
+        $arguments = $this->subject->getControllerContext()->getArguments();
         $argument = $arguments->getArgument('barParam');
 
         /** @var ConjunctionValidator $validator */
@@ -102,10 +105,10 @@ class ActionControllerTest extends FunctionalTestCase
         $this->request->setArgument('bazParam', [ 'notEmpty' ]);
 
         // Test run
-        $this->controller->processRequest($this->request);
+        $this->subject->processRequest($this->request);
 
         // Assertions
-        $arguments = $this->controller->getControllerContext()->getArguments();
+        $arguments = $this->subject->getControllerContext()->getArguments();
         $argument = $arguments->getArgument('bazParam');
 
         /** @var ConjunctionValidator $validator */
@@ -127,22 +130,22 @@ class ActionControllerTest extends FunctionalTestCase
     public function resolveViewRespectsDefaultViewObjectName()
     {
         // Test setup
-        $reflectionClass = new \ReflectionClass($this->controller);
+        $reflectionClass = new \ReflectionClass($this->subject);
         $reflectionMethod = $reflectionClass->getProperty('defaultViewObjectName');
         $reflectionMethod->setAccessible(true);
-        $reflectionMethod->setValue($this->controller, JsonView::class);
+        $reflectionMethod->setValue($this->subject, JsonView::class);
 
         $this->request->setControllerActionName('qux');
 
         // Test run
-        $this->controller->processRequest($this->request);
+        $this->subject->processRequest($this->request);
 
         // Assertions
         $reflectionMethod = $reflectionClass->getProperty('view');
         $reflectionMethod->setAccessible(true);
-        $reflectionMethod->getValue($this->controller);
+        $reflectionMethod->getValue($this->subject);
 
-        $view = $reflectionMethod->getValue($this->controller);
+        $view = $reflectionMethod->getValue($this->subject);
         self::assertInstanceOf(JsonView::class, $view);
     }
 }
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ControllerArgumentsMappingTest.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ControllerArgumentsMappingTest.php
index 9991b99f6757..60b968e6a5ba 100644
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ControllerArgumentsMappingTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/ControllerArgumentsMappingTest.php
@@ -22,9 +22,8 @@ use Psr\Http\Message\ResponseInterface;
 use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Context\LanguageAspect;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
+use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;
 use TYPO3\CMS\Extbase\Mvc\Request;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
 /**
@@ -63,7 +62,6 @@ class ControllerArgumentsMappingTest extends FunctionalTestCase
 
         $this->importCSVDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/translatedBlogExampleData.csv');
 
-        $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
         $configuration = [
             'persistence' => [
                 'storagePid' => 20,
@@ -74,16 +72,16 @@ class ControllerArgumentsMappingTest extends FunctionalTestCase
                 ]
             ]
         ];
-        $configurationManager = $objectManager->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
-        $this->request = $objectManager->get(Request::class);
+        $this->request = new Request();
         $this->request->setPluginName('Pi1');
         $this->request->setControllerExtensionName(BlogController::class);
         $this->request->setControllerName('Blog');
         $this->request->setMethod('GET');
         $this->request->setFormat('html');
 
-        $this->controller = $objectManager->get(BlogController::class);
+        $this->controller = $this->getContainer()->get(BlogController::class);
     }
 
     public function actionGetsBlogFromUidArgumentDataProvider()
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Domain/Validator/ModelValidator.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Domain/Validator/ModelValidator.php
deleted file mode 100644
index 1fad869e520a..000000000000
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Domain/Validator/ModelValidator.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-namespace TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Validator;
-
-use TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator;
-
-/**
- * Fixture model validator
- */
-class ModelValidator extends AbstractValidator
-{
-    /**
-     * @param mixed $value
-     */
-    protected function isValid($value)
-    {
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Controller/ArgumentTestController.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Controller/ArgumentTestController.php
similarity index 64%
rename from typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Controller/ArgumentTestController.php
rename to typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Controller/ArgumentTestController.php
index 3c3bdd9cf37f..b01c5d020a56 100644
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Controller/ArgumentTestController.php
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Controller/ArgumentTestController.php
@@ -15,16 +15,14 @@ declare(strict_types=1);
  * The TYPO3 project - inspiring people to share!
  */
 
-namespace TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Controller;
+namespace ExtbaseTeam\ActionControllerArgumentTest\Controller;
 
+use ExtbaseTeam\ActionControllerArgumentTest\Domain\Model\Model;
+use ExtbaseTeam\ActionControllerArgumentTest\Domain\Model\ModelDto;
 use Psr\Http\Message\ResponseInterface;
 use TYPO3\CMS\Extbase\Annotation as Extbase;
 use TYPO3\CMS\Extbase\Http\ForwardResponse;
 use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
-use TYPO3\CMS\Extbase\Mvc\View\ViewInterface;
-use TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model\Model;
-use TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model\ModelDto;
-use TYPO3\CMS\Fluid\View\TemplateView;
 
 /**
  * Fixture controller
@@ -55,14 +53,6 @@ class ArgumentTestController extends ActionController
         $this->forwardTargetArguments = $forwardTargetArguments;
     }
 
-    protected function setViewConfiguration(ViewInterface $view)
-    {
-        if ($view instanceof TemplateView) {
-            // assign template path directly without forging external configuration for that...
-            $view->getTemplatePaths()->setTemplateRootPaths([dirname(__DIR__) . '/Templates']);
-        }
-    }
-
     protected function addErrorFlashMessage()
     {
         // ignore flash messages
@@ -74,7 +64,7 @@ class ArgumentTestController extends ActionController
     }
 
     /**
-     * @param \TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model\Model $preset
+     * @param \ExtbaseTeam\ActionControllerArgumentTest\Domain\Model\Model $preset
      */
     public function inputPresetModelAction(Model $preset): void
     {
@@ -86,7 +76,7 @@ class ArgumentTestController extends ActionController
     }
 
     /**
-     * @param \TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model\ModelDto $preset
+     * @param \ExtbaseTeam\ActionControllerArgumentTest\Domain\Model\ModelDto $preset
      */
     public function inputPresetDtoAction(ModelDto $preset): void
     {
@@ -98,8 +88,8 @@ class ArgumentTestController extends ActionController
     }
 
     /**
-     * @param \TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model\Model $model
-     * @Extbase\Validate("TYPO3.CMS.Extbase.Tests.Functional.Mvc.Controller.Fixture:FailingValidator", param="model")
+     * @param \ExtbaseTeam\ActionControllerArgumentTest\Domain\Model\Model $model
+     * @Extbase\Validate("ExtbaseTeam.ActionControllerArgumentTest.Domain:FailingValidator", param="model")
      */
     public function validateModelAction($model): void
     {
@@ -107,8 +97,8 @@ class ArgumentTestController extends ActionController
     }
 
     /**
-     * @param \TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model\ModelDto $dto
-     * @Extbase\Validate("TYPO3.CMS.Extbase.Tests.Functional.Mvc.Controller.Fixture:FailingValidator", param="dto")
+     * @param \ExtbaseTeam\ActionControllerArgumentTest\Domain\Model\ModelDto $dto
+     * @Extbase\Validate("ExtbaseTeam.ActionControllerArgumentTest.Domain:FailingValidator", param="dto")
      */
     public function validateDtoAction($dto): void
     {
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Domain/Model/Model.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Domain/Model/Model.php
similarity index 93%
rename from typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Domain/Model/Model.php
rename to typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Domain/Model/Model.php
index fbdc2df6a174..c86112b102be 100644
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Domain/Model/Model.php
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Domain/Model/Model.php
@@ -15,7 +15,7 @@ declare(strict_types=1);
  * The TYPO3 project - inspiring people to share!
  */
 
-namespace TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model;
+namespace ExtbaseTeam\ActionControllerArgumentTest\Domain\Model;
 
 use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
 
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Domain/Model/ModelDto.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Domain/Model/ModelDto.php
similarity index 93%
rename from typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Domain/Model/ModelDto.php
rename to typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Domain/Model/ModelDto.php
index fd8ed59b884e..fab79966478e 100644
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Domain/Model/ModelDto.php
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Domain/Model/ModelDto.php
@@ -15,7 +15,7 @@ declare(strict_types=1);
  * The TYPO3 project - inspiring people to share!
  */
 
-namespace TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model;
+namespace ExtbaseTeam\ActionControllerArgumentTest\Domain\Model;
 
 /**
  * Fixture model data transfer object
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Validation/Validator/FailingValidator.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Domain/Validation/Validator/FailingValidator.php
similarity index 89%
rename from typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Validation/Validator/FailingValidator.php
rename to typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Domain/Validation/Validator/FailingValidator.php
index e514d2d952f5..4a17b062c46c 100644
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Validation/Validator/FailingValidator.php
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Classes/Domain/Validation/Validator/FailingValidator.php
@@ -15,7 +15,7 @@ declare(strict_types=1);
  * The TYPO3 project - inspiring people to share!
  */
 
-namespace TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Validation\Validator;
+namespace ExtbaseTeam\ActionControllerArgumentTest\Domain\Validation\Validator;
 
 use TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator;
 
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Configuration/Services.yaml b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Configuration/Services.yaml
new file mode 100644
index 000000000000..3383e553889f
--- /dev/null
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Configuration/Services.yaml
@@ -0,0 +1,8 @@
+services:
+  _defaults:
+    autowire: true
+    autoconfigure: true
+    public: false
+
+  ExtbaseTeam\ActionControllerArgumentTest\Controller\ArgumentTestController:
+    public: true
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Templates/ArgumentTest/InputPresetDto.html b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Resources/Private/Templates/InputPresetDto.html
similarity index 100%
rename from typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Templates/ArgumentTest/InputPresetDto.html
rename to typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Resources/Private/Templates/InputPresetDto.html
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Templates/ArgumentTest/InputPresetModel.html b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Resources/Private/Templates/InputPresetModel.html
similarity index 100%
rename from typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Templates/ArgumentTest/InputPresetModel.html
rename to typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/Resources/Private/Templates/InputPresetModel.html
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/ext_emconf.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/ext_emconf.php
new file mode 100644
index 000000000000..9ca073f22eee
--- /dev/null
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_argument_test/ext_emconf.php
@@ -0,0 +1,21 @@
+<?php
+
+$EM_CONF[$_EXTKEY] = [
+    'title' => '',
+    'description' => '',
+    'category' => 'example',
+    'author' => '',
+    'author_company' => '',
+    'author_email' => '',
+    'state' => 'stable',
+    'uploadfolder' => 0,
+    'clearCacheOnLoad' => 1,
+    'version' => '11.2.0',
+    'constraints' => [
+        'depends' => [
+            'typo3' => '11.2.0',
+        ],
+        'conflicts' => [],
+        'suggests' => [],
+    ],
+];
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Controller/TestController.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Classes/Controller/TestController.php
similarity index 88%
rename from typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Controller/TestController.php
rename to typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Classes/Controller/TestController.php
index 6f2b22aead7c..05ad059e34e4 100644
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Controller/TestController.php
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Classes/Controller/TestController.php
@@ -15,13 +15,13 @@ declare(strict_types=1);
  * The TYPO3 project - inspiring people to share!
  */
 
-namespace TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Controller;
+namespace ExtbaseTeam\ActionControllerTest\Controller;
 
+use ExtbaseTeam\ActionControllerTest\Domain\Model\Model;
 use TYPO3\CMS\Extbase\Annotation as Extbase;
 use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
 use TYPO3\CMS\Extbase\Mvc\Controller\MvcPropertyMappingConfiguration;
 use TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter;
-use TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model\Model;
 
 /**
  * Fixture controller
@@ -41,7 +41,7 @@ class TestController extends ActionController
     }
 
     /**
-     * @param \TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\Fixture\Domain\Model\Model $fooParam
+     * @param \ExtbaseTeam\ActionControllerTest\Domain\Model\Model $fooParam
      * @return string
      */
     public function fooAction(Model $fooParam)
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Classes/Domain/Model/Model.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Classes/Domain/Model/Model.php
new file mode 100644
index 000000000000..5519f022ec1b
--- /dev/null
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Classes/Domain/Model/Model.php
@@ -0,0 +1,72 @@
+<?php
+
+declare(strict_types=1);
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+namespace ExtbaseTeam\ActionControllerTest\Domain\Model;
+
+use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
+
+/**
+ * Fixture model
+ */
+class Model extends AbstractEntity
+{
+    /**
+     * @var string
+     */
+    protected $value;
+
+    /**
+     * @var Model
+     */
+    protected $model;
+
+    /**
+     * @return string
+     */
+    public function getValue(): string
+    {
+        return $this->value;
+    }
+
+    /**
+     * @param string $value
+     * @return self
+     */
+    public function setValue(string $value): self
+    {
+        $this->value = $value;
+        return $this;
+    }
+
+    /**
+     * @return Model
+     */
+    public function getModel(): Model
+    {
+        return $this->model;
+    }
+
+    /**
+     * @param Model $model
+     * @return self
+     */
+    public function setModel(Model $model): self
+    {
+        $this->model = $model;
+        return $this;
+    }
+}
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Configuration/Services.yaml b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Configuration/Services.yaml
new file mode 100644
index 000000000000..1d4f8b4962d1
--- /dev/null
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/Configuration/Services.yaml
@@ -0,0 +1,8 @@
+services:
+  _defaults:
+    autowire: true
+    autoconfigure: true
+    public: false
+
+  ExtbaseTeam\ActionControllerTest\Controller\TestController:
+    public: true
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/ext_emconf.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/ext_emconf.php
new file mode 100644
index 000000000000..9ca073f22eee
--- /dev/null
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Controller/Fixture/Extension/action_controller_test/ext_emconf.php
@@ -0,0 +1,21 @@
+<?php
+
+$EM_CONF[$_EXTKEY] = [
+    'title' => '',
+    'description' => '',
+    'category' => 'example',
+    'author' => '',
+    'author_company' => '',
+    'author_email' => '',
+    'state' => 'stable',
+    'uploadfolder' => 0,
+    'clearCacheOnLoad' => 1,
+    'version' => '11.2.0',
+    'constraints' => [
+        'depends' => [
+            'typo3' => '11.2.0',
+        ],
+        'conflicts' => [],
+        'suggests' => [],
+    ],
+];
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Validation/ActionControllerValidationTest.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Validation/ActionControllerValidationTest.php
index 0b4fea45a613..b0047104a486 100644
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Validation/ActionControllerValidationTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Validation/ActionControllerValidationTest.php
@@ -18,7 +18,6 @@ namespace TYPO3\CMS\Extbase\Tests\Functional\Mvc\Validation;
 use ExtbaseTeam\BlogExample\Controller\BlogController;
 use TYPO3\CMS\Core\Http\Response;
 use TYPO3\CMS\Core\Localization\LanguageService;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Error\Error;
 use TYPO3\CMS\Extbase\Error\Result;
 use TYPO3\CMS\Extbase\Http\ForwardResponse;
@@ -26,7 +25,6 @@ use TYPO3\CMS\Extbase\Mvc\Controller\MvcPropertyMappingConfigurationService;
 use TYPO3\CMS\Extbase\Mvc\Dispatcher;
 use TYPO3\CMS\Extbase\Mvc\Exception\StopActionException;
 use TYPO3\CMS\Extbase\Mvc\Request;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Security\Cryptography\HashService;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
@@ -77,9 +75,8 @@ class ActionControllerValidationTest extends FunctionalTestCase
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml');
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/posts.xml');
 
-        $objectManager = $this->getObjectManager();
         $response = new Response();
-        $request = $objectManager->get(Request::class);
+        $request = new Request();
 
         $request->setControllerActionName('testForward');
         $request->setArgument('blogPost', $blogPostArgument);
@@ -95,7 +92,7 @@ class ActionControllerValidationTest extends FunctionalTestCase
         $titleMappingResults = new Result();
         while (!$request->isDispatched()) {
             try {
-                $blogController = $objectManager->get(BlogController::class);
+                $blogController = $this->getContainer()->get(BlogController::class);
                 $response = $blogController->processRequest($request);
                 if ($response instanceof ForwardResponse) {
                     $titleMappingResults = $response->getArgumentsValidationResult()->forProperty('blogPost.title');
@@ -129,8 +126,8 @@ class ActionControllerValidationTest extends FunctionalTestCase
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml');
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/posts.xml');
 
-        $objectManager = $this->getObjectManager();
-        $request = $objectManager->get(Request::class);
+        $response = new Response();
+        $request = new Request();
 
         $request->setControllerActionName('testRelatedObject');
         $request->setArgument('blog', ['__identity' => 1, 'description' => str_repeat('test', 40)]);
@@ -161,7 +158,7 @@ class ActionControllerValidationTest extends FunctionalTestCase
 
         while (!$request->isDispatched()) {
             try {
-                $blogController = $objectManager->get(BlogController::class);
+                $blogController = $this->getContainer()->get(BlogController::class);
                 $response = $blogController->processRequest($request);
                 if ($response instanceof ForwardResponse) {
 
@@ -189,7 +186,7 @@ class ActionControllerValidationTest extends FunctionalTestCase
      */
     protected function generateTrustedPropertiesToken(array $formFieldNames)
     {
-        $mvcPropertyMappingConfigurationService = $this->getObjectManager()->get(
+        $mvcPropertyMappingConfigurationService = $this->getContainer()->get(
             MvcPropertyMappingConfigurationService::class
         );
         return $mvcPropertyMappingConfigurationService->generateTrustedPropertiesToken($formFieldNames, '');
@@ -200,14 +197,6 @@ class ActionControllerValidationTest extends FunctionalTestCase
      */
     protected function getHashService()
     {
-        return $this->getObjectManager()->get(HashService::class);
-    }
-
-    /**
-     * @return \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected function getObjectManager()
-    {
-        return GeneralUtility::makeInstance(ObjectManager::class);
+        return $this->getContainer()->get(HashService::class);
     }
 }
diff --git a/typo3/sysext/extbase/Tests/Functional/Mvc/Web/RequestBuilderTest.php b/typo3/sysext/extbase/Tests/Functional/Mvc/Web/RequestBuilderTest.php
index 16714ba5cd14..2e8a4c53f0ce 100644
--- a/typo3/sysext/extbase/Tests/Functional/Mvc/Web/RequestBuilderTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Mvc/Web/RequestBuilderTest.php
@@ -23,14 +23,12 @@ use TYPO3\CMS\Core\Error\Http\PageNotFoundException;
 use TYPO3\CMS\Core\Http\NormalizedParams;
 use TYPO3\CMS\Core\Http\ServerRequest;
 use TYPO3\CMS\Core\Routing\PageArguments;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
+use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;
 use TYPO3\CMS\Extbase\Mvc\Exception;
 use TYPO3\CMS\Extbase\Mvc\Exception\InvalidActionNameException;
 use TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException;
 use TYPO3\CMS\Extbase\Mvc\RequestInterface;
 use TYPO3\CMS\Extbase\Mvc\Web\RequestBuilder;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
 class RequestBuilderTest extends FunctionalTestCase
@@ -55,8 +53,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -88,8 +85,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['pluginName'] = $pluginName;
         $configuration['format'] = 'json';
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -120,8 +116,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -156,8 +151,7 @@ class RequestBuilderTest extends FunctionalTestCase
         static::expectExceptionCode(1289843277);
         static::expectExceptionMessage('"pluginName" is not properly configured. Request can\'t be dispatched!');
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration(['extensionName' => 'blog_example']);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -193,8 +187,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/', 'POST');
@@ -251,8 +244,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/', 'POST');
@@ -304,8 +296,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -339,8 +330,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['pluginName'] = $pluginName;
         $configuration['mvc']['throwPageNotFoundExceptionIfActionCantBeResolved'] = true;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -365,8 +355,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -395,8 +384,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['pluginName'] = $pluginName;
         $configuration['mvc']['callDefaultActionIfActionCantBeResolved'] = true;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -437,8 +425,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -474,8 +461,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -509,8 +495,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['pluginName'] = $pluginName;
         $configuration['mvc']['throwPageNotFoundExceptionIfActionCantBeResolved'] = true;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -540,8 +525,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['pluginName'] = $pluginName;
         $configuration['mvc']['callDefaultActionIfActionCantBeResolved'] = true;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -575,8 +559,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -611,8 +594,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $mainRequest = $this->prepareServerRequest('https://example.com/');
@@ -647,8 +629,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $requestBuilder = $this->getContainer()->get(RequestBuilder::class);
@@ -687,8 +668,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $requestBuilder = $this->getContainer()->get(RequestBuilder::class);
@@ -725,8 +705,7 @@ class RequestBuilderTest extends FunctionalTestCase
         $configuration['extensionName'] = $extensionName;
         $configuration['pluginName'] = $pluginName;
 
-        /** @var ConfigurationManagerInterface $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ObjectManager::class)->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
 
         $requestBuilder = $this->getContainer()->get(RequestBuilder::class);
diff --git a/typo3/sysext/extbase/Tests/Functional/Pagination/QueryResultPaginatorTest.php b/typo3/sysext/extbase/Tests/Functional/Pagination/QueryResultPaginatorTest.php
index 5ef03c0e7730..ce69045a121a 100644
--- a/typo3/sysext/extbase/Tests/Functional/Pagination/QueryResultPaginatorTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Pagination/QueryResultPaginatorTest.php
@@ -18,8 +18,6 @@ declare(strict_types=1);
 namespace TYPO3\CMS\Extbase\Tests\Functional\Pagination;
 
 use ExtbaseTeam\BlogExample\Domain\Repository\PostRepository;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Pagination\QueryResultPaginator;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
@@ -43,11 +41,8 @@ class QueryResultPaginatorTest extends FunctionalTestCase
     protected function setUp(): void
     {
         parent::setUp();
-
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/posts.xml');
-
-        $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->postRepository = $objectManager->get(PostRepository::class);
+        $this->postRepository = $this->getContainer()->get(PostRepository::class);
     }
 
     /**
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/AddTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/AddTest.php
index 2686be85bfa8..09e1706241b0 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/AddTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/AddTest.php
@@ -19,15 +19,13 @@ use ExtbaseTeam\BlogExample\Domain\Model\Blog;
 use ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
 use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
 class AddTest extends FunctionalTestCase
 {
     /**
-     * @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
+     * @var PersistenceManager
      */
     protected $persistentManager;
 
@@ -42,12 +40,7 @@ class AddTest extends FunctionalTestCase
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
     /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Persistence\Repository
+     * @var BlogRepository
      */
     protected $blogRepository;
 
@@ -58,9 +51,8 @@ class AddTest extends FunctionalTestCase
     {
         parent::setUp();
 
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->persistentManager = $this->objectManager->get(PersistenceManager::class);
-        $this->blogRepository = $this->objectManager->get(BlogRepository::class);
+        $this->persistentManager = $this->getContainer()->get(PersistenceManager::class);
+        $this->blogRepository = $this->getContainer()->get(BlogRepository::class);
         $GLOBALS['BE_USER'] = new BackendUserAuthentication();
     }
 
@@ -70,10 +62,9 @@ class AddTest extends FunctionalTestCase
     public function addSimpleObjectTest()
     {
         $newBlogTitle = 'aDi1oogh';
-        $newBlog = $this->objectManager->get(Blog::class);
+        $newBlog = new Blog();
         $newBlog->setTitle($newBlogTitle);
 
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository $blogRepository */
         $this->blogRepository->add($newBlog);
         $this->persistentManager->persistAll();
 
@@ -100,10 +91,9 @@ class AddTest extends FunctionalTestCase
     public function addObjectSetsDefaultLanguageTest()
     {
         $newBlogTitle = 'aDi1oogh';
-        $newBlog = $this->objectManager->get(Blog::class);
+        $newBlog = new Blog();
         $newBlog->setTitle($newBlogTitle);
 
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository $blogRepository */
         $this->blogRepository->add($newBlog);
         $this->persistentManager->persistAll();
 
@@ -130,11 +120,10 @@ class AddTest extends FunctionalTestCase
     public function addObjectSetsDefinedLanguageTest()
     {
         $newBlogTitle = 'aDi1oogh';
-        $newBlog = $this->objectManager->get(Blog::class);
+        $newBlog = new Blog();
         $newBlog->setTitle($newBlogTitle);
         $newBlog->_setProperty('_languageUid', -1);
 
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository $blogRepository */
         $this->blogRepository->add($newBlog);
         $this->persistentManager->persistAll();
 
@@ -161,11 +150,10 @@ class AddTest extends FunctionalTestCase
     public function addObjectSetsNullAsNullForSimpleTypes()
     {
         $newBlogTitle = 'aDi1oogh';
-        $newBlog = $this->objectManager->get(Blog::class);
+        $newBlog = new Blog();
         $newBlog->setTitle($newBlogTitle);
         $newBlog->setSubtitle('subtitle');
 
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository $blogRepository */
         $this->blogRepository->add($newBlog);
         $this->persistentManager->persistAll();
 
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/CountTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/CountTest.php
index 4ce0018ba4d3..2cf52e4705c3 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/CountTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/CountTest.php
@@ -17,9 +17,6 @@ namespace TYPO3\CMS\Extbase\Tests\Functional\Persistence;
 
 use ExtbaseTeam\BlogExample\Domain\Repository\PersonRepository;
 use ExtbaseTeam\BlogExample\Domain\Repository\PostRepository;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
-use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
 class CountTest extends FunctionalTestCase
@@ -29,11 +26,6 @@ class CountTest extends FunctionalTestCase
      */
     protected $numberOfRecordsInFixture = 14;
 
-    /**
-     * @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
-     */
-    protected $persistentManager;
-
     /**
      * @var array
      */
@@ -45,17 +37,7 @@ class CountTest extends FunctionalTestCase
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
     /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Persistence\Repository
-     */
-    protected $blogRepository;
-
-    /**
-     * @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository
+     * @var PostRepository
      */
     protected $postRepository;
 
@@ -75,9 +57,7 @@ class CountTest extends FunctionalTestCase
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/post-tag-mm.xml');
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/persons.xml');
 
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->persistentManager = $this->objectManager->get(PersistenceManager::class);
-        $this->postRepository = $this->objectManager->get(PostRepository::class);
+        $this->postRepository = $this->getContainer()->get(PostRepository::class);
     }
 
     /**
@@ -215,8 +195,7 @@ class CountTest extends FunctionalTestCase
      */
     public function queryWithAndConditionsToTheSameTableReturnExpectedCount()
     {
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PersonRepository $personRepository */
-        $personRepository = $this->objectManager->get(PersonRepository::class);
+        $personRepository = $this->getContainer()->get(PersonRepository::class);
         $query = $personRepository->createQuery();
         $query->matching(
             $query->logicalAnd(
@@ -232,8 +211,7 @@ class CountTest extends FunctionalTestCase
      */
     public function queryWithOrConditionsToTheSameTableReturnExpectedCount()
     {
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PersonRepository $personRepository */
-        $personRepository = $this->objectManager->get(PersonRepository::class);
+        $personRepository = $this->getContainer()->get(PersonRepository::class);
         $query = $personRepository->createQuery();
         $query->matching(
             $query->logicalOr(
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/Generic/Mapper/DataMapFactoryTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/Generic/Mapper/DataMapFactoryTest.php
index 3b67ffa1b6a4..bd3fe3192ae1 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/Generic/Mapper/DataMapFactoryTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/Generic/Mapper/DataMapFactoryTest.php
@@ -18,8 +18,6 @@ namespace TYPO3\CMS\Extbase\Tests\Functional\Persistence\Generic\Mapper;
 use ExtbaseTeam\BlogExample\Domain\Model\Administrator;
 use ExtbaseTeam\BlogExample\Domain\Model\TtContent;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\ColumnMap;
 use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMap;
 use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapFactory;
@@ -28,7 +26,7 @@ use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 class DataMapFactoryTest extends FunctionalTestCase
 {
     /**
-     * @var \TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapFactory
+     * @var DataMapFactory
      */
     protected $dataMapFactory;
 
@@ -42,21 +40,13 @@ class DataMapFactoryTest extends FunctionalTestCase
      */
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
     /**
      * Sets up this test suite.
      */
     protected function setUp(): void
     {
         parent::setUp();
-
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->dataMapFactory = $this->objectManager->get(DataMapFactory::class);
-
+        $this->dataMapFactory = $this->getContainer()->get(DataMapFactory::class);
         $GLOBALS['BE_USER'] = new BackendUserAuthentication();
     }
 
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/Generic/Mapper/DataMapperTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/Generic/Mapper/DataMapperTest.php
index 066963c75ecc..b9dd4dc9edf6 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/Generic/Mapper/DataMapperTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/Generic/Mapper/DataMapperTest.php
@@ -18,15 +18,13 @@ namespace TYPO3\CMS\Extbase\Tests\Functional\Persistence\Generic\Mapper;
 use ExtbaseTeam\BlogExample\Domain\Model\DateExample;
 use ExtbaseTeam\BlogExample\Domain\Model\DateTimeImmutableExample;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
 class DataMapperTest extends FunctionalTestCase
 {
     /**
-     * @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
+     * @var PersistenceManager
      */
     protected $persistenceManager;
 
@@ -40,21 +38,13 @@ class DataMapperTest extends FunctionalTestCase
      */
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
     /**
      * Sets up this test suite.
      */
     protected function setUp(): void
     {
         parent::setUp();
-
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->persistenceManager = $this->objectManager->get(PersistenceManager::class);
-
+        $this->persistenceManager = $this->getContainer()->get(PersistenceManager::class);
         $GLOBALS['BE_USER'] = new BackendUserAuthentication();
     }
 
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/ImplementationClassNameTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/ImplementationClassNameTest.php
index b3bbf45ec236..f17e3619bb3b 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/ImplementationClassNameTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/ImplementationClassNameTest.php
@@ -17,15 +17,11 @@ declare(strict_types=1);
 
 namespace TYPO3\CMS\Extbase\Tests\Functional\Persistence;
 
-use ExtbaseTeam\A\Domain\Model\ARepository;
-use ExtbaseTeam\B\Domain\Model\BRepository;
+use ExtbaseTeam\A\Domain\Repository\ARepository;
+use ExtbaseTeam\B\Domain\Repository\BRepository;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
-/**
- * Class TYPO3\CMS\Extbase\Tests\Functional\ImplementationClassNameTest
- */
 class ImplementationClassNameTest extends FunctionalTestCase
 {
     /**
@@ -41,17 +37,9 @@ class ImplementationClassNameTest extends FunctionalTestCase
      */
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
-    /**
-     * @var ObjectManager
-     */
-    private $objectManager;
-
     public function setUp(): void
     {
         parent::setUp();
-
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-
         $this->importCSVDataSet(GeneralUtility::getFileAbsFileName(
             'typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/class_overriding/b/tx_a_domain_model_a.csv'
         ));
@@ -62,7 +50,7 @@ class ImplementationClassNameTest extends FunctionalTestCase
     */
     public function testARepositoryObjectsAreTakenFromSession(): void
     {
-        $aRepository = $this->objectManager->get(ARepository::class);
+        $aRepository = $this->getContainer()->get(ARepository::class);
         $a1 = $aRepository->findByUid(1);
         $a2 = $aRepository->findByUid(1);
 
@@ -74,7 +62,7 @@ class ImplementationClassNameTest extends FunctionalTestCase
     */
     public function testBRepositoryObjectsAreTakenFromSession(): void
     {
-        $bRepository = $this->objectManager->get(BRepository::class);
+        $bRepository = $this->getContainer()->get(BRepository::class);
         $b1 = $bRepository->findByUid(1);
         $b2 = $bRepository->findByUid(1);
 
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/InTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/InTest.php
index 9cb4505e253b..9bc7336d8868 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/InTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/InTest.php
@@ -17,8 +17,6 @@ namespace TYPO3\CMS\Extbase\Tests\Functional\Persistence;
 
 use ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository;
 use ExtbaseTeam\BlogExample\Domain\Repository\PostRepository;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Persistence\Generic\LazyObjectStorage;
 use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
@@ -26,12 +24,12 @@ use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 class InTest extends FunctionalTestCase
 {
     /**
-     * @var \ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository
+     * @var BlogRepository
      */
     protected $blogRepository;
 
     /**
-     * @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository
+     * @var PostRepository
      */
     protected $postRepository;
 
@@ -45,11 +43,6 @@ class InTest extends FunctionalTestCase
      */
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
     /**
      * Sets up this test suite.
      */
@@ -63,9 +56,8 @@ class InTest extends FunctionalTestCase
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/tags.xml');
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/post-tag-mm.xml');
 
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->blogRepository = $this->objectManager->get(BlogRepository::class);
-        $this->postRepository = $this->objectManager->get(PostRepository::class);
+        $this->blogRepository = $this->getContainer()->get(BlogRepository::class);
+        $this->postRepository = $this->getContainer()->get(PostRepository::class);
     }
 
     /**
@@ -118,7 +110,7 @@ class InTest extends FunctionalTestCase
         $blog1 = $this->blogRepository->findByUid(1);
         $blog2 = $this->blogRepository->findByUid(2);
 
-        $objectStorage = $this->objectManager->get(ObjectStorage::class);
+        $objectStorage = new ObjectStorage();
         $objectStorage->attach($blog1);
         $objectStorage->attach($blog2);
 
@@ -139,7 +131,7 @@ class InTest extends FunctionalTestCase
         $blog1 = $this->blogRepository->findByUid(1);
         $blog2 = $this->blogRepository->findByUid(2);
 
-        $objectStorage = $this->objectManager->get(ObjectStorage::class);
+        $objectStorage = new ObjectStorage();
         $objectStorage->attach($blog1);
         $objectStorage->attach($blog2);
 
@@ -151,7 +143,7 @@ class InTest extends FunctionalTestCase
 
         self::assertSame(11, $inQuery->count());
 
-        $newObjectStorage = $this->objectManager->get(ObjectStorage::class);
+        $newObjectStorage = new ObjectStorage();
         $newObjectStorage->attach($blog1);
 
         $newInQuery = $this->postRepository->createQuery();
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/IsDirtyTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/IsDirtyTest.php
index 090e6fe730dd..a7ff6b9792ed 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/IsDirtyTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/IsDirtyTest.php
@@ -18,14 +18,11 @@ namespace TYPO3\CMS\Extbase\Tests\Functional\Persistence;
 use ExtbaseTeam\BlogExample\Domain\Model\Administrator;
 use ExtbaseTeam\BlogExample\Domain\Repository\AdministratorRepository;
 use ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
 class IsDirtyTest extends FunctionalTestCase
 {
-
     /**
      * @var array
      */
@@ -37,17 +34,12 @@ class IsDirtyTest extends FunctionalTestCase
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
     /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
-    /**
-     * @var \ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository
+     * @var BlogRepository
      */
     protected $blogRepository;
 
     /**
-     * @var \ExtbaseTeam\BlogExample\Domain\Repository\AdministratorRepository
+     * @var AdministratorRepository
      */
     protected $adminRepository;
 
@@ -69,9 +61,8 @@ class IsDirtyTest extends FunctionalTestCase
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/fe_users.xml');
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/fe_groups.xml');
 
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->blogRepository = $this->objectManager->get(BlogRepository::class);
-        $this->adminRepository = $this->objectManager->get(AdministratorRepository::class);
+        $this->blogRepository = $this->getContainer()->get(BlogRepository::class);
+        $this->adminRepository = $this->getContainer()->get(AdministratorRepository::class);
     }
 
     /**
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/OperatorTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/OperatorTest.php
index d8a71f9201d4..2d264f95e41a 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/OperatorTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/OperatorTest.php
@@ -17,20 +17,18 @@ namespace TYPO3\CMS\Extbase\Tests\Functional\Persistence;
 
 use ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository;
 use ExtbaseTeam\BlogExample\Domain\Repository\PostRepository;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Persistence\QueryInterface;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
 class OperatorTest extends FunctionalTestCase
 {
     /**
-     * @var \ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository
+     * @var BlogRepository
      */
     protected $blogRepository;
 
     /**
-     * @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository
+     * @var PostRepository
      */
     protected $postRepository;
 
@@ -44,11 +42,6 @@ class OperatorTest extends FunctionalTestCase
      */
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
     /**
      * Sets up this test suite.
      */
@@ -62,9 +55,8 @@ class OperatorTest extends FunctionalTestCase
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/tags.xml');
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/post-tag-mm.xml');
 
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->blogRepository = $this->objectManager->get(BlogRepository::class);
-        $this->postRepository = $this->objectManager->get(PostRepository::class);
+        $this->blogRepository = $this->getContainer()->get(BlogRepository::class);
+        $this->postRepository = $this->getContainer()->get(PostRepository::class);
     }
 
     /**
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/QueryLocalizedDataTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/QueryLocalizedDataTest.php
index 3d6b38733ece..3171dbe761cb 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/QueryLocalizedDataTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/QueryLocalizedDataTest.php
@@ -24,8 +24,7 @@ use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Context\LanguageAspect;
 use TYPO3\CMS\Core\Domain\Repository\PageRepository;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
+use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;
 use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager;
 use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
 use TYPO3\CMS\Extbase\Persistence\QueryInterface;
@@ -48,12 +47,7 @@ class QueryLocalizedDataTest extends FunctionalTestCase
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
     /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Persistence\Repository
+     * @var PostRepository
      */
     protected $postRepository;
 
@@ -72,7 +66,6 @@ class QueryLocalizedDataTest extends FunctionalTestCase
         $this->importCSVDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/translatedBlogExampleData.csv');
         $this->setUpBasicFrontendEnvironment();
 
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
         $configuration = [
             'persistence' => [
                 'storagePid' => 20,
@@ -83,10 +76,10 @@ class QueryLocalizedDataTest extends FunctionalTestCase
                 ]
             ]
         ];
-        $configurationManager = $this->objectManager->get(ConfigurationManagerInterface::class);
+        $configurationManager = $this->getContainer()->get(ConfigurationManager::class);
         $configurationManager->setConfiguration($configuration);
-        $this->postRepository = $this->objectManager->get(PostRepository::class);
-        $this->persistenceManager = $this->objectManager->get(PersistenceManager::class);
+        $this->postRepository = $this->getContainer()->get(PostRepository::class);
+        $this->persistenceManager = $this->getContainer()->get(PersistenceManager::class);
     }
 
     /**
@@ -1166,7 +1159,7 @@ class QueryLocalizedDataTest extends FunctionalTestCase
         $context = GeneralUtility::makeInstance(Context::class);
         $context->setAspect('language', new LanguageAspect($languageUid, $languageUid, $overlay));
 
-        $blogRepository = $this->objectManager->get(BlogRepository::class);
+        $blogRepository = $this->getContainer()->get(BlogRepository::class);
         $query = $blogRepository->createQuery();
         $querySettings = $query->getQuerySettings();
         $querySettings->setRespectSysLanguage(false);
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/QueryParserTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/QueryParserTest.php
index 5df4bceba008..fbbc6f259134 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/QueryParserTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/QueryParserTest.php
@@ -15,9 +15,8 @@
 
 namespace TYPO3\CMS\Extbase\Tests\Functional\Persistence;
 
-use ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
+use ExtbaseTeam\BlogExample\Domain\Repository\PostRepository;
+use TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
 
 class QueryParserTest extends FunctionalTestCase
@@ -33,16 +32,6 @@ class QueryParserTest extends FunctionalTestCase
      */
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
-    /**
-     * @var \ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository
-     */
-    protected $blogRepository;
-
     /**
      * Sets up this test suite.
      */
@@ -60,9 +49,6 @@ class QueryParserTest extends FunctionalTestCase
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/category-mm.xml');
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/fe_users.xml');
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/fe_groups.xml');
-
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->blogRepository = $this->objectManager->get(BlogRepository::class);
     }
 
     /**
@@ -70,8 +56,7 @@ class QueryParserTest extends FunctionalTestCase
      */
     public function queryWithMultipleRelationsToIdenticalTablesReturnsExpectedResultForOrQuery()
     {
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository $postRepository */
-        $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $query = $postRepository->createQuery();
         $query->matching(
             $query->logicalAnd(
@@ -94,8 +79,7 @@ class QueryParserTest extends FunctionalTestCase
      */
     public function queryWithRelationHasAndBelongsToManyReturnsExpectedResult()
     {
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository $postRepository */
-        $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $query = $postRepository->createQuery();
         $query->matching(
             $query->equals('tags.name', 'Tag12')
@@ -112,8 +96,7 @@ class QueryParserTest extends FunctionalTestCase
      */
     public function queryWithRelationHasManyWithoutParentKeyFieldNameReturnsExpectedResult()
     {
-        /** @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository $frontendUserRepository */
-        $frontendUserRepository = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Domain\\Repository\\FrontendUserRepository');
+        $frontendUserRepository = $this->getContainer()->get(FrontendUserRepository::class);
         $query = $frontendUserRepository->createQuery();
         $query->matching(
             $query->equals('usergroup.title', 'Group A')
@@ -130,8 +113,7 @@ class QueryParserTest extends FunctionalTestCase
      */
     public function queryWithRelationHasOneAndHasAndBelongsToManyWithoutParentKeyFieldNameReturnsExpectedResult()
     {
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository $postRepository */
-        $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $query = $postRepository->createQuery();
         $query->matching(
             $query->equals('author.firstname', 'Author')
@@ -146,8 +128,7 @@ class QueryParserTest extends FunctionalTestCase
      */
     public function orReturnsExpectedResult()
     {
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository $postRepository */
-        $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $query = $postRepository->createQuery();
         $query->matching(
             $query->logicalOr(
@@ -164,8 +145,7 @@ class QueryParserTest extends FunctionalTestCase
      */
     public function queryWithMultipleRelationsToIdenticalTablesReturnsExpectedResultForAndQuery()
     {
-        /** @var \ExtbaseTeam\BlogExample\Domain\Repository\PostRepository $postRepository */
-        $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $query = $postRepository->createQuery();
         $query->matching(
             $query->logicalAnd(
@@ -183,8 +163,7 @@ class QueryParserTest extends FunctionalTestCase
      */
     public function queryWithFindInSetReturnsExpectedResult()
     {
-        /** @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository $frontendUserRepository */
-        $frontendUserRepository = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Domain\\Repository\\FrontendUserRepository');
+        $frontendUserRepository = $this->getContainer()->get(FrontendUserRepository::class);
         $query = $frontendUserRepository->createQuery();
 
         $result = $query->matching($query->contains('usergroup', 1))
@@ -197,7 +176,7 @@ class QueryParserTest extends FunctionalTestCase
      */
     public function queryForPostWithCategoriesReturnsPostWithCategories()
     {
-        $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $query = $postRepository->createQuery();
         $post = $query->matching($query->equals('uid', 1))->execute()->current();
         self::assertCount(3, $post->getCategories());
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/RelationTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/RelationTest.php
index af0e026a9cc6..c551ca8d5edb 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/RelationTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/RelationTest.php
@@ -25,10 +25,8 @@ use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\Restriction\BackendWorkspaceRestriction;
 use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Domain\Model\Category;
 use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager;
 use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
 use TYPO3\CMS\Extbase\Persistence\QueryInterface;
@@ -42,7 +40,7 @@ class RelationTest extends FunctionalTestCase
     protected $blog;
 
     /**
-     * @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
+     * @var PersistenceManager
      */
     protected $persistentManager;
 
@@ -50,11 +48,6 @@ class RelationTest extends FunctionalTestCase
 
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
     /**
      * Sets up this test suite.
      */
@@ -72,11 +65,8 @@ class RelationTest extends FunctionalTestCase
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/categories.xml');
         $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/category-mm.xml');
 
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->persistentManager = $this->objectManager->get(PersistenceManager::class);
-        /* @var $blogRepository \TYPO3\CMS\Extbase\Persistence\Repository */
-        $blogRepository = $this->objectManager->get(BlogRepository::class);
-        $this->blog = $blogRepository->findByUid(1);
+        $this->persistentManager = $this->getContainer()->get(PersistenceManager::class);
+        $this->blog = $this->getContainer()->get(BlogRepository::class)->findByUid(1);
 
         $GLOBALS['BE_USER'] = new BackendUserAuthentication();
         $GLOBALS['BE_USER']->workspace = 0;
@@ -103,8 +93,7 @@ class RelationTest extends FunctionalTestCase
             ->fetchColumn(0);
 
         $newPostTitle = 'sdufhisdhuf';
-        /** @var Post $newPost */
-        $newPost = $this->objectManager->get(Post::class);
+        $newPost = new Post();
         $newPost->setBlog($this->blog);
         $newPost->setTitle($newPostTitle);
         $newPost->setContent('Bla Bla Bla');
@@ -235,7 +224,7 @@ class RelationTest extends FunctionalTestCase
         ->fetchColumn(0);
 
         /** @var Post $newPost */
-        $newPost = $this->objectManager->get(Post::class);
+        $newPost = new Post();
 
         $posts = clone $this->blog->getPosts();
         $this->blog->getPosts()->removeAll($posts);
@@ -439,11 +428,9 @@ class RelationTest extends FunctionalTestCase
 
         $newTagTitle = 'sdufhisdhuf';
 
-        /** @var Tag $newTag */
-        $newTag = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Model\\Tag', $newTagTitle);
+        $newTag = new Tag($newTagTitle);
 
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $post = $postRepository->findByUid(1);
         $post->addTag($newTag);
 
@@ -491,8 +478,7 @@ class RelationTest extends FunctionalTestCase
             ->execute()
             ->fetchColumn(0);
 
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $post = $postRepository->findByUid(1);
         $tags = $post->getTags();
         $tagsArray = $tags->toArray();
@@ -569,14 +555,12 @@ class RelationTest extends FunctionalTestCase
             ->execute()
             ->fetchColumn(0);
 
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $post = $postRepository->findByUid(1);
         $tags = clone $post->getTags();
         $post->setTags(new ObjectStorage());
 
-        /** @var Tag $newTag */
-        $newTag = $this->objectManager->get(Tag::class, 'INSERTED TAG at position 6 : ' . strftime(''));
+        $newTag = new Tag('INSERTED TAG at position 6 : ' . strftime(''));
 
         $counter = 1;
         foreach ($tags as $tag) {
@@ -653,8 +637,7 @@ class RelationTest extends FunctionalTestCase
             ->fetchColumn(0);
         self::assertEquals(10, $countTags);
 
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $post = $postRepository->findByUid(1);
         $tags = clone $post->getTags();
         $counter = 1;
@@ -732,8 +715,7 @@ class RelationTest extends FunctionalTestCase
             ->fetchColumn(0);
         self::assertEquals(10, $countTags);
 
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $post = $postRepository->findByUid(1);
         $tags = clone $post->getTags();
         $tagsArray = $tags->toArray();
@@ -824,8 +806,7 @@ class RelationTest extends FunctionalTestCase
             ->execute()
             ->fetch();
 
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $post = $postRepository->findByUid(1);
         $post->setTitle('newTitle');
 
@@ -851,8 +832,7 @@ class RelationTest extends FunctionalTestCase
      */
     public function mmRelationWithoutMatchFieldIsResolved()
     {
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $posts = $postRepository->findByTagAndBlog('Tag2', $this->blog);
         self::assertCount(1, $posts);
     }
@@ -885,8 +865,7 @@ class RelationTest extends FunctionalTestCase
             ->fetchColumn(0);
         self::assertEquals(3, $countCategories);
 
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $post = $postRepository->findByUid(1);
         self::assertSame(3, count($post->getCategories()));
     }
@@ -898,8 +877,7 @@ class RelationTest extends FunctionalTestCase
      */
     public function mmRelationWithMatchFieldIsResolvedFromForeignSide()
     {
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $posts = $postRepository->findByCategory(1);
         self::assertSame(2, count($posts));
 
@@ -935,12 +913,10 @@ class RelationTest extends FunctionalTestCase
             ->fetchColumn(0);
         self::assertEquals(3, $countCategories);
 
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $post = $postRepository->findByUid(1);
 
-        /** @var \TYPO3\CMS\Extbase\Domain\Model\Category $newCategory */
-        $newCategory = $this->objectManager->get(Category::class);
+        $newCategory = new Category();
         $newCategory->setTitle('New Category');
 
         $post->addCategory($newCategory);
@@ -977,9 +953,7 @@ class RelationTest extends FunctionalTestCase
      */
     public function adjustingMmRelationWithTablesnameAndFieldnameFieldDoNotTouchOtherRelations()
     {
-        /** @var PostRepository $postRepository */
-        $postRepository = $this->objectManager->get(PostRepository::class);
-        /** @var Post $post */
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $post = $postRepository->findByUid(1);
         // Move category down
         foreach ($post->getCategories() as $category) {
@@ -1153,7 +1127,7 @@ class RelationTest extends FunctionalTestCase
      */
     protected function provideFindPostsByPublisherQuery(int $publisherId)
     {
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $query = $postRepository->createQuery();
         $query->matching(
             $query->logicalOr([
@@ -1213,7 +1187,7 @@ class RelationTest extends FunctionalTestCase
      */
     protected function provideFindBlogsByPostsSinceQuery(\DateTime $date)
     {
-        $blogRepository = $this->objectManager->get(BlogRepository::class);
+        $blogRepository = $this->getContainer()->get(BlogRepository::class);
         $query = $blogRepository->createQuery();
         $query->matching(
             $query->greaterThanOrEqual('posts.date', $date)
@@ -1266,7 +1240,7 @@ class RelationTest extends FunctionalTestCase
      */
     protected function provideFindPersonsByTagNameQuery(string $tagName)
     {
-        $personRepository = $this->objectManager->get(PersonRepository::class);
+        $personRepository = $this->getContainer()->get(PersonRepository::class);
         $query = $personRepository->createQuery();
         $query->matching(
             $query->logicalOr([
@@ -1322,7 +1296,7 @@ class RelationTest extends FunctionalTestCase
      */
     protected function provideFindPostsByAuthorTagName(string $tagName)
     {
-        $postRepository = $this->objectManager->get(PostRepository::class);
+        $postRepository = $this->getContainer()->get(PostRepository::class);
         $query = $postRepository->createQuery();
         $query->matching(
             $query->logicalOr([
@@ -1338,8 +1312,7 @@ class RelationTest extends FunctionalTestCase
      */
     protected function updateAndPersistBlog()
     {
-        /** @var BlogRepository $blogRepository */
-        $blogRepository = $this->objectManager->get(BlogRepository::class);
+        $blogRepository = $this->getContainer()->get(BlogRepository::class);
         $blogRepository->update($this->blog);
         $this->persistentManager->persistAll();
     }
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/TranslatedSiteContentTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/TranslatedSiteContentTest.php
index b69747f33dcc..3971d8cbf729 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/TranslatedSiteContentTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/TranslatedSiteContentTest.php
@@ -20,9 +20,6 @@ namespace TYPO3\CMS\Extbase\Tests\Functional\Persistence;
 use ExtbaseTeam\BlogExample\Domain\Repository\TtContentRepository;
 use TYPO3\CMS\Core\Tests\Functional\DataHandling\AbstractDataHandlerActionTestCase;
 use TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
-use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\ResponseContent;
 
@@ -55,11 +52,6 @@ class TranslatedSiteContentTest extends AbstractDataHandlerActionTestCase
      */
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
-    /**
-     * @var ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
     /**
      * @var TtContentRepository
      */
@@ -97,8 +89,7 @@ class TranslatedSiteContentTest extends AbstractDataHandlerActionTestCase
         $this->importScenarioDataSet('LiveDefaultPages');
         $this->importScenarioDataSet('LiveDefaultElements');
 
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->contentRepository = $this->objectManager->get(TtContentRepository::class);
+        $this->contentRepository = $this->getContainer()->get(TtContentRepository::class);
         $this->setUpFrontendRootPage(1, [
             'typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Configuration/TypoScript/setup.typoscript',
             'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/Frontend/ContentJsonRenderer.typoscript'
@@ -107,7 +98,7 @@ class TranslatedSiteContentTest extends AbstractDataHandlerActionTestCase
 
     protected function tearDown(): void
     {
-        unset($this->objectManager, $this->contentRepository);
+        unset($this->contentRepository);
         parent::tearDown();
     }
 
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/TranslationTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/TranslationTest.php
index e2535319ee16..cf358ec0a333 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/TranslationTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/TranslationTest.php
@@ -24,7 +24,6 @@ use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Context\LanguageAspect;
 use TYPO3\CMS\Core\Domain\Repository\PageRepository;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Persistence\QueryInterface;
 use TYPO3\CMS\Extbase\Service\EnvironmentService;
 use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
@@ -43,12 +42,7 @@ class TranslationTest extends FunctionalTestCase
     protected $coreExtensionsToLoad = ['extbase', 'fluid'];
 
     /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
-     */
-    protected $objectManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Persistence\Repository
+     * @var PostRepository
      */
     protected $postRepository;
 
@@ -78,8 +72,7 @@ class TranslationTest extends FunctionalTestCase
 
         $this->setUpBasicFrontendEnvironment();
 
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->postRepository = $this->objectManager->get(PostRepository::class);
+        $this->postRepository = $this->getContainer()->get(PostRepository::class);
     }
 
     /**
diff --git a/typo3/sysext/extbase/Tests/Functional/Persistence/WorkspaceTest.php b/typo3/sysext/extbase/Tests/Functional/Persistence/WorkspaceTest.php
index 63d5a825c710..9e25383988a2 100644
--- a/typo3/sysext/extbase/Tests/Functional/Persistence/WorkspaceTest.php
+++ b/typo3/sysext/extbase/Tests/Functional/Persistence/WorkspaceTest.php
@@ -23,7 +23,6 @@ use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Context\UserAspect;
 use TYPO3\CMS\Core\Context\WorkspaceAspect;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extbase\Persistence\QueryInterface;
 use TYPO3\CMS\Extbase\Service\EnvironmentService;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
@@ -181,9 +180,7 @@ class WorkspaceTest extends FunctionalTestCase
         );
         GeneralUtility::setSingletonInstance(Context::class, $context);
         GeneralUtility::makeInstance(EnvironmentService::class)->setFrontendMode(true);
-
-        $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->blogRepository = $objectManager->get(BlogRepository::class);
+        $this->blogRepository = $this->getContainer()->get(BlogRepository::class);
     }
 
     /**
@@ -201,8 +198,6 @@ class WorkspaceTest extends FunctionalTestCase
             ]
         );
         GeneralUtility::setSingletonInstance(Context::class, $context);
-
-        $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->blogRepository = $objectManager->get(BlogRepository::class);
+        $this->blogRepository = $this->getContainer()->get(BlogRepository::class);
     }
 }
diff --git a/typo3/sysext/extbase/composer.json b/typo3/sysext/extbase/composer.json
index 1b559172a84c..1ed11b4cff11 100644
--- a/typo3/sysext/extbase/composer.json
+++ b/typo3/sysext/extbase/composer.json
@@ -57,7 +57,8 @@
 		},
 		"classmap": [
 			"Tests/Unit/Object/Container/Fixtures/",
-			"Tests/Functional/Fixtures/"
+			"Tests/Functional/Fixtures/",
+			"Tests/Functional/Mvc/Controller/Fixture/"
 		],
 		"files": [
 			"Tests/Fixture/TxClassWithGettersAndSetters.php"
-- 
GitLab