From: William Desportes <williamdes@wdes.fr>
Date: Fri, 20 Dec 2024 00:38:53 +0100
Subject: Patch phpunit deprecations for annotations

I did  the patch upstream and deleted it.
It belongs in Debian.

Origin: upstream
Forwarded: not-needed
---
 test/classes/AdvisorTest.php                       |  3 ++
 test/classes/BookmarkTest.php                      |  1 +
 test/classes/BrowseForeignersTest.php              |  1 +
 test/classes/CacheTest.php                         |  7 +++++
 test/classes/Charsets/CharsetTest.php              |  1 +
 test/classes/Charsets/CollationTest.php            |  2 ++
 test/classes/CharsetsTest.php                      |  1 +
 test/classes/CheckUserPrivilegesTest.php           |  1 +
 test/classes/Command/SetVersionCommandTest.php     |  3 ++
 test/classes/Command/TwigLintCommandTest.php       |  2 ++
 .../Command/WriteGitRevisionCommandTest.php        |  2 ++
 test/classes/CommonTest.php                        |  2 ++
 test/classes/Config/ConfigFileTest.php             |  2 ++
 test/classes/Config/DescriptionTest.php            |  2 ++
 test/classes/Config/FormDisplayTemplateTest.php    |  1 +
 test/classes/Config/FormDisplayTest.php            |  3 ++
 test/classes/Config/FormTest.php                   |  2 ++
 test/classes/Config/Forms/FormListTest.php         |  5 ++++
 test/classes/Config/PageSettingsTest.php           |  1 +
 test/classes/Config/ServerConfigChecksTest.php     |  1 +
 test/classes/Config/Settings/ConsoleTest.php       |  2 ++
 test/classes/Config/Settings/DebugTest.php         |  2 ++
 test/classes/Config/Settings/ExportTest.php        |  2 ++
 test/classes/Config/Settings/ImportTest.php        |  2 ++
 test/classes/Config/Settings/SchemaTest.php        |  2 ++
 test/classes/Config/Settings/ServerTest.php        |  2 ++
 test/classes/Config/Settings/SqlQueryBoxTest.php   |  2 ++
 .../Config/Settings/TransformationsTest.php        |  2 ++
 test/classes/Config/SettingsTest.php               | 10 +++++++
 test/classes/ConfigStorage/RelationCleanupTest.php |  5 ++++
 .../ConfigStorage/RelationParametersTest.php       | 20 +++++++++++++
 test/classes/ConfigStorage/RelationTest.php        |  3 ++
 test/classes/ConfigStorage/UserGroupsTest.php      |  3 ++
 test/classes/ConfigTest.php                        | 18 ++++++++++++
 test/classes/ConsoleTest.php                       |  1 +
 .../Controllers/CheckRelationsControllerTest.php   |  1 +
 .../Controllers/Database/EventsControllerTest.php  |  2 ++
 .../MultiTableQuery/TablesControllerTest.php       |  1 +
 .../Database/PrivilegesControllerTest.php          |  1 +
 .../Database/RoutinesControllerTest.php            |  2 ++
 .../Structure/FavoriteTableControllerTest.php      |  1 +
 .../Structure/RealRowCountControllerTest.php       |  1 +
 .../Database/StructureControllerTest.php           |  1 +
 .../Database/TriggersControllerTest.php            |  2 ++
 .../Controllers/Export/ExportControllerTest.php    |  1 +
 .../Export/Template/CreateControllerTest.php       |  1 +
 .../Export/Template/DeleteControllerTest.php       |  1 +
 .../Export/Template/LoadControllerTest.php         |  1 +
 .../Export/Template/UpdateControllerTest.php       |  1 +
 .../Controllers/GisDataEditorControllerTest.php    |  2 ++
 .../Controllers/Import/ImportControllerTest.php    |  1 +
 .../Import/SimulateDmlControllerTest.php           |  2 ++
 .../JavaScriptMessagesControllerTest.php           |  1 +
 .../Controllers/NavigationControllerTest.php       |  1 +
 .../Controllers/NormalizationControllerTest.php    |  1 +
 .../Controllers/Server/BinlogControllerTest.php    |  1 +
 .../Server/CollationsControllerTest.php            |  1 +
 .../Server/Databases/CreateControllerTest.php      |  1 +
 .../Server/Databases/DestroyControllerTest.php     |  1 +
 .../Controllers/Server/DatabasesControllerTest.php |  1 +
 .../Controllers/Server/EnginesControllerTest.php   |  1 +
 .../Controllers/Server/PluginsControllerTest.php   |  1 +
 .../Privileges/AccountLockControllerTest.php       |  1 +
 .../Privileges/AccountUnlockControllerTest.php     |  1 +
 .../Server/PrivilegesControllerTest.php            |  1 +
 .../Server/ShowEngineControllerTest.php            |  1 +
 .../Server/Status/AdvisorControllerTest.php        |  1 +
 .../Status/Monitor/GeneralLogControllerTest.php    |  1 +
 .../Status/Monitor/LogVarsControllerTest.php       |  1 +
 .../Status/Monitor/QueryAnalyzerControllerTest.php |  1 +
 .../Status/Monitor/SlowLogControllerTest.php       |  1 +
 .../Server/Status/MonitorControllerTest.php        |  1 +
 .../Status/Processes/RefreshControllerTest.php     |  1 +
 .../Server/Status/ProcessesControllerTest.php      |  1 +
 .../Server/Status/QueriesControllerTest.php        |  1 +
 .../Server/Status/StatusControllerTest.php         |  1 +
 .../Server/Status/VariablesControllerTest.php      |  1 +
 .../Controllers/Server/VariablesControllerTest.php |  1 +
 .../Controllers/Sql/EnumValuesControllerTest.php   |  1 +
 .../Controllers/Sql/SetValuesControllerTest.php    |  1 +
 .../Table/FindReplaceControllerTest.php            |  1 +
 .../Table/IndexRenameControllerTest.php            |  1 +
 .../Controllers/Table/IndexesControllerTest.php    |  1 +
 .../Controllers/Table/OperationsControllerTest.php |  1 +
 .../Controllers/Table/PrivilegesControllerTest.php |  1 +
 .../Controllers/Table/RelationControllerTest.php   |  1 +
 .../Controllers/Table/ReplaceControllerTest.php    |  1 +
 .../Controllers/Table/SearchControllerTest.php     |  1 +
 .../Table/Structure/ChangeControllerTest.php       |  1 +
 .../Table/Structure/MoveColumnsControllerTest.php  |  2 ++
 .../Table/Structure/SaveControllerTest.php         |  1 +
 .../Transformation/OverviewControllerTest.php      |  1 +
 test/classes/CoreTest.php                          | 15 ++++++++++
 test/classes/CreateAddFieldTest.php                |  5 ++++
 test/classes/Crypto/CryptoTest.php                 |  1 +
 test/classes/Database/CentralColumnsTest.php       |  1 +
 test/classes/Database/Designer/CommonTest.php      |  1 +
 test/classes/Database/DesignerTest.php             |  1 +
 test/classes/Database/EventsTest.php               |  6 ++++
 test/classes/Database/QbeTest.php                  |  1 +
 test/classes/Database/RoutinesTest.php             | 17 +++++++++++
 test/classes/Database/SearchTest.php               |  2 ++
 test/classes/Database/TriggersTest.php             |  8 +++++
 test/classes/DatabaseInterfaceTest.php             |  8 +++++
 test/classes/Dbal/DatabaseNameTest.php             |  2 ++
 test/classes/Dbal/DbiDummyTest.php                 |  3 ++
 test/classes/Dbal/DbiMysqliTest.php                |  1 +
 test/classes/Dbal/MysqliResultTest.php             |  1 +
 test/classes/Dbal/TableNameTest.php                |  2 ++
 test/classes/Dbal/WarningTest.php                  |  2 ++
 test/classes/Display/ResultsTest.php               | 11 +++++++
 test/classes/EncodingTest.php                      |  5 ++++
 test/classes/Engines/BdbTest.php                   |  1 +
 test/classes/Engines/BinlogTest.php                |  1 +
 test/classes/Engines/InnodbTest.php                |  1 +
 test/classes/Engines/MemoryTest.php                |  1 +
 test/classes/Engines/MrgMyisamTest.php             |  1 +
 test/classes/Engines/MyisamTest.php                |  1 +
 test/classes/Engines/NdbclusterTest.php            |  1 +
 test/classes/Engines/PbxtTest.php                  |  2 ++
 test/classes/Engines/PerformanceSchemaTest.php     |  1 +
 test/classes/EnvironmentTest.php                   |  1 +
 test/classes/ErrorHandlerTest.php                  |  7 +++++
 test/classes/ErrorReportTest.php                   |  2 ++
 test/classes/ErrorTest.php                         |  5 ++++
 test/classes/Export/OptionsTest.php                |  1 +
 test/classes/ExportTest.php                        |  2 ++
 test/classes/FieldMetadataTest.php                 |  1 +
 test/classes/FileListingTest.php                   |  4 ++-
 test/classes/FileTest.php                          |  8 ++++-
 test/classes/FlashMessagesTest.php                 |  1 +
 test/classes/FontTest.php                          |  1 +
 test/classes/FooterTest.php                        |  3 ++
 test/classes/Gis/GisFactoryTest.php                |  2 ++
 test/classes/Gis/GisGeomTestCase.php               |  2 ++
 test/classes/Gis/GisGeometryCollectionTest.php     |  8 +++++
 test/classes/Gis/GisGeometryTest.php               |  6 ++++
 test/classes/Gis/GisLineStringTest.php             |  5 ++++
 test/classes/Gis/GisMultiLineStringTest.php        |  5 ++++
 test/classes/Gis/GisMultiPointTest.php             |  5 ++++
 test/classes/Gis/GisMultiPolygonTest.php           |  6 ++++
 test/classes/Gis/GisPointTest.php                  |  6 ++++
 test/classes/Gis/GisPolygonTest.php                |  9 ++++++
 test/classes/Gis/GisVisualizationTest.php          |  1 +
 test/classes/GitTest.php                           |  7 +++++
 test/classes/HeaderTest.php                        |  3 ++
 test/classes/Html/GeneratorTest.php                |  5 ++++
 test/classes/Html/MySQLDocumentationTest.php       |  1 +
 test/classes/Html/SecurityTest.php                 |  1 +
 .../Http/Factory/ServerRequestFactoryTest.php      |  4 +++
 test/classes/Import/AjaxTest.php                   |  1 +
 test/classes/ImportTest.php                        |  8 +++++
 test/classes/IndexColumnTest.php                   |  1 +
 test/classes/IndexTest.php                         |  1 +
 test/classes/InsertEditTest.php                    |  4 +++
 test/classes/InternalRelationsTest.php             |  1 +
 test/classes/IpAllowDenyTest.php                   |  2 ++
 test/classes/LanguageTest.php                      |  4 +++
 test/classes/LinterTest.php                        |  2 ++
 test/classes/ListDatabaseTest.php                  |  1 +
 test/classes/LoggingTest.php                       |  1 +
 test/classes/MenuTest.php                          |  1 +
 test/classes/MessageTest.php                       |  5 ++++
 test/classes/MimeTest.php                          |  2 ++
 test/classes/Navigation/NavigationTest.php         |  1 +
 test/classes/Navigation/NavigationTreeTest.php     |  1 +
 test/classes/Navigation/NodeFactoryTest.php        |  5 ++++
 .../Navigation/Nodes/NodeColumnContainerTest.php   |  1 +
 test/classes/Navigation/Nodes/NodeColumnTest.php   |  1 +
 .../Navigation/Nodes/NodeDatabaseChildTest.php     |  1 +
 test/classes/Navigation/Nodes/NodeDatabaseTest.php |  1 +
 .../Navigation/Nodes/NodeEventContainerTest.php    |  1 +
 test/classes/Navigation/Nodes/NodeEventTest.php    |  1 +
 .../Navigation/Nodes/NodeFunctionContainerTest.php |  1 +
 test/classes/Navigation/Nodes/NodeFunctionTest.php |  1 +
 .../Navigation/Nodes/NodeIndexContainerTest.php    |  1 +
 test/classes/Navigation/Nodes/NodeIndexTest.php    |  1 +
 .../Nodes/NodeProcedureContainerTest.php           |  1 +
 .../classes/Navigation/Nodes/NodeProcedureTest.php |  1 +
 .../Navigation/Nodes/NodeTableContainerTest.php    |  1 +
 test/classes/Navigation/Nodes/NodeTableTest.php    |  2 ++
 test/classes/Navigation/Nodes/NodeTest.php         |  1 +
 .../Navigation/Nodes/NodeTriggerContainerTest.php  |  1 +
 test/classes/Navigation/Nodes/NodeTriggerTest.php  |  1 +
 .../Navigation/Nodes/NodeViewContainerTest.php     |  1 +
 test/classes/Navigation/Nodes/NodeViewTest.php     |  1 +
 test/classes/NormalizationTest.php                 |  1 +
 test/classes/OpenDocumentTest.php                  |  1 +
 test/classes/OperationsTest.php                    |  2 ++
 test/classes/Partitioning/PartitionTest.php        |  1 +
 test/classes/Partitioning/SubPartitionTest.php     |  1 +
 .../Partitioning/TablePartitionDefinitionTest.php  |  3 ++
 test/classes/PdfTest.php                           |  4 +++
 .../Plugins/Auth/AuthenticationConfigTest.php      |  1 +
 .../Plugins/Auth/AuthenticationCookieTest.php      | 12 ++++++++
 .../Plugins/Auth/AuthenticationHttpTest.php        |  7 +++++
 .../Plugins/Auth/AuthenticationSignonTest.php      |  1 +
 test/classes/Plugins/Export/ExportCodegenTest.php  |  2 ++
 test/classes/Plugins/Export/ExportCsvTest.php      |  2 ++
 test/classes/Plugins/Export/ExportExcelTest.php    |  2 ++
 test/classes/Plugins/Export/ExportHtmlwordTest.php |  2 ++
 test/classes/Plugins/Export/ExportJsonTest.php     |  2 ++
 test/classes/Plugins/Export/ExportLatexTest.php    |  2 ++
 .../classes/Plugins/Export/ExportMediawikiTest.php |  2 ++
 test/classes/Plugins/Export/ExportOdsTest.php      |  2 ++
 test/classes/Plugins/Export/ExportOdtTest.php      |  2 ++
 test/classes/Plugins/Export/ExportPdfTest.php      |  2 ++
 test/classes/Plugins/Export/ExportPhparrayTest.php |  2 ++
 test/classes/Plugins/Export/ExportSqlTest.php      |  9 ++++++
 test/classes/Plugins/Export/ExportTexytextTest.php |  2 ++
 test/classes/Plugins/Export/ExportXmlTest.php      |  4 +++
 test/classes/Plugins/Export/ExportYamlTest.php     |  2 ++
 .../Plugins/Export/Helpers/TablePropertyTest.php   |  5 ++++
 test/classes/Plugins/Import/ImportCsvTest.php      |  8 +++++
 test/classes/Plugins/Import/ImportLdiTest.php      |  6 ++++
 .../classes/Plugins/Import/ImportMediawikiTest.php |  4 +++
 test/classes/Plugins/Import/ImportOdsTest.php      |  5 ++++
 test/classes/Plugins/Import/ImportShpTest.php      |  4 +++
 test/classes/Plugins/Import/ImportSqlTest.php      |  2 ++
 test/classes/Plugins/Import/ImportXmlTest.php      |  5 ++++
 .../Plugins/Schema/DiaRelationSchemaTest.php       |  2 ++
 .../Plugins/Schema/EpsRelationSchemaTest.php       |  3 ++
 .../Plugins/Schema/ExportRelationSchemaTest.php    |  8 +++++
 .../Plugins/Schema/PdfRelationSchemaTest.php       |  2 ++
 .../Plugins/Schema/SvgRelationSchemaTest.php       |  2 ++
 .../Transformations/TransformationPluginsTest.php  | 23 +++++++++++++++
 test/classes/Plugins/TwoFactor/KeyTest.php         |  1 +
 test/classes/Plugins/TwoFactor/WebAuthnTest.php    |  3 ++
 test/classes/PluginsTest.php                       |  2 ++
 test/classes/ProfilingTest.php                     |  1 +
 .../Groups/OptionsPropertyMainGroupTest.php        |  1 +
 .../Groups/OptionsPropertyRootGroupTest.php        |  1 +
 .../Options/Groups/OptionsPropertySubgroupTest.php |  1 +
 .../Properties/Options/Items/PropertyItemsTest.php |  1 +
 .../Options/OptionsPropertyGroupTest.php           |  1 +
 .../Properties/Options/OptionsPropertyItemTest.php |  1 +
 .../Options/OptionsPropertyOneItemTest.php         |  1 +
 .../Plugins/ExportPluginPropertiesTest.php         |  1 +
 .../Plugins/ImportPluginPropertiesTest.php         |  1 +
 .../Properties/Plugins/PluginPropertyItemTest.php  |  1 +
 test/classes/Properties/PropertyItemTest.php       |  1 +
 test/classes/Query/CompatibilityTest.php           |  4 +++
 test/classes/Query/GeneratorTest.php               |  1 +
 test/classes/ReplicationGuiTest.php                |  2 ++
 test/classes/ResponseRendererTest.php              |  3 ++
 test/classes/RoutingTest.php                       |  1 +
 test/classes/SanitizeTest.php                      |  5 ++++
 test/classes/ScriptsTest.php                       |  1 +
 test/classes/Server/PluginTest.php                 |  2 ++
 test/classes/Server/PluginsTest.php                |  1 +
 .../Server/Privileges/AccountLockingTest.php       |  5 ++++
 test/classes/Server/PrivilegesTest.php             |  4 +++
 test/classes/Server/SelectTest.php                 |  2 ++
 test/classes/Server/SysInfo/SysInfoTest.php        |  2 ++
 test/classes/Setup/ConfigGeneratorTest.php         |  2 ++
 test/classes/Setup/FormProcessingTest.php          |  2 ++
 test/classes/Setup/IndexTest.php                   |  1 +
 test/classes/SqlQueryFormTest.php                  |  1 +
 test/classes/SqlTest.php                           |  2 ++
 test/classes/StorageEngineTest.php                 |  2 ++
 test/classes/SystemDatabaseTest.php                |  1 +
 test/classes/Table/ColumnsDefinitionTest.php       |  2 ++
 test/classes/Table/IndexesTest.php                 |  1 +
 test/classes/Table/Maintenance/MessageTest.php     |  2 ++
 test/classes/Table/SearchTest.php                  |  1 +
 test/classes/TableTest.php                         |  2 ++
 test/classes/TemplateTest.php                      |  5 ++++
 test/classes/ThemeManagerTest.php                  |  1 +
 test/classes/ThemeTest.php                         |  4 +++
 test/classes/TrackerTest.php                       |  5 ++++
 test/classes/TrackingTest.php                      |  1 +
 test/classes/TransformationsTest.php               |  5 ++++
 test/classes/TwoFactorTest.php                     |  3 ++
 test/classes/TypesByDatabaseVersionTest.php        |  5 ++++
 test/classes/TypesTest.php                         |  6 ++++
 test/classes/UrlTest.php                           |  2 ++
 test/classes/UserPasswordTest.php                  |  2 ++
 test/classes/UserPreferencesTest.php               |  1 +
 test/classes/UtilTest.php                          | 34 ++++++++++++++++++++++
 test/classes/Utils/ForeignKeyTest.php              |  5 ++++
 test/classes/Utils/FormatConverterTest.php         |  5 ++++
 test/classes/Utils/GisTest.php                     |  2 ++
 test/classes/Utils/HttpRequestTest.php             | 20 +++++++++++++
 test/classes/Utils/SessionCacheTest.php            |  1 +
 test/classes/VersionInformationTest.php            |  7 +++++
 test/classes/VersionTest.php                       |  1 +
 test/classes/WebAuthn/CBORDecoderTest.php          |  4 +++
 test/classes/WebAuthn/CustomServerTest.php         |  3 ++
 test/classes/WebAuthn/WebauthnLibServerTest.php    |  2 ++
 test/classes/ZipExtensionTest.php                  |  3 ++
 test/selenium/ChangePasswordTest.php               |  2 ++
 test/selenium/CreateDropDatabaseTest.php           |  2 ++
 test/selenium/CreateRemoveUserTest.php             |  2 ++
 test/selenium/Database/EventsTest.php              |  6 ++++
 test/selenium/Database/OperationsTest.php          |  4 +++
 test/selenium/Database/ProceduresTest.php          |  4 +++
 test/selenium/Database/QueryByExampleTest.php      |  1 +
 test/selenium/Database/StructureTest.php           |  3 ++
 test/selenium/Database/TriggersTest.php            |  4 +++
 test/selenium/ExportTest.php                       |  4 +++
 test/selenium/ImportTest.php                       |  4 +++
 test/selenium/LoginTest.php                        |  3 ++
 test/selenium/NormalizationTest.php                |  2 ++
 test/selenium/ServerSettingsTest.php               |  4 +++
 test/selenium/SqlQueryTest.php                     |  1 +
 test/selenium/Table/BrowseTest.php                 |  7 +++++
 test/selenium/Table/CreateTest.php                 |  2 ++
 test/selenium/Table/InsertTest.php                 |  2 ++
 test/selenium/Table/OperationsTest.php             |  7 +++++
 test/selenium/Table/StructureTest.php              |  4 +++
 test/selenium/TrackingTest.php                     |  5 ++++
 test/selenium/XssTest.php                          |  2 ++
 312 files changed, 880 insertions(+), 2 deletions(-)

diff --git a/test/classes/AdvisorTest.php b/test/classes/AdvisorTest.php
index 2947e34..10f0269 100644
--- a/test/classes/AdvisorTest.php
+++ b/test/classes/AdvisorTest.php
@@ -10,6 +10,7 @@ use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
 /**
  * @covers \PhpMyAdmin\Advisor
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Advisor::class)]
 class AdvisorTest extends AbstractTestCase
 {
     protected function setUp(): void
@@ -27,6 +28,7 @@ class AdvisorTest extends AbstractTestCase
      *
      * @dataProvider advisorTimes
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('advisorTimes')]
     public function testAdvisorBytime(float $time, string $expected): void
     {
         $result = Advisor::byTime($time, 2);
@@ -68,6 +70,7 @@ class AdvisorTest extends AbstractTestCase
      *
      * @dataProvider rulesProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('rulesProvider')]
     public function testAddRule(array $rule, array $expected, ?string $error): void
     {
         parent::setLanguage();
diff --git a/test/classes/BookmarkTest.php b/test/classes/BookmarkTest.php
index 4cb3291..91834f4 100644
--- a/test/classes/BookmarkTest.php
+++ b/test/classes/BookmarkTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Dbal\TableName;
 /**
  * @covers \PhpMyAdmin\Bookmark
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Bookmark::class)]
 class BookmarkTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/BrowseForeignersTest.php b/test/classes/BrowseForeignersTest.php
index c5c3062..1368b21 100644
--- a/test/classes/BrowseForeignersTest.php
+++ b/test/classes/BrowseForeignersTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Template;
 /**
  * @covers \PhpMyAdmin\BrowseForeigners
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\BrowseForeigners::class)]
 class BrowseForeignersTest extends AbstractTestCase
 {
     /** @var BrowseForeigners */
diff --git a/test/classes/CacheTest.php b/test/classes/CacheTest.php
index b9cddf0..475f754 100644
--- a/test/classes/CacheTest.php
+++ b/test/classes/CacheTest.php
@@ -10,6 +10,7 @@ use stdClass;
 /**
  * @covers \PhpMyAdmin\Cache
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Cache::class)]
 class CacheTest extends AbstractTestCase
 {
     public function setUp(): void
@@ -43,6 +44,7 @@ class CacheTest extends AbstractTestCase
      *
      * @dataProvider dataProviderCacheKeyValues
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderCacheKeyValues')]
     public function testCacheHas(string $cacheKey, $valueToCache): void
     {
         self::assertFalse(Cache::has($cacheKey));
@@ -57,6 +59,7 @@ class CacheTest extends AbstractTestCase
      *
      * @dataProvider dataProviderCacheKeyValues
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderCacheKeyValues')]
     public function testCachePurge(string $cacheKey, $valueToCache): void
     {
         self::assertFalse(Cache::has($cacheKey));
@@ -71,6 +74,7 @@ class CacheTest extends AbstractTestCase
      *
      * @dataProvider dataProviderCacheKeyValues
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderCacheKeyValues')]
     public function testCacheSet(string $cacheKey, $valueToCache): void
     {
         self::assertFalse(Cache::has($cacheKey));
@@ -83,6 +87,7 @@ class CacheTest extends AbstractTestCase
      *
      * @dataProvider dataProviderCacheKeyValues
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderCacheKeyValues')]
     public function testCacheGet(string $cacheKey, $valueToCache): void
     {
         self::assertFalse(Cache::has($cacheKey));
@@ -96,6 +101,7 @@ class CacheTest extends AbstractTestCase
      *
      * @dataProvider dataProviderCacheKeyValues
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderCacheKeyValues')]
     public function testCacheGetDefaultValue(string $cacheKey, $valueToCache): void
     {
         self::assertFalse(Cache::has($cacheKey));
@@ -115,6 +121,7 @@ class CacheTest extends AbstractTestCase
      *
      * @dataProvider dataProviderCacheKeyValues
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderCacheKeyValues')]
     public function testCacheRemove(string $cacheKey, $valueToCache): void
     {
         self::assertFalse(Cache::has($cacheKey));
diff --git a/test/classes/Charsets/CharsetTest.php b/test/classes/Charsets/CharsetTest.php
index fb2b644..88bb8b4 100644
--- a/test/classes/Charsets/CharsetTest.php
+++ b/test/classes/Charsets/CharsetTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Charsets\Charset
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Charsets\Charset::class)]
 class CharsetTest extends AbstractTestCase
 {
     public function testFromServer(): void
diff --git a/test/classes/Charsets/CollationTest.php b/test/classes/Charsets/CollationTest.php
index ed9dca1..214729e 100644
--- a/test/classes/Charsets/CollationTest.php
+++ b/test/classes/Charsets/CollationTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Charsets\Collation
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Charsets\Collation::class)]
 class CollationTest extends AbstractTestCase
 {
     public function testFromServer(): void
@@ -45,6 +46,7 @@ class CollationTest extends AbstractTestCase
      *
      * @dataProvider providerTestBuildDescription
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerTestBuildDescription')]
     public function testBuildDescription(string $collation, string $description): void
     {
         $actual = Collation::fromServer(['Collation' => $collation]);
diff --git a/test/classes/CharsetsTest.php b/test/classes/CharsetsTest.php
index fc65521..9071ffb 100644
--- a/test/classes/CharsetsTest.php
+++ b/test/classes/CharsetsTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Charsets;
 /**
  * @covers \PhpMyAdmin\Charsets
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Charsets::class)]
 class CharsetsTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/CheckUserPrivilegesTest.php b/test/classes/CheckUserPrivilegesTest.php
index 2fa7e01..cc18946 100644
--- a/test/classes/CheckUserPrivilegesTest.php
+++ b/test/classes/CheckUserPrivilegesTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\CheckUserPrivileges;
 /**
  * @covers \PhpMyAdmin\CheckUserPrivileges
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\CheckUserPrivileges::class)]
 class CheckUserPrivilegesTest extends AbstractTestCase
 {
     /** @var CheckUserPrivileges */
diff --git a/test/classes/Command/SetVersionCommandTest.php b/test/classes/Command/SetVersionCommandTest.php
index 58e4731..23d9aa5 100644
--- a/test/classes/Command/SetVersionCommandTest.php
+++ b/test/classes/Command/SetVersionCommandTest.php
@@ -15,6 +15,7 @@ use function sprintf;
 /**
  * @covers \PhpMyAdmin\Command\SetVersionCommand
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Command\SetVersionCommand::class)]
 class SetVersionCommandTest extends AbstractTestCase
 {
     /** @var SetVersionCommand */
@@ -57,6 +58,7 @@ class SetVersionCommandTest extends AbstractTestCase
     /**
      * @dataProvider dataProviderBadVersions
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderBadVersions')]
     public function testGetGeneratedClassInvalidVersion(string $version): void
     {
         if (! class_exists(Command::class)) {
@@ -173,6 +175,7 @@ class SetVersionCommandTest extends AbstractTestCase
     /**
      * @dataProvider dataProviderGoodVersions
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderGoodVersions')]
     public function testGetGeneratedClassValidVersion(string $version, string $content): void
     {
         if (! class_exists(Command::class)) {
diff --git a/test/classes/Command/TwigLintCommandTest.php b/test/classes/Command/TwigLintCommandTest.php
index 767e46a..d49e05a 100644
--- a/test/classes/Command/TwigLintCommandTest.php
+++ b/test/classes/Command/TwigLintCommandTest.php
@@ -21,6 +21,7 @@ use const TEST_PATH;
 /**
  * @covers \PhpMyAdmin\Command\TwigLintCommand
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Command\TwigLintCommand::class)]
 class TwigLintCommandTest extends AbstractTestCase
 {
     /** @var TwigLintCommand */
@@ -101,6 +102,7 @@ class TwigLintCommandTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetFilesInfoInvalidFile(): void
     {
         $command = $this->getMockBuilder(TwigLintCommand::class)
diff --git a/test/classes/Command/WriteGitRevisionCommandTest.php b/test/classes/Command/WriteGitRevisionCommandTest.php
index 94f9637..db21443 100644
--- a/test/classes/Command/WriteGitRevisionCommandTest.php
+++ b/test/classes/Command/WriteGitRevisionCommandTest.php
@@ -15,6 +15,7 @@ use function sprintf;
 /**
  * @covers \PhpMyAdmin\Command\WriteGitRevisionCommand
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Command\WriteGitRevisionCommand::class)]
 class WriteGitRevisionCommandTest extends AbstractTestCase
 {
     /** @var WriteGitRevisionCommand */
@@ -23,6 +24,7 @@ class WriteGitRevisionCommandTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetGeneratedClassValidVersion(): void
     {
         if (! class_exists(Command::class)) {
diff --git a/test/classes/CommonTest.php b/test/classes/CommonTest.php
index 9654b16..e005bb5 100644
--- a/test/classes/CommonTest.php
+++ b/test/classes/CommonTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Common;
 /**
  * @covers \PhpMyAdmin\Common
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Common::class)]
 class CommonTest extends AbstractTestCase
 {
     /**
@@ -19,6 +20,7 @@ class CommonTest extends AbstractTestCase
      *
      * @dataProvider providerForTestCleanupPathInfo
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestCleanupPathInfo')]
     public function testCleanupPathInfo(string $php_self, string $request, string $path_info, string $expected): void
     {
         $_SERVER['PHP_SELF'] = $php_self;
diff --git a/test/classes/Config/ConfigFileTest.php b/test/classes/Config/ConfigFileTest.php
index fbdfc13..8e8d4d1 100644
--- a/test/classes/Config/ConfigFileTest.php
+++ b/test/classes/Config/ConfigFileTest.php
@@ -15,6 +15,7 @@ use function count;
 /**
  * @covers \PhpMyAdmin\Config\ConfigFile
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\ConfigFile::class)]
 class ConfigFileTest extends AbstractTestCase
 {
     /**
@@ -249,6 +250,7 @@ class ConfigFileTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetFlatDefaultConfig(): void
     {
         $flat_default_config = $this->object->getFlatDefaultConfig();
diff --git a/test/classes/Config/DescriptionTest.php b/test/classes/Config/DescriptionTest.php
index d454f95..f06ba66 100644
--- a/test/classes/Config/DescriptionTest.php
+++ b/test/classes/Config/DescriptionTest.php
@@ -14,6 +14,7 @@ use function in_array;
 /**
  * @covers \PhpMyAdmin\Config\Descriptions
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Descriptions::class)]
 class DescriptionTest extends AbstractTestCase
 {
     /**
@@ -32,6 +33,7 @@ class DescriptionTest extends AbstractTestCase
      *
      * @dataProvider getValues
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('getValues')]
     public function testGet(string $item, string $type, string $expected): void
     {
         self::assertSame($expected, Descriptions::get($item, $type));
diff --git a/test/classes/Config/FormDisplayTemplateTest.php b/test/classes/Config/FormDisplayTemplateTest.php
index 994a8d2..b4e29ab 100644
--- a/test/classes/Config/FormDisplayTemplateTest.php
+++ b/test/classes/Config/FormDisplayTemplateTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Config\FormDisplayTemplate
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\FormDisplayTemplate::class)]
 class FormDisplayTemplateTest extends AbstractTestCase
 {
     /** @var FormDisplayTemplate */
diff --git a/test/classes/Config/FormDisplayTest.php b/test/classes/Config/FormDisplayTest.php
index 7dd7455..0ae773b 100644
--- a/test/classes/Config/FormDisplayTest.php
+++ b/test/classes/Config/FormDisplayTest.php
@@ -18,6 +18,7 @@ use function gettype;
 /**
  * @covers \PhpMyAdmin\Config\FormDisplay
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\FormDisplay::class)]
 class FormDisplayTest extends AbstractTestCase
 {
     /** @var FormDisplay */
@@ -50,6 +51,7 @@ class FormDisplayTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testRegisterForm(): void
     {
         $reflection = new ReflectionClass(FormDisplay::class);
@@ -92,6 +94,7 @@ class FormDisplayTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testProcess(): void
     {
         self::assertFalse($this->object->process(true, true));
diff --git a/test/classes/Config/FormTest.php b/test/classes/Config/FormTest.php
index c6f5400..3f3bf34 100644
--- a/test/classes/Config/FormTest.php
+++ b/test/classes/Config/FormTest.php
@@ -16,6 +16,7 @@ use function preg_match;
 /**
  * @covers \PhpMyAdmin\Config\Form
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Form::class)]
 class FormTest extends AbstractTestCase
 {
     /** @var Form */
@@ -55,6 +56,7 @@ class FormTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testContructor(): void
     {
         self::assertSame(1, $this->object->index);
diff --git a/test/classes/Config/Forms/FormListTest.php b/test/classes/Config/Forms/FormListTest.php
index cc06bfd..2c6fd8e 100644
--- a/test/classes/Config/Forms/FormListTest.php
+++ b/test/classes/Config/Forms/FormListTest.php
@@ -18,6 +18,10 @@ use PhpMyAdmin\Tests\AbstractTestCase;
  * @covers \PhpMyAdmin\Config\Forms\Setup\SetupFormList
  * @covers \PhpMyAdmin\Config\Forms\User\UserFormList
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Forms\BaseFormList::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Forms\Page\PageFormList::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Forms\Setup\SetupFormList::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Forms\User\UserFormList::class)]
 class FormListTest extends AbstractTestCase
 {
     protected function setUp(): void
@@ -37,6 +41,7 @@ class FormListTest extends AbstractTestCase
      *
      * @dataProvider formObjects
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('formObjects')]
     public function testForms(string $class, string $prefix): void
     {
         $cf = new ConfigFile($GLOBALS['config']->baseSettings);
diff --git a/test/classes/Config/PageSettingsTest.php b/test/classes/Config/PageSettingsTest.php
index e0660bd..80a40bd 100644
--- a/test/classes/Config/PageSettingsTest.php
+++ b/test/classes/Config/PageSettingsTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Config\PageSettings
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\PageSettings::class)]
 class PageSettingsTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Config/ServerConfigChecksTest.php b/test/classes/Config/ServerConfigChecksTest.php
index 27909eb..e69348c 100644
--- a/test/classes/Config/ServerConfigChecksTest.php
+++ b/test/classes/Config/ServerConfigChecksTest.php
@@ -19,6 +19,7 @@ use const SODIUM_CRYPTO_SECRETBOX_KEYBYTES;
 /**
  * @covers \PhpMyAdmin\Config\ServerConfigChecks
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\ServerConfigChecks::class)]
 class ServerConfigChecksTest extends AbstractTestCase
 {
     /** @var string */
diff --git a/test/classes/Config/Settings/ConsoleTest.php b/test/classes/Config/Settings/ConsoleTest.php
index e339b44..677e758 100644
--- a/test/classes/Config/Settings/ConsoleTest.php
+++ b/test/classes/Config/Settings/ConsoleTest.php
@@ -13,6 +13,7 @@ use function array_merge;
 /**
  * @covers \PhpMyAdmin\Config\Settings\Console
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Console::class)]
 class ConsoleTest extends TestCase
 {
     /** @var array<string, bool|int|string> */
@@ -35,6 +36,7 @@ class ConsoleTest extends TestCase
      *
      * @dataProvider providerForTestConstructor
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestConstructor')]
     public function testConstructor(array $values): void
     {
         $actualValues = [];
diff --git a/test/classes/Config/Settings/DebugTest.php b/test/classes/Config/Settings/DebugTest.php
index 3200be9..42eb25d 100644
--- a/test/classes/Config/Settings/DebugTest.php
+++ b/test/classes/Config/Settings/DebugTest.php
@@ -13,6 +13,7 @@ use function array_merge;
 /**
  * @covers \PhpMyAdmin\Config\Settings\Debug
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Debug::class)]
 class DebugTest extends TestCase
 {
     /** @var array<string, bool> */
@@ -24,6 +25,7 @@ class DebugTest extends TestCase
      *
      * @dataProvider providerForTestConstructor
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestConstructor')]
     public function testConstructor(array $values): void
     {
         $actualValues = [];
diff --git a/test/classes/Config/Settings/ExportTest.php b/test/classes/Config/Settings/ExportTest.php
index 254f19e..5b45918 100644
--- a/test/classes/Config/Settings/ExportTest.php
+++ b/test/classes/Config/Settings/ExportTest.php
@@ -13,6 +13,7 @@ use function array_merge;
 /**
  * @covers \PhpMyAdmin\Config\Settings\Export
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Export::class)]
 class ExportTest extends TestCase
 {
     /** @var array<string, bool|int|string> */
@@ -133,6 +134,7 @@ class ExportTest extends TestCase
      *
      * @dataProvider providerForTestConstructor
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestConstructor')]
     public function testConstructor(array $values): void
     {
         $actualValues = [];
diff --git a/test/classes/Config/Settings/ImportTest.php b/test/classes/Config/Settings/ImportTest.php
index c86c71f..5281415 100644
--- a/test/classes/Config/Settings/ImportTest.php
+++ b/test/classes/Config/Settings/ImportTest.php
@@ -13,6 +13,7 @@ use function array_merge;
 /**
  * @covers \PhpMyAdmin\Config\Settings\Import
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Import::class)]
 class ImportTest extends TestCase
 {
     /** @var array<string, bool|int|string> */
@@ -52,6 +53,7 @@ class ImportTest extends TestCase
      *
      * @dataProvider providerForTestConstructor
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestConstructor')]
     public function testConstructor(array $values): void
     {
         $actualValues = [];
diff --git a/test/classes/Config/Settings/SchemaTest.php b/test/classes/Config/Settings/SchemaTest.php
index d95bd30..18ee7ef 100644
--- a/test/classes/Config/Settings/SchemaTest.php
+++ b/test/classes/Config/Settings/SchemaTest.php
@@ -13,6 +13,7 @@ use function array_merge;
 /**
  * @covers \PhpMyAdmin\Config\Settings\Schema
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Schema::class)]
 class SchemaTest extends TestCase
 {
     /** @var array<string, bool|string> */
@@ -45,6 +46,7 @@ class SchemaTest extends TestCase
      *
      * @dataProvider providerForTestConstructor
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestConstructor')]
     public function testConstructor(array $values): void
     {
         $actualValues = [];
diff --git a/test/classes/Config/Settings/ServerTest.php b/test/classes/Config/Settings/ServerTest.php
index 06b7d6a..f27a1f3 100644
--- a/test/classes/Config/Settings/ServerTest.php
+++ b/test/classes/Config/Settings/ServerTest.php
@@ -15,6 +15,7 @@ use function array_merge;
 /**
  * @covers \PhpMyAdmin\Config\Settings\Server
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Server::class)]
 class ServerTest extends TestCase
 {
     /** @var array<string, array|bool|int|string|null> */
@@ -86,6 +87,7 @@ class ServerTest extends TestCase
      *
      * @dataProvider providerForTestConstructor
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestConstructor')]
     public function testConstructor(array $values): void
     {
         $actualValues = [];
diff --git a/test/classes/Config/Settings/SqlQueryBoxTest.php b/test/classes/Config/Settings/SqlQueryBoxTest.php
index b4cab64..6b73cf6 100644
--- a/test/classes/Config/Settings/SqlQueryBoxTest.php
+++ b/test/classes/Config/Settings/SqlQueryBoxTest.php
@@ -13,6 +13,7 @@ use function array_merge;
 /**
  * @covers \PhpMyAdmin\Config\Settings\SqlQueryBox
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\SqlQueryBox::class)]
 class SqlQueryBoxTest extends TestCase
 {
     /** @var array<string, bool> */
@@ -24,6 +25,7 @@ class SqlQueryBoxTest extends TestCase
      *
      * @dataProvider providerForTestConstructor
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestConstructor')]
     public function testConstructor(array $values): void
     {
         $actualValues = [];
diff --git a/test/classes/Config/Settings/TransformationsTest.php b/test/classes/Config/Settings/TransformationsTest.php
index f65b357..40fa7f5 100644
--- a/test/classes/Config/Settings/TransformationsTest.php
+++ b/test/classes/Config/Settings/TransformationsTest.php
@@ -15,6 +15,7 @@ use function array_merge;
 /**
  * @covers \PhpMyAdmin\Config\Settings\Transformations
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Transformations::class)]
 class TransformationsTest extends TestCase
 {
     /** @var array<string, array<int|string, array|int|string|null>> */
@@ -36,6 +37,7 @@ class TransformationsTest extends TestCase
      *
      * @dataProvider providerForTestConstructor
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestConstructor')]
     public function testConstructor(array $values): void
     {
         $actualValues = [];
diff --git a/test/classes/Config/SettingsTest.php b/test/classes/Config/SettingsTest.php
index 7932bfd..c5cd2ad 100644
--- a/test/classes/Config/SettingsTest.php
+++ b/test/classes/Config/SettingsTest.php
@@ -34,6 +34,15 @@ use const ROOT_PATH;
  * @covers \PhpMyAdmin\Config\Settings\SqlQueryBox
  * @covers \PhpMyAdmin\Config\Settings\Transformations
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Console::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Debug::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Export::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Import::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Schema::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Server::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\SqlQueryBox::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config\Settings\Transformations::class)]
 class SettingsTest extends TestCase
 {
     /** @var array<string, array|bool|int|string|null> */
@@ -307,6 +316,7 @@ class SettingsTest extends TestCase
      *
      * @dataProvider providerForTestConstructor
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestConstructor')]
     public function testConstructor(array $values): void
     {
         $actualValues = [];
diff --git a/test/classes/ConfigStorage/RelationCleanupTest.php b/test/classes/ConfigStorage/RelationCleanupTest.php
index a63e8d9..b614f4f 100644
--- a/test/classes/ConfigStorage/RelationCleanupTest.php
+++ b/test/classes/ConfigStorage/RelationCleanupTest.php
@@ -14,6 +14,7 @@ use PHPUnit\Framework\MockObject\MockObject;
 /**
  * @covers \PhpMyAdmin\ConfigStorage\RelationCleanup
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\RelationCleanup::class)]
 class RelationCleanupTest extends AbstractTestCase
 {
     /** @var Relation|MockObject */
@@ -60,6 +61,7 @@ class RelationCleanupTest extends AbstractTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testColumnWithRelations(): void
     {
         $_SESSION['relation'] = [];
@@ -96,6 +98,7 @@ class RelationCleanupTest extends AbstractTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testTableWithRelations(): void
     {
         $_SESSION['relation'] = [];
@@ -138,6 +141,7 @@ class RelationCleanupTest extends AbstractTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testDatabaseWithRelations(): void
     {
         $_SESSION['relation'] = [];
@@ -187,6 +191,7 @@ class RelationCleanupTest extends AbstractTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testUserWithRelations(): void
     {
         $_SESSION['relation'] = [];
diff --git a/test/classes/ConfigStorage/RelationParametersTest.php b/test/classes/ConfigStorage/RelationParametersTest.php
index 24d424a..5354964 100644
--- a/test/classes/ConfigStorage/RelationParametersTest.php
+++ b/test/classes/ConfigStorage/RelationParametersTest.php
@@ -30,6 +30,25 @@ use PHPUnit\Framework\TestCase;
  * @covers \PhpMyAdmin\ConfigStorage\Features\UiPreferencesFeature
  * @covers \PhpMyAdmin\ConfigStorage\Features\UserPreferencesFeature
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\RelationParameters::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\BookmarkFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\BrowserTransformationFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\CentralColumnsFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\ColumnCommentsFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\ConfigurableMenusFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\DatabaseDesignerSettingsFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\DisplayFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\ExportTemplatesFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\FavoriteTablesFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\NavigationItemsHidingFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\PdfFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\RecentlyUsedTablesFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\RelationFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\SavedQueryByExampleSearchesFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\SqlHistoryFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\TrackingFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\UiPreferencesFeature::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Features\UserPreferencesFeature::class)]
 class RelationParametersTest extends TestCase
 {
     public function testFeaturesWithTwoTables(): void
@@ -246,6 +265,7 @@ class RelationParametersTest extends TestCase
      *
      * @dataProvider providerForTestToArray
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestToArray')]
     public function testToArray(array $params, array $expected): void
     {
         self::assertSame($expected, RelationParameters::fromArray($params)->toArray());
diff --git a/test/classes/ConfigStorage/RelationTest.php b/test/classes/ConfigStorage/RelationTest.php
index 429a1f7..a21b6e2 100644
--- a/test/classes/ConfigStorage/RelationTest.php
+++ b/test/classes/ConfigStorage/RelationTest.php
@@ -18,6 +18,8 @@ use function implode;
  * @covers \PhpMyAdmin\ConfigStorage\Relation
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\Relation::class)]
 class RelationTest extends AbstractTestCase
 {
     /** @var Relation */
@@ -2160,6 +2162,7 @@ class RelationTest extends AbstractTestCase
      *
      * @dataProvider providerForTestRenameTable
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestRenameTable')]
     public function testRenameTable(array $params, array $queries): void
     {
         $GLOBALS['server'] = 1;
diff --git a/test/classes/ConfigStorage/UserGroupsTest.php b/test/classes/ConfigStorage/UserGroupsTest.php
index 4fba270..8cbd8c4 100644
--- a/test/classes/ConfigStorage/UserGroupsTest.php
+++ b/test/classes/ConfigStorage/UserGroupsTest.php
@@ -18,6 +18,7 @@ use PhpMyAdmin\Url;
 /**
  * @covers \PhpMyAdmin\ConfigStorage\UserGroups
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ConfigStorage\UserGroups::class)]
 class UserGroupsTest extends AbstractTestCase
 {
     /** @var ConfigurableMenusFeature */
@@ -44,6 +45,7 @@ class UserGroupsTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetHtmlForUserGroupsTableWithNoUserGroups(): void
     {
         $expectedQuery = 'SELECT * FROM `pmadb`.`usergroups` ORDER BY `usergroup` ASC';
@@ -90,6 +92,7 @@ class UserGroupsTest extends AbstractTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testDeleteUserGroup(): void
     {
         $userDelQuery = 'DELETE FROM `pmadb`.`users` WHERE `usergroup`=\'ug\'';
diff --git a/test/classes/ConfigTest.php b/test/classes/ConfigTest.php
index b9ada1e..25d04ba 100644
--- a/test/classes/ConfigTest.php
+++ b/test/classes/ConfigTest.php
@@ -40,6 +40,7 @@ use const TEST_PATH;
 /**
  * @covers \PhpMyAdmin\Config
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Config::class)]
 class ConfigTest extends AbstractTestCase
 {
     /** @var Config */
@@ -168,6 +169,7 @@ class ConfigTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testCheckSystem(): void
     {
         $this->object->checkSystem();
@@ -204,6 +206,7 @@ class ConfigTest extends AbstractTestCase
      *
      * @dataProvider userAgentProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('userAgentProvider')]
     public function testCheckClient(string $agent, string $os, ?string $browser = null, ?string $version = null): void
     {
         $_SERVER['HTTP_USER_AGENT'] = $agent;
@@ -381,6 +384,7 @@ class ConfigTest extends AbstractTestCase
      *
      * @dataProvider serverNames
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('serverNames')]
     public function testCheckWebServer(string $server, int $iis): void
     {
         $_SERVER['SERVER_SOFTWARE'] = $server;
@@ -440,6 +444,7 @@ class ConfigTest extends AbstractTestCase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testLoadDefaults(): void
     {
         $this->object->defaultServer = [];
@@ -519,6 +524,7 @@ class ConfigTest extends AbstractTestCase
      *
      * @dataProvider httpsParams
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('httpsParams')]
     public function testIsHttps(
         string $scheme,
         string $https,
@@ -775,6 +781,7 @@ class ConfigTest extends AbstractTestCase
      *
      * @dataProvider rootUris
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('rootUris')]
     public function testGetRootPath(string $request, string $absolute, string $expected): void
     {
         $GLOBALS['PMA_PHP_SELF'] = $request;
@@ -881,6 +888,7 @@ class ConfigTest extends AbstractTestCase
      *
      * @dataProvider configPaths
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('configPaths')]
     public function testLoad(string $source, bool $result): void
     {
         if ($result) {
@@ -915,6 +923,7 @@ class ConfigTest extends AbstractTestCase
      * @todo Test actually preferences loading
      * @doesNotPerformAssertions
      */
+    #[\PHPUnit\Framework\Attributes\DoesNotPerformAssertions]
     public function testLoadUserPreferences(): void
     {
         $this->object->loadUserPreferences();
@@ -996,6 +1005,7 @@ class ConfigTest extends AbstractTestCase
      *
      * @group file-system
      */
+    #[\PHPUnit\Framework\Attributes\Group('file-system')]
     public function testGetTempDir(): void
     {
         $dir = realpath(sys_get_temp_dir());
@@ -1014,6 +1024,8 @@ class ConfigTest extends AbstractTestCase
      * @group file-system
      * @depends testGetTempDir
      */
+    #[\PHPUnit\Framework\Attributes\Group('file-system')]
+    #[\PHPUnit\Framework\Attributes\Depends('testGetTempDir')]
     public function testGetUploadTempDir(): void
     {
         $dir = realpath(sys_get_temp_dir());
@@ -1034,6 +1046,7 @@ class ConfigTest extends AbstractTestCase
      *
      * @dataProvider serverSettingsProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('serverSettingsProvider')]
     public function testCheckServers(array $settings, array $expected): void
     {
         $this->object->settings['Servers'] = $settings;
@@ -1073,6 +1086,8 @@ class ConfigTest extends AbstractTestCase
      * @group with-trigger-error
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\Group('with-trigger-error')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testCheckServersWithInvalidServer(): void
     {
         set_error_handler(
@@ -1103,6 +1118,8 @@ class ConfigTest extends AbstractTestCase
      * @dataProvider selectServerProvider
      * @depends testCheckServers
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('selectServerProvider')]
+    #[\PHPUnit\Framework\Attributes\Depends('testCheckServers')]
     public function testSelectServer(array $settings, string $request, int $expected): void
     {
         $this->object->settings['Servers'] = $settings;
@@ -1177,6 +1194,7 @@ class ConfigTest extends AbstractTestCase
      *
      * @dataProvider connectionParams
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('connectionParams')]
     public function testGetConnectionParams(array $server_cfg, int $mode, ?array $server, array $expected): void
     {
         $GLOBALS['cfg']['Server'] = $server_cfg;
diff --git a/test/classes/ConsoleTest.php b/test/classes/ConsoleTest.php
index cd59678..88888a2 100644
--- a/test/classes/ConsoleTest.php
+++ b/test/classes/ConsoleTest.php
@@ -10,6 +10,7 @@ use ReflectionProperty;
 /**
  * @covers \PhpMyAdmin\Console
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Console::class)]
 class ConsoleTest extends AbstractTestCase
 {
     public function testGetScripts(): void
diff --git a/test/classes/Controllers/CheckRelationsControllerTest.php b/test/classes/Controllers/CheckRelationsControllerTest.php
index fec3f1d..7f836eb 100644
--- a/test/classes/Controllers/CheckRelationsControllerTest.php
+++ b/test/classes/Controllers/CheckRelationsControllerTest.php
@@ -14,6 +14,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\CheckRelationsController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\CheckRelationsController::class)]
 class CheckRelationsControllerTest extends AbstractTestCase
 {
     public function testCheckRelationsController(): void
diff --git a/test/classes/Controllers/Database/EventsControllerTest.php b/test/classes/Controllers/Database/EventsControllerTest.php
index 09dbb50..d283a59 100644
--- a/test/classes/Controllers/Database/EventsControllerTest.php
+++ b/test/classes/Controllers/Database/EventsControllerTest.php
@@ -16,6 +16,8 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
  * @covers \PhpMyAdmin\Controllers\Database\EventsController
  * @covers \PhpMyAdmin\Database\Events
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Database\EventsController::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\Events::class)]
 final class EventsControllerTest extends AbstractTestCase
 {
     public function testWithEvents(): void
diff --git a/test/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php b/test/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php
index 9bd98e2..2213f85 100644
--- a/test/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php
+++ b/test/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Controllers\Database\MultiTableQuery\TablesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Database\MultiTableQuery\TablesController::class)]
 class TablesControllerTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/Controllers/Database/PrivilegesControllerTest.php b/test/classes/Controllers/Database/PrivilegesControllerTest.php
index e7fbb34..ccc7ef3 100644
--- a/test/classes/Controllers/Database/PrivilegesControllerTest.php
+++ b/test/classes/Controllers/Database/PrivilegesControllerTest.php
@@ -17,6 +17,7 @@ use function _pgettext;
 /**
  * @covers \PhpMyAdmin\Controllers\Database\PrivilegesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Database\PrivilegesController::class)]
 class PrivilegesControllerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Controllers/Database/RoutinesControllerTest.php b/test/classes/Controllers/Database/RoutinesControllerTest.php
index 39bb6a5..2efae80 100644
--- a/test/classes/Controllers/Database/RoutinesControllerTest.php
+++ b/test/classes/Controllers/Database/RoutinesControllerTest.php
@@ -16,6 +16,8 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
  * @covers \PhpMyAdmin\Controllers\Database\RoutinesController
  * @covers \PhpMyAdmin\Database\Routines
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Database\RoutinesController::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\Routines::class)]
 final class RoutinesControllerTest extends AbstractTestCase
 {
     public function testWithRoutines(): void
diff --git a/test/classes/Controllers/Database/Structure/FavoriteTableControllerTest.php b/test/classes/Controllers/Database/Structure/FavoriteTableControllerTest.php
index c3d0277..8737ac8 100644
--- a/test/classes/Controllers/Database/Structure/FavoriteTableControllerTest.php
+++ b/test/classes/Controllers/Database/Structure/FavoriteTableControllerTest.php
@@ -17,6 +17,7 @@ use function json_encode;
 /**
  * @covers \PhpMyAdmin\Controllers\Database\Structure\FavoriteTableController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Database\Structure\FavoriteTableController::class)]
 class FavoriteTableControllerTest extends AbstractTestCase
 {
     public function testSynchronizeFavoriteTables(): void
diff --git a/test/classes/Controllers/Database/Structure/RealRowCountControllerTest.php b/test/classes/Controllers/Database/Structure/RealRowCountControllerTest.php
index aec766d..2ba5b65 100644
--- a/test/classes/Controllers/Database/Structure/RealRowCountControllerTest.php
+++ b/test/classes/Controllers/Database/Structure/RealRowCountControllerTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer as ResponseStub;
 /**
  * @covers \PhpMyAdmin\Controllers\Database\Structure\RealRowCountController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Database\Structure\RealRowCountController::class)]
 class RealRowCountControllerTest extends AbstractTestCase
 {
     public function testRealRowCount(): void
diff --git a/test/classes/Controllers/Database/StructureControllerTest.php b/test/classes/Controllers/Database/StructureControllerTest.php
index ea72bfa..a75eb29 100644
--- a/test/classes/Controllers/Database/StructureControllerTest.php
+++ b/test/classes/Controllers/Database/StructureControllerTest.php
@@ -22,6 +22,7 @@ use ReflectionException;
 /**
  * @covers \PhpMyAdmin\Controllers\Database\StructureController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Database\StructureController::class)]
 class StructureControllerTest extends AbstractTestCase
 {
     /** @var ResponseStub */
diff --git a/test/classes/Controllers/Database/TriggersControllerTest.php b/test/classes/Controllers/Database/TriggersControllerTest.php
index a58ae8d..fce7141 100644
--- a/test/classes/Controllers/Database/TriggersControllerTest.php
+++ b/test/classes/Controllers/Database/TriggersControllerTest.php
@@ -15,6 +15,8 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
  * @covers \PhpMyAdmin\Controllers\Database\TriggersController
  * @covers \PhpMyAdmin\Database\Triggers
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Database\TriggersController::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\Triggers::class)]
 final class TriggersControllerTest extends AbstractTestCase
 {
     public function testWithTriggers(): void
diff --git a/test/classes/Controllers/Export/ExportControllerTest.php b/test/classes/Controllers/Export/ExportControllerTest.php
index 5d0b24c..4581960 100644
--- a/test/classes/Controllers/Export/ExportControllerTest.php
+++ b/test/classes/Controllers/Export/ExportControllerTest.php
@@ -24,6 +24,7 @@ use const MYSQLI_TYPE_STRING;
 /**
  * @covers \PhpMyAdmin\Controllers\Export\ExportController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Export\ExportController::class)]
 class ExportControllerTest extends AbstractTestCase
 {
     public function testExportController(): void
diff --git a/test/classes/Controllers/Export/Template/CreateControllerTest.php b/test/classes/Controllers/Export/Template/CreateControllerTest.php
index 2a241c5..fd9fc86 100644
--- a/test/classes/Controllers/Export/Template/CreateControllerTest.php
+++ b/test/classes/Controllers/Export/Template/CreateControllerTest.php
@@ -17,6 +17,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Export\Template\CreateController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Export\Template\CreateController::class)]
 class CreateControllerTest extends AbstractTestCase
 {
     public function testCreate(): void
diff --git a/test/classes/Controllers/Export/Template/DeleteControllerTest.php b/test/classes/Controllers/Export/Template/DeleteControllerTest.php
index 70eede1..6d163c3 100644
--- a/test/classes/Controllers/Export/Template/DeleteControllerTest.php
+++ b/test/classes/Controllers/Export/Template/DeleteControllerTest.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Export\Template\DeleteController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Export\Template\DeleteController::class)]
 class DeleteControllerTest extends AbstractTestCase
 {
     public function testDelete(): void
diff --git a/test/classes/Controllers/Export/Template/LoadControllerTest.php b/test/classes/Controllers/Export/Template/LoadControllerTest.php
index db12837..d7f1702 100644
--- a/test/classes/Controllers/Export/Template/LoadControllerTest.php
+++ b/test/classes/Controllers/Export/Template/LoadControllerTest.php
@@ -16,6 +16,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Export\Template\LoadController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Export\Template\LoadController::class)]
 class LoadControllerTest extends AbstractTestCase
 {
     public function testLoad(): void
diff --git a/test/classes/Controllers/Export/Template/UpdateControllerTest.php b/test/classes/Controllers/Export/Template/UpdateControllerTest.php
index 19f7a6d..a460e99 100644
--- a/test/classes/Controllers/Export/Template/UpdateControllerTest.php
+++ b/test/classes/Controllers/Export/Template/UpdateControllerTest.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Export\Template\UpdateController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Export\Template\UpdateController::class)]
 class UpdateControllerTest extends AbstractTestCase
 {
     public function testUpdate(): void
diff --git a/test/classes/Controllers/GisDataEditorControllerTest.php b/test/classes/Controllers/GisDataEditorControllerTest.php
index 69cd940..0d1715c 100644
--- a/test/classes/Controllers/GisDataEditorControllerTest.php
+++ b/test/classes/Controllers/GisDataEditorControllerTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\GisDataEditorController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\GisDataEditorController::class)]
 class GisDataEditorControllerTest extends AbstractTestCase
 {
     /** @var GisDataEditorController|null */
@@ -37,6 +38,7 @@ class GisDataEditorControllerTest extends AbstractTestCase
      * @group gis
      * @dataProvider providerForTestValidateGisData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestValidateGisData')]
     public function testValidateGisData(array $gis_data, string $type, ?string $value, array $expected): void
     {
         /** @var mixed[] $gisData */
diff --git a/test/classes/Controllers/Import/ImportControllerTest.php b/test/classes/Controllers/Import/ImportControllerTest.php
index 00792ac..3fa3242 100644
--- a/test/classes/Controllers/Import/ImportControllerTest.php
+++ b/test/classes/Controllers/Import/ImportControllerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Controllers\Import\ImportController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Import\ImportController::class)]
 class ImportControllerTest extends AbstractTestCase
 {
     public function testIndexParametrized(): void
diff --git a/test/classes/Controllers/Import/SimulateDmlControllerTest.php b/test/classes/Controllers/Import/SimulateDmlControllerTest.php
index cdeba01..a6d4bd2 100644
--- a/test/classes/Controllers/Import/SimulateDmlControllerTest.php
+++ b/test/classes/Controllers/Import/SimulateDmlControllerTest.php
@@ -21,6 +21,7 @@ use function count;
 /**
  * @covers \PhpMyAdmin\Controllers\Import\SimulateDmlController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Import\SimulateDmlController::class)]
 class SimulateDmlControllerTest extends AbstractTestCase
 {
     /**
@@ -35,6 +36,7 @@ class SimulateDmlControllerTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGetMatchedRows
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetMatchedRows')]
     public function testGetMatchedRows(string $sqlQuery, array $expectedPerQuery): void
     {
         $GLOBALS['db'] = 'PMA';
diff --git a/test/classes/Controllers/JavaScriptMessagesControllerTest.php b/test/classes/Controllers/JavaScriptMessagesControllerTest.php
index 41ab0cf..4bf4b32 100644
--- a/test/classes/Controllers/JavaScriptMessagesControllerTest.php
+++ b/test/classes/Controllers/JavaScriptMessagesControllerTest.php
@@ -18,6 +18,7 @@ use function substr;
 /**
  * @covers \PhpMyAdmin\Controllers\JavaScriptMessagesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\JavaScriptMessagesController::class)]
 class JavaScriptMessagesControllerTest extends TestCase
 {
     public function testIndex(): void
diff --git a/test/classes/Controllers/NavigationControllerTest.php b/test/classes/Controllers/NavigationControllerTest.php
index d860b42..eaaed6d 100644
--- a/test/classes/Controllers/NavigationControllerTest.php
+++ b/test/classes/Controllers/NavigationControllerTest.php
@@ -12,6 +12,7 @@ use function sprintf;
 /**
  * @covers \PhpMyAdmin\Controllers\NavigationController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\NavigationController::class)]
 class NavigationControllerTest extends AbstractTestCase
 {
     public function testIndex(): void
diff --git a/test/classes/Controllers/NormalizationControllerTest.php b/test/classes/Controllers/NormalizationControllerTest.php
index 7471be1..8923b8d 100644
--- a/test/classes/Controllers/NormalizationControllerTest.php
+++ b/test/classes/Controllers/NormalizationControllerTest.php
@@ -12,6 +12,7 @@ use function json_encode;
 /**
  * @covers \PhpMyAdmin\Controllers\NormalizationController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\NormalizationController::class)]
 class NormalizationControllerTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/Controllers/Server/BinlogControllerTest.php b/test/classes/Controllers/Server/BinlogControllerTest.php
index 157ebf6..5b8fa41 100644
--- a/test/classes/Controllers/Server/BinlogControllerTest.php
+++ b/test/classes/Controllers/Server/BinlogControllerTest.php
@@ -14,6 +14,7 @@ use PhpMyAdmin\Utils\SessionCache;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\BinlogController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\BinlogController::class)]
 class BinlogControllerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Controllers/Server/CollationsControllerTest.php b/test/classes/Controllers/Server/CollationsControllerTest.php
index 2a3567b..dda73ce 100644
--- a/test/classes/Controllers/Server/CollationsControllerTest.php
+++ b/test/classes/Controllers/Server/CollationsControllerTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\CollationsController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\CollationsController::class)]
 class CollationsControllerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Controllers/Server/Databases/CreateControllerTest.php b/test/classes/Controllers/Server/Databases/CreateControllerTest.php
index 1772c88..043725c 100644
--- a/test/classes/Controllers/Server/Databases/CreateControllerTest.php
+++ b/test/classes/Controllers/Server/Databases/CreateControllerTest.php
@@ -15,6 +15,7 @@ use function sprintf;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Databases\CreateController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Databases\CreateController::class)]
 final class CreateControllerTest extends AbstractTestCase
 {
     public function testCreateDatabase(): void
diff --git a/test/classes/Controllers/Server/Databases/DestroyControllerTest.php b/test/classes/Controllers/Server/Databases/DestroyControllerTest.php
index 05a4025..92e56c4 100644
--- a/test/classes/Controllers/Server/Databases/DestroyControllerTest.php
+++ b/test/classes/Controllers/Server/Databases/DestroyControllerTest.php
@@ -18,6 +18,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Databases\DestroyController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Databases\DestroyController::class)]
 class DestroyControllerTest extends AbstractTestCase
 {
     public function testDropDatabases(): void
diff --git a/test/classes/Controllers/Server/DatabasesControllerTest.php b/test/classes/Controllers/Server/DatabasesControllerTest.php
index 1dd7849..c5b8b21 100644
--- a/test/classes/Controllers/Server/DatabasesControllerTest.php
+++ b/test/classes/Controllers/Server/DatabasesControllerTest.php
@@ -18,6 +18,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\DatabasesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\DatabasesController::class)]
 class DatabasesControllerTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/Controllers/Server/EnginesControllerTest.php b/test/classes/Controllers/Server/EnginesControllerTest.php
index a0ff021..e9ba1ac 100644
--- a/test/classes/Controllers/Server/EnginesControllerTest.php
+++ b/test/classes/Controllers/Server/EnginesControllerTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\EnginesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\EnginesController::class)]
 class EnginesControllerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Controllers/Server/PluginsControllerTest.php b/test/classes/Controllers/Server/PluginsControllerTest.php
index a0482e4..d7277fd 100644
--- a/test/classes/Controllers/Server/PluginsControllerTest.php
+++ b/test/classes/Controllers/Server/PluginsControllerTest.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\PluginsController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\PluginsController::class)]
 class PluginsControllerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Controllers/Server/Privileges/AccountLockControllerTest.php b/test/classes/Controllers/Server/Privileges/AccountLockControllerTest.php
index 7b04727..9eb86b1 100644
--- a/test/classes/Controllers/Server/Privileges/AccountLockControllerTest.php
+++ b/test/classes/Controllers/Server/Privileges/AccountLockControllerTest.php
@@ -17,6 +17,7 @@ use PHPUnit\Framework\MockObject\Stub;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Privileges\AccountLockController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Privileges\AccountLockController::class)]
 class AccountLockControllerTest extends AbstractTestCase
 {
     /** @var DatabaseInterface&Stub */
diff --git a/test/classes/Controllers/Server/Privileges/AccountUnlockControllerTest.php b/test/classes/Controllers/Server/Privileges/AccountUnlockControllerTest.php
index db006ea..b7252f1 100644
--- a/test/classes/Controllers/Server/Privileges/AccountUnlockControllerTest.php
+++ b/test/classes/Controllers/Server/Privileges/AccountUnlockControllerTest.php
@@ -17,6 +17,7 @@ use PHPUnit\Framework\MockObject\Stub;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Privileges\AccountUnlockController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Privileges\AccountUnlockController::class)]
 class AccountUnlockControllerTest extends AbstractTestCase
 {
     /** @var DatabaseInterface&Stub */
diff --git a/test/classes/Controllers/Server/PrivilegesControllerTest.php b/test/classes/Controllers/Server/PrivilegesControllerTest.php
index 540945e..f7c09bd 100644
--- a/test/classes/Controllers/Server/PrivilegesControllerTest.php
+++ b/test/classes/Controllers/Server/PrivilegesControllerTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 
 /** @covers \PhpMyAdmin\Controllers\Server\PrivilegesController */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\PrivilegesController::class)]
 final class PrivilegesControllerTest extends AbstractTestCase
 {
     public function testUpdatePrivilegesForMultipleDatabases(): void
diff --git a/test/classes/Controllers/Server/ShowEngineControllerTest.php b/test/classes/Controllers/Server/ShowEngineControllerTest.php
index df65484..af43bfa 100644
--- a/test/classes/Controllers/Server/ShowEngineControllerTest.php
+++ b/test/classes/Controllers/Server/ShowEngineControllerTest.php
@@ -18,6 +18,7 @@ use function htmlspecialchars;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\ShowEngineController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\ShowEngineController::class)]
 class ShowEngineControllerTest extends AbstractTestCase
 {
     public function testShowEngine(): void
diff --git a/test/classes/Controllers/Server/Status/AdvisorControllerTest.php b/test/classes/Controllers/Server/Status/AdvisorControllerTest.php
index 17a21a8..f0a4ec5 100644
--- a/test/classes/Controllers/Server/Status/AdvisorControllerTest.php
+++ b/test/classes/Controllers/Server/Status/AdvisorControllerTest.php
@@ -15,6 +15,7 @@ use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\AdvisorController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\AdvisorController::class)]
 class AdvisorControllerTest extends AbstractTestCase
 {
     /** @var ResponseRenderer */
diff --git a/test/classes/Controllers/Server/Status/Monitor/GeneralLogControllerTest.php b/test/classes/Controllers/Server/Status/Monitor/GeneralLogControllerTest.php
index 65662d1..4101a7f 100644
--- a/test/classes/Controllers/Server/Status/Monitor/GeneralLogControllerTest.php
+++ b/test/classes/Controllers/Server/Status/Monitor/GeneralLogControllerTest.php
@@ -14,6 +14,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\Monitor\GeneralLogController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\Monitor\GeneralLogController::class)]
 class GeneralLogControllerTest extends AbstractTestCase
 {
     /** @var Data */
diff --git a/test/classes/Controllers/Server/Status/Monitor/LogVarsControllerTest.php b/test/classes/Controllers/Server/Status/Monitor/LogVarsControllerTest.php
index c257318..c36abb4 100644
--- a/test/classes/Controllers/Server/Status/Monitor/LogVarsControllerTest.php
+++ b/test/classes/Controllers/Server/Status/Monitor/LogVarsControllerTest.php
@@ -14,6 +14,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\Monitor\LogVarsController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\Monitor\LogVarsController::class)]
 class LogVarsControllerTest extends AbstractTestCase
 {
     /** @var Data */
diff --git a/test/classes/Controllers/Server/Status/Monitor/QueryAnalyzerControllerTest.php b/test/classes/Controllers/Server/Status/Monitor/QueryAnalyzerControllerTest.php
index 22c3bd2..7e4066a 100644
--- a/test/classes/Controllers/Server/Status/Monitor/QueryAnalyzerControllerTest.php
+++ b/test/classes/Controllers/Server/Status/Monitor/QueryAnalyzerControllerTest.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Utils\SessionCache;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\Monitor\QueryAnalyzerController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\Monitor\QueryAnalyzerController::class)]
 class QueryAnalyzerControllerTest extends AbstractTestCase
 {
     /** @var Data */
diff --git a/test/classes/Controllers/Server/Status/Monitor/SlowLogControllerTest.php b/test/classes/Controllers/Server/Status/Monitor/SlowLogControllerTest.php
index 7fe3e78..b5bca1a 100644
--- a/test/classes/Controllers/Server/Status/Monitor/SlowLogControllerTest.php
+++ b/test/classes/Controllers/Server/Status/Monitor/SlowLogControllerTest.php
@@ -14,6 +14,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\Monitor\SlowLogController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\Monitor\SlowLogController::class)]
 class SlowLogControllerTest extends AbstractTestCase
 {
     /** @var Data */
diff --git a/test/classes/Controllers/Server/Status/MonitorControllerTest.php b/test/classes/Controllers/Server/Status/MonitorControllerTest.php
index 0fc90ea..405cc21 100644
--- a/test/classes/Controllers/Server/Status/MonitorControllerTest.php
+++ b/test/classes/Controllers/Server/Status/MonitorControllerTest.php
@@ -15,6 +15,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\MonitorController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\MonitorController::class)]
 class MonitorControllerTest extends AbstractTestCase
 {
     /** @var Data */
diff --git a/test/classes/Controllers/Server/Status/Processes/RefreshControllerTest.php b/test/classes/Controllers/Server/Status/Processes/RefreshControllerTest.php
index 10113ae..a2a71b1 100644
--- a/test/classes/Controllers/Server/Status/Processes/RefreshControllerTest.php
+++ b/test/classes/Controllers/Server/Status/Processes/RefreshControllerTest.php
@@ -18,6 +18,7 @@ use function htmlspecialchars;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\Processes\RefreshController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\Processes\RefreshController::class)]
 class RefreshControllerTest extends AbstractTestCase
 {
     /** @var Data */
diff --git a/test/classes/Controllers/Server/Status/ProcessesControllerTest.php b/test/classes/Controllers/Server/Status/ProcessesControllerTest.php
index 5d6143d..1c693dc 100644
--- a/test/classes/Controllers/Server/Status/ProcessesControllerTest.php
+++ b/test/classes/Controllers/Server/Status/ProcessesControllerTest.php
@@ -14,6 +14,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\ProcessesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\ProcessesController::class)]
 class ProcessesControllerTest extends AbstractTestCase
 {
     /** @var Data */
diff --git a/test/classes/Controllers/Server/Status/QueriesControllerTest.php b/test/classes/Controllers/Server/Status/QueriesControllerTest.php
index 36d37a2..655e24b 100644
--- a/test/classes/Controllers/Server/Status/QueriesControllerTest.php
+++ b/test/classes/Controllers/Server/Status/QueriesControllerTest.php
@@ -18,6 +18,7 @@ use function htmlspecialchars;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\QueriesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\QueriesController::class)]
 class QueriesControllerTest extends AbstractTestCase
 {
     /** @var Data */
diff --git a/test/classes/Controllers/Server/Status/StatusControllerTest.php b/test/classes/Controllers/Server/Status/StatusControllerTest.php
index a4b8878..99723eb 100644
--- a/test/classes/Controllers/Server/Status/StatusControllerTest.php
+++ b/test/classes/Controllers/Server/Status/StatusControllerTest.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\StatusController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\StatusController::class)]
 class StatusControllerTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/Controllers/Server/Status/VariablesControllerTest.php b/test/classes/Controllers/Server/Status/VariablesControllerTest.php
index 36d6040..6176a50 100644
--- a/test/classes/Controllers/Server/Status/VariablesControllerTest.php
+++ b/test/classes/Controllers/Server/Status/VariablesControllerTest.php
@@ -13,6 +13,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\Status\VariablesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\Status\VariablesController::class)]
 class VariablesControllerTest extends AbstractTestCase
 {
     /** @var Data */
diff --git a/test/classes/Controllers/Server/VariablesControllerTest.php b/test/classes/Controllers/Server/VariablesControllerTest.php
index 565ddd1..f995866 100644
--- a/test/classes/Controllers/Server/VariablesControllerTest.php
+++ b/test/classes/Controllers/Server/VariablesControllerTest.php
@@ -24,6 +24,7 @@ use function str_replace;
 /**
  * @covers \PhpMyAdmin\Controllers\Server\VariablesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Server\VariablesController::class)]
 class VariablesControllerTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/Controllers/Sql/EnumValuesControllerTest.php b/test/classes/Controllers/Sql/EnumValuesControllerTest.php
index fe38c7d..479ce0b 100644
--- a/test/classes/Controllers/Sql/EnumValuesControllerTest.php
+++ b/test/classes/Controllers/Sql/EnumValuesControllerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Controllers\Sql\EnumValuesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Sql\EnumValuesController::class)]
 class EnumValuesControllerTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/Controllers/Sql/SetValuesControllerTest.php b/test/classes/Controllers/Sql/SetValuesControllerTest.php
index 7f528e9..271abfa 100644
--- a/test/classes/Controllers/Sql/SetValuesControllerTest.php
+++ b/test/classes/Controllers/Sql/SetValuesControllerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Controllers\Sql\SetValuesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Sql\SetValuesController::class)]
 class SetValuesControllerTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/Controllers/Table/FindReplaceControllerTest.php b/test/classes/Controllers/Table/FindReplaceControllerTest.php
index b1de32d..075b2c0 100644
--- a/test/classes/Controllers/Table/FindReplaceControllerTest.php
+++ b/test/classes/Controllers/Table/FindReplaceControllerTest.php
@@ -14,6 +14,7 @@ use PhpMyAdmin\Types;
 /**
  * @covers \PhpMyAdmin\Controllers\Table\FindReplaceController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\FindReplaceController::class)]
 class FindReplaceControllerTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/Controllers/Table/IndexRenameControllerTest.php b/test/classes/Controllers/Table/IndexRenameControllerTest.php
index f2ec09a..d77ce1c 100644
--- a/test/classes/Controllers/Table/IndexRenameControllerTest.php
+++ b/test/classes/Controllers/Table/IndexRenameControllerTest.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
 use ReflectionProperty;
 
 /** @covers \PhpMyAdmin\Controllers\Table\IndexRenameController */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\IndexRenameController::class)]
 final class IndexRenameControllerTest extends AbstractTestCase
 {
     public function testPreviewSqlWithOldStatement(): void
diff --git a/test/classes/Controllers/Table/IndexesControllerTest.php b/test/classes/Controllers/Table/IndexesControllerTest.php
index 74cac49..20dcc97 100644
--- a/test/classes/Controllers/Table/IndexesControllerTest.php
+++ b/test/classes/Controllers/Table/IndexesControllerTest.php
@@ -24,6 +24,7 @@ use function sprintf;
 /**
  * @covers \PhpMyAdmin\Controllers\Table\IndexesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\IndexesController::class)]
 class IndexesControllerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Controllers/Table/OperationsControllerTest.php b/test/classes/Controllers/Table/OperationsControllerTest.php
index 4acc0ae..7c113f6 100644
--- a/test/classes/Controllers/Table/OperationsControllerTest.php
+++ b/test/classes/Controllers/Table/OperationsControllerTest.php
@@ -13,6 +13,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Controllers\Table\OperationsController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\OperationsController::class)]
 class OperationsControllerTest extends AbstractTestCase
 {
     public function testOperationsController(): void
diff --git a/test/classes/Controllers/Table/PrivilegesControllerTest.php b/test/classes/Controllers/Table/PrivilegesControllerTest.php
index 793d59d..3c763a7 100644
--- a/test/classes/Controllers/Table/PrivilegesControllerTest.php
+++ b/test/classes/Controllers/Table/PrivilegesControllerTest.php
@@ -17,6 +17,7 @@ use function _pgettext;
 /**
  * @covers \PhpMyAdmin\Controllers\Table\PrivilegesController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\PrivilegesController::class)]
 class PrivilegesControllerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Controllers/Table/RelationControllerTest.php b/test/classes/Controllers/Table/RelationControllerTest.php
index 99fe136..727c2fc 100644
--- a/test/classes/Controllers/Table/RelationControllerTest.php
+++ b/test/classes/Controllers/Table/RelationControllerTest.php
@@ -18,6 +18,7 @@ use stdClass;
 /**
  * @covers \PhpMyAdmin\Controllers\Table\RelationController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\RelationController::class)]
 class RelationControllerTest extends AbstractTestCase
 {
     /** @var ResponseStub */
diff --git a/test/classes/Controllers/Table/ReplaceControllerTest.php b/test/classes/Controllers/Table/ReplaceControllerTest.php
index 98a1824..4a11e7d 100644
--- a/test/classes/Controllers/Table/ReplaceControllerTest.php
+++ b/test/classes/Controllers/Table/ReplaceControllerTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Controllers\Table\ReplaceController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\ReplaceController::class)]
 class ReplaceControllerTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/Controllers/Table/SearchControllerTest.php b/test/classes/Controllers/Table/SearchControllerTest.php
index b270bb5..d806c1e 100644
--- a/test/classes/Controllers/Table/SearchControllerTest.php
+++ b/test/classes/Controllers/Table/SearchControllerTest.php
@@ -22,6 +22,7 @@ use const MYSQLI_TYPE_LONG;
 /**
  * @covers \PhpMyAdmin\Controllers\Table\SearchController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\SearchController::class)]
 class SearchControllerTest extends AbstractTestCase
 {
     /** @var ResponseStub */
diff --git a/test/classes/Controllers/Table/Structure/ChangeControllerTest.php b/test/classes/Controllers/Table/Structure/ChangeControllerTest.php
index 4d435a7..8b6d2d6 100644
--- a/test/classes/Controllers/Table/Structure/ChangeControllerTest.php
+++ b/test/classes/Controllers/Table/Structure/ChangeControllerTest.php
@@ -15,6 +15,7 @@ use ReflectionClass;
 /**
  * @covers \PhpMyAdmin\Controllers\Table\Structure\ChangeController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\Structure\ChangeController::class)]
 class ChangeControllerTest extends AbstractTestCase
 {
     public function testChangeController(): void
diff --git a/test/classes/Controllers/Table/Structure/MoveColumnsControllerTest.php b/test/classes/Controllers/Table/Structure/MoveColumnsControllerTest.php
index 4cab536..41bfed1 100644
--- a/test/classes/Controllers/Table/Structure/MoveColumnsControllerTest.php
+++ b/test/classes/Controllers/Table/Structure/MoveColumnsControllerTest.php
@@ -15,6 +15,7 @@ use function preg_replace;
 /**
  * @covers \PhpMyAdmin\Controllers\Table\Structure\MoveColumnsController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\Structure\MoveColumnsController::class)]
 class MoveColumnsControllerTest extends AbstractTestCase
 {
     /**
@@ -23,6 +24,7 @@ class MoveColumnsControllerTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGenerateAlterTableSql
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGenerateAlterTableSql')]
     public function testGenerateAlterTableSql(string $createStatement, array $columnNames, ?string $expected): void
     {
         $class = new ReflectionClass(MoveColumnsController::class);
diff --git a/test/classes/Controllers/Table/Structure/SaveControllerTest.php b/test/classes/Controllers/Table/Structure/SaveControllerTest.php
index 8d3752f..23faf3a 100644
--- a/test/classes/Controllers/Table/Structure/SaveControllerTest.php
+++ b/test/classes/Controllers/Table/Structure/SaveControllerTest.php
@@ -16,6 +16,7 @@ use ReflectionClass;
 /**
  * @covers \PhpMyAdmin\Controllers\Table\Structure\SaveController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Table\Structure\SaveController::class)]
 class SaveControllerTest extends AbstractTestCase
 {
     public function testSaveController(): void
diff --git a/test/classes/Controllers/Transformation/OverviewControllerTest.php b/test/classes/Controllers/Transformation/OverviewControllerTest.php
index 3431dbb..0ac9437 100644
--- a/test/classes/Controllers/Transformation/OverviewControllerTest.php
+++ b/test/classes/Controllers/Transformation/OverviewControllerTest.php
@@ -15,6 +15,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Controllers\Transformation\OverviewController
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Controllers\Transformation\OverviewController::class)]
 class OverviewControllerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/CoreTest.php b/test/classes/CoreTest.php
index 505f99a..ca0b608 100644
--- a/test/classes/CoreTest.php
+++ b/test/classes/CoreTest.php
@@ -27,6 +27,7 @@ use function str_repeat;
 /**
  * @covers \PhpMyAdmin\Core
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Core::class)]
 class CoreTest extends AbstractNetworkTestCase
 {
     /**
@@ -259,6 +260,7 @@ class CoreTest extends AbstractNetworkTestCase
      *
      * @dataProvider providerTestGotoNowhere
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerTestGotoNowhere')]
     public function testGotoNowhere(?string $page, array $allowList, bool $include, bool $expected): void
     {
         self::assertSame($expected, Core::checkPageValidity($page, $allowList, $include));
@@ -369,6 +371,8 @@ class CoreTest extends AbstractNetworkTestCase
      *
      * @dataProvider providerTestGetRealSize
      */
+    #[\PHPUnit\Framework\Attributes\Group('32bit-incompatible')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerTestGetRealSize')]
     public function testGetRealSize(string $size, int $expected): void
     {
         self::assertSame($expected, Core::getRealSize($size));
@@ -451,6 +455,7 @@ class CoreTest extends AbstractNetworkTestCase
      *
      * @dataProvider providerTestLinkURL
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerTestLinkURL')]
     public function testLinkURL(string $link, string $url): void
     {
         self::assertSame(Core::linkURL($link), $url);
@@ -566,6 +571,7 @@ class CoreTest extends AbstractNetworkTestCase
      *
      * @dataProvider provideTestIsAllowedDomain
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provideTestIsAllowedDomain')]
     public function testIsAllowedDomain(string $url, $expected): void
     {
         $_SERVER['SERVER_NAME'] = 'server.local';
@@ -623,6 +629,7 @@ class CoreTest extends AbstractNetworkTestCase
      *
      * @dataProvider provideTestSafeUnserialize
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provideTestSafeUnserialize')]
     public function testSafeUnserialize(string $data, $expected): void
     {
         self::assertSame($expected, Core::safeUnserialize($data));
@@ -692,6 +699,7 @@ class CoreTest extends AbstractNetworkTestCase
      *
      * @dataProvider provideTestSanitizeMySQLHost
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provideTestSanitizeMySQLHost')]
     public function testSanitizeMySQLHost(string $host, string $expected): void
     {
         self::assertSame($expected, Core::sanitizeMySQLHost($host));
@@ -898,6 +906,7 @@ class CoreTest extends AbstractNetworkTestCase
      *
      * @dataProvider providerForTestPopulateRequestWithEncryptedQueryParamsWithInvalidParam
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestPopulateRequestWithEncryptedQueryParamsWithInvalidParam')]
     public function testPopulateRequestWithEncryptedQueryParamsWithInvalidParam(
         array $encrypted,
         array $decrypted
@@ -942,6 +951,8 @@ class CoreTest extends AbstractNetworkTestCase
      * @requires extension xdebug
      * @group ext-xdebug
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('xdebug')]
+    #[\PHPUnit\Framework\Attributes\Group('ext-xdebug')]
     public function testDownloadHeader(): void
     {
         $GLOBALS['config']->set('PMA_USR_BROWSER_AGENT', 'FIREFOX');
@@ -969,6 +980,10 @@ class CoreTest extends AbstractNetworkTestCase
      * @requires extension xdebug
      * @group ext-xdebug
      */
+    #[\PHPUnit\Framework\Attributes\RunInSeparateProcess]
+    #[\PHPUnit\Framework\Attributes\PreserveGlobalState(false)]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('xdebug')]
+    #[\PHPUnit\Framework\Attributes\Group('ext-xdebug')]
     public function testDownloadHeader2(): void
     {
         $GLOBALS['config']->set('PMA_USR_BROWSER_AGENT', 'FIREFOX');
diff --git a/test/classes/CreateAddFieldTest.php b/test/classes/CreateAddFieldTest.php
index a4021ce..853a2ee 100644
--- a/test/classes/CreateAddFieldTest.php
+++ b/test/classes/CreateAddFieldTest.php
@@ -11,6 +11,7 @@ use function json_encode;
 /**
  * @covers \PhpMyAdmin\CreateAddField
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\CreateAddField::class)]
 class CreateAddFieldTest extends AbstractTestCase
 {
     /** @var CreateAddField */
@@ -33,6 +34,7 @@ class CreateAddFieldTest extends AbstractTestCase
      *
      * @dataProvider providerGetPartitionsDefinition
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetPartitionsDefinition')]
     public function testGetPartitionsDefinition(string $expected, array $request): void
     {
         $_POST = $request;
@@ -234,6 +236,7 @@ class CreateAddFieldTest extends AbstractTestCase
      *
      * @dataProvider providerGetTableCreationQuery
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetTableCreationQuery')]
     public function testGetTableCreationQuery(string $expected, string $db, string $table, array $request): void
     {
         $_POST = $request;
@@ -307,6 +310,7 @@ class CreateAddFieldTest extends AbstractTestCase
      *
      * @dataProvider providerGetNumberOfFieldsFromRequest
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetNumberOfFieldsFromRequest')]
     public function testGetNumberOfFieldsFromRequest(int $expected, array $request): void
     {
         $_POST = $request;
@@ -521,6 +525,7 @@ class CreateAddFieldTest extends AbstractTestCase
     /**
      * @dataProvider providerGetColumnCreationQueryRequest
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetColumnCreationQueryRequest')]
     public function testGetColumnCreationQuery(string $expected, array $request): void
     {
         $_POST = $request;
diff --git a/test/classes/Crypto/CryptoTest.php b/test/classes/Crypto/CryptoTest.php
index 3cc662d..e978c33 100644
--- a/test/classes/Crypto/CryptoTest.php
+++ b/test/classes/Crypto/CryptoTest.php
@@ -13,6 +13,7 @@ use function str_repeat;
 /**
  * @covers \PhpMyAdmin\Crypto\Crypto
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Crypto\Crypto::class)]
 class CryptoTest extends AbstractTestCase
 {
     public function testWithValidKeyFromConfig(): void
diff --git a/test/classes/Database/CentralColumnsTest.php b/test/classes/Database/CentralColumnsTest.php
index 98d8be0..7c55232 100644
--- a/test/classes/Database/CentralColumnsTest.php
+++ b/test/classes/Database/CentralColumnsTest.php
@@ -15,6 +15,7 @@ use function array_slice;
 /**
  * @covers \PhpMyAdmin\Database\CentralColumns
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\CentralColumns::class)]
 class CentralColumnsTest extends AbstractTestCase
 {
     /** @var CentralColumns */
diff --git a/test/classes/Database/Designer/CommonTest.php b/test/classes/Database/Designer/CommonTest.php
index c0226ca..fc7864c 100644
--- a/test/classes/Database/Designer/CommonTest.php
+++ b/test/classes/Database/Designer/CommonTest.php
@@ -17,6 +17,7 @@ use function sprintf;
 /**
  * @covers \PhpMyAdmin\Database\Designer\Common
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\Designer\Common::class)]
 class CommonTest extends AbstractTestCase
 {
     /** @var Common */
diff --git a/test/classes/Database/DesignerTest.php b/test/classes/Database/DesignerTest.php
index 54f2d91..1586598 100644
--- a/test/classes/Database/DesignerTest.php
+++ b/test/classes/Database/DesignerTest.php
@@ -16,6 +16,7 @@ use ReflectionMethod;
 /**
  * @covers \PhpMyAdmin\Database\Designer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\Designer::class)]
 class DesignerTest extends AbstractTestCase
 {
     /** @var Designer */
diff --git a/test/classes/Database/EventsTest.php b/test/classes/Database/EventsTest.php
index c035e04..0780042 100644
--- a/test/classes/Database/EventsTest.php
+++ b/test/classes/Database/EventsTest.php
@@ -13,6 +13,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Database\Events
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\Events::class)]
 class EventsTest extends AbstractTestCase
 {
     /** @var Events */
@@ -49,6 +50,7 @@ class EventsTest extends AbstractTestCase
      *
      * @dataProvider providerGetDataFromRequest
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetDataFromRequest')]
     public function testGetDataFromRequestEmpty(array $in, array $out): void
     {
         unset($_POST);
@@ -148,6 +150,7 @@ class EventsTest extends AbstractTestCase
      *
      * @dataProvider providerGetEditorFormAdd
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEditorFormAdd')]
     public function testGetEditorFormAdd(array $data, string $matcher): void
     {
         ResponseRenderer::getInstance()->setAjax(false);
@@ -200,6 +203,7 @@ class EventsTest extends AbstractTestCase
      *
      * @dataProvider providerGetEditorFormEdit
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEditorFormEdit')]
     public function testGetEditorFormEdit(array $data, string $matcher): void
     {
         ResponseRenderer::getInstance()->setAjax(false);
@@ -252,6 +256,7 @@ class EventsTest extends AbstractTestCase
      *
      * @dataProvider providerGetEditorFormAjax
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEditorFormAjax')]
     public function testGetEditorFormAjax(array $data, string $matcher): void
     {
         ResponseRenderer::getInstance()->setAjax(true);
@@ -299,6 +304,7 @@ class EventsTest extends AbstractTestCase
      *
      * @dataProvider providerGetQueryFromRequest
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetQueryFromRequest')]
     public function testGetQueryFromRequest(array $request, string $query, int $num_err): void
     {
         global $errors;
diff --git a/test/classes/Database/QbeTest.php b/test/classes/Database/QbeTest.php
index 24ac6b9..ff394c0 100644
--- a/test/classes/Database/QbeTest.php
+++ b/test/classes/Database/QbeTest.php
@@ -13,6 +13,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Database\Qbe
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\Qbe::class)]
 class QbeTest extends AbstractTestCase
 {
     /** @var Qbe */
diff --git a/test/classes/Database/RoutinesTest.php b/test/classes/Database/RoutinesTest.php
index faea536..1fa18a6 100644
--- a/test/classes/Database/RoutinesTest.php
+++ b/test/classes/Database/RoutinesTest.php
@@ -14,6 +14,7 @@ use PhpMyAdmin\Types;
 /**
  * @covers \PhpMyAdmin\Database\Routines
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\Routines::class)]
 class RoutinesTest extends AbstractTestCase
 {
     /** @var Routines */
@@ -53,6 +54,7 @@ class RoutinesTest extends AbstractTestCase
      *
      * @dataProvider providerGetDataFromRequest
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetDataFromRequest')]
     public function testGetDataFromRequest(array $in, array $out): void
     {
         unset($_POST);
@@ -315,6 +317,8 @@ class RoutinesTest extends AbstractTestCase
      * @depends testGetParameterRowEmpty
      * @dataProvider providerGetParameterRow
      */
+    #[\PHPUnit\Framework\Attributes\Depends('testGetParameterRowEmpty')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetParameterRow')]
     public function testGetParameterRow(array $data, int $index, string $matcher): void
     {
         self::assertStringContainsString($matcher, $this->routines->getParameterRow($data, $index));
@@ -390,6 +394,8 @@ class RoutinesTest extends AbstractTestCase
      * @depends testGetParameterRow
      * @dataProvider providerGetParameterRowAjax
      */
+    #[\PHPUnit\Framework\Attributes\Depends('testGetParameterRow')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetParameterRowAjax')]
     public function testGetParameterRowAjax(array $data, string $matcher): void
     {
         ResponseRenderer::getInstance()->setAjax(true);
@@ -462,6 +468,8 @@ class RoutinesTest extends AbstractTestCase
      * @depends testGetParameterRowAjax
      * @dataProvider providerGetEditorForm1
      */
+    #[\PHPUnit\Framework\Attributes\Depends('testGetParameterRowAjax')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEditorForm1')]
     public function testGetEditorForm1(array $data, string $matcher): void
     {
         self::assertStringContainsString($matcher, $this->routines->getEditorForm('add', '', $data));
@@ -576,6 +584,8 @@ class RoutinesTest extends AbstractTestCase
      * @depends testGetParameterRowAjax
      * @dataProvider providerGetEditorForm2
      */
+    #[\PHPUnit\Framework\Attributes\Depends('testGetParameterRowAjax')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEditorForm2')]
     public function testGetEditorForm2(array $data, string $matcher): void
     {
         self::assertStringContainsString($matcher, $this->routines->getEditorForm('edit', 'change', $data));
@@ -690,6 +700,8 @@ class RoutinesTest extends AbstractTestCase
      * @depends testGetParameterRowAjax
      * @dataProvider providerGetEditorForm3
      */
+    #[\PHPUnit\Framework\Attributes\Depends('testGetParameterRowAjax')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEditorForm3')]
     public function testGetEditorForm3(array $data, string $matcher): void
     {
         ResponseRenderer::getInstance()->setAjax(true);
@@ -802,6 +814,8 @@ class RoutinesTest extends AbstractTestCase
      * @depends testGetParameterRowAjax
      * @dataProvider providerGetEditorForm4
      */
+    #[\PHPUnit\Framework\Attributes\Depends('testGetParameterRowAjax')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEditorForm4')]
     public function testGetEditorForm4(array $data, string $matcher): void
     {
         self::assertStringContainsString($matcher, $this->routines->getEditorForm('edit', 'change', $data));
@@ -855,6 +869,7 @@ class RoutinesTest extends AbstractTestCase
      *
      * @dataProvider providerGetExecuteForm1
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetExecuteForm1')]
     public function testGetExecuteForm1(array $data, string $matcher): void
     {
         $GLOBALS['cfg']['ShowFunctionFields'] = true;
@@ -995,6 +1010,7 @@ class RoutinesTest extends AbstractTestCase
      *
      * @dataProvider providerGetExecuteForm2
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetExecuteForm2')]
     public function testGetExecuteForm2(array $data, string $matcher): void
     {
         ResponseRenderer::getInstance()->setAjax(true);
@@ -1113,6 +1129,7 @@ class RoutinesTest extends AbstractTestCase
      *
      * @dataProvider providerGetQueryFromRequest
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetQueryFromRequest')]
     public function testGetQueryFromRequest(array $request, string $query, int $num_err): void
     {
         global $errors, $cfg;
diff --git a/test/classes/Database/SearchTest.php b/test/classes/Database/SearchTest.php
index 4a8227a..6235d01 100644
--- a/test/classes/Database/SearchTest.php
+++ b/test/classes/Database/SearchTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Database\Search
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\Search::class)]
 class SearchTest extends AbstractTestCase
 {
     /** @var Search */
@@ -68,6 +69,7 @@ class SearchTest extends AbstractTestCase
      *
      * @dataProvider searchTypes
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('searchTypes')]
     public function testGetWhereClause(string $type, string $expected): void
     {
         $_POST['criteriaSearchType'] = $type;
diff --git a/test/classes/Database/TriggersTest.php b/test/classes/Database/TriggersTest.php
index e101f14..f288105 100644
--- a/test/classes/Database/TriggersTest.php
+++ b/test/classes/Database/TriggersTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Database\Triggers
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Database\Triggers::class)]
 class TriggersTest extends AbstractTestCase
 {
     /** @var Triggers */
@@ -47,6 +48,7 @@ class TriggersTest extends AbstractTestCase
      *
      * @dataProvider providerGetDataFromRequestEmpty
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetDataFromRequestEmpty')]
     public function testGetDataFromRequestEmpty(array $in, array $out): void
     {
         unset($_POST);
@@ -120,6 +122,8 @@ class TriggersTest extends AbstractTestCase
      * @dataProvider providerGetEditorFormAdd
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEditorFormAdd')]
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetEditorFormAdd(array $data, string $matcher): void
     {
         $GLOBALS['server'] = 1;
@@ -163,6 +167,8 @@ class TriggersTest extends AbstractTestCase
      * @dataProvider providerGetEditorFormEdit
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEditorFormEdit')]
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetEditorFormEdit(array $data, string $matcher): void
     {
         $GLOBALS['server'] = 1;
@@ -205,6 +211,7 @@ class TriggersTest extends AbstractTestCase
      *
      * @dataProvider providerGetEditorFormAjax
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEditorFormAjax')]
     public function testGetEditorFormAjax(array $data, string $matcher): void
     {
         $GLOBALS['server'] = 1;
@@ -250,6 +257,7 @@ class TriggersTest extends AbstractTestCase
      *
      * @dataProvider providerGetQueryFromRequest
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetQueryFromRequest')]
     public function testGetQueryFromRequest(
         string $definer,
         string $name,
diff --git a/test/classes/DatabaseInterfaceTest.php b/test/classes/DatabaseInterfaceTest.php
index 8d2722c..d049c62 100644
--- a/test/classes/DatabaseInterfaceTest.php
+++ b/test/classes/DatabaseInterfaceTest.php
@@ -19,6 +19,7 @@ use function array_keys;
 /**
  * @covers \PhpMyAdmin\DatabaseInterface
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\DatabaseInterface::class)]
 class DatabaseInterfaceTest extends AbstractTestCase
 {
     /**
@@ -53,6 +54,7 @@ class DatabaseInterfaceTest extends AbstractTestCase
      *
      * @dataProvider currentUserData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('currentUserData')]
     public function testGetCurrentUser($value, string $string, array $expected, bool $needsSecondCall): void
     {
         SessionCache::remove('mysql_cur_user');
@@ -116,6 +118,7 @@ class DatabaseInterfaceTest extends AbstractTestCase
      *
      * @dataProvider currentRolesData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('currentRolesData')]
     public function testGetCurrentRoles(
         string $version,
         bool $isRoleSupported,
@@ -305,6 +308,7 @@ class DatabaseInterfaceTest extends AbstractTestCase
      *
      * @dataProvider provideDatabaseVersionData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provideDatabaseVersionData')]
     public function testPostConnectShouldSetVersion(
         array $version,
         int $versionInt,
@@ -371,6 +375,7 @@ class DatabaseInterfaceTest extends AbstractTestCase
      *
      * @dataProvider errorData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('errorData')]
     public function testFormatError(int $error_number, string $error_message, string $match): void
     {
         self::assertStringContainsString($match, Utilities::formatError($error_number, $error_message));
@@ -420,6 +425,7 @@ class DatabaseInterfaceTest extends AbstractTestCase
      *
      * @dataProvider isAmazonRdsData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('isAmazonRdsData')]
     public function testIsAmazonRdsData(array $value, bool $expected): void
     {
         SessionCache::remove('is_amazon_rds');
@@ -468,6 +474,7 @@ class DatabaseInterfaceTest extends AbstractTestCase
      *
      * @dataProvider versionData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('versionData')]
     public function testVersion(string $version, int $expected, int $major, bool $upgrade): void
     {
         $ver_int = Utilities::versionToInt($version);
@@ -878,6 +885,7 @@ class DatabaseInterfaceTest extends AbstractTestCase
      *
      * @dataProvider provideDatabaseVersionData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provideDatabaseVersionData')]
     public function testSetVersion(
         array $version,
         int $versionInt,
diff --git a/test/classes/Dbal/DatabaseNameTest.php b/test/classes/Dbal/DatabaseNameTest.php
index 367c013..11c9bb8 100644
--- a/test/classes/Dbal/DatabaseNameTest.php
+++ b/test/classes/Dbal/DatabaseNameTest.php
@@ -13,6 +13,7 @@ use function str_repeat;
 /**
  * @covers \PhpMyAdmin\Dbal\DatabaseName
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Dbal\DatabaseName::class)]
 class DatabaseNameTest extends TestCase
 {
     public function testEmptyName(): void
@@ -51,6 +52,7 @@ class DatabaseNameTest extends TestCase
      *
      * @dataProvider providerForTestInvalidMixedNames
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestInvalidMixedNames')]
     public function testInvalidMixedNames($name, string $exceptionMessage): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/test/classes/Dbal/DbiDummyTest.php b/test/classes/Dbal/DbiDummyTest.php
index 85e3b69..46624ea 100644
--- a/test/classes/Dbal/DbiDummyTest.php
+++ b/test/classes/Dbal/DbiDummyTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Tests\Stubs\DummyResult;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class DbiDummyTest extends AbstractTestCase
 {
     /**
@@ -61,6 +62,7 @@ class DbiDummyTest extends AbstractTestCase
      *
      * @dataProvider schemaData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('schemaData')]
     public function testSystemSchema(string $schema, bool $expected): void
     {
         self::assertSame($expected, Utilities::isSystemSchema($schema));
@@ -92,6 +94,7 @@ class DbiDummyTest extends AbstractTestCase
      *
      * @dataProvider errorData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('errorData')]
     public function testFormatError(int $number, string $message, string $expected): void
     {
         $GLOBALS['server'] = 1;
diff --git a/test/classes/Dbal/DbiMysqliTest.php b/test/classes/Dbal/DbiMysqliTest.php
index 5640189..2ab8ee5 100644
--- a/test/classes/Dbal/DbiMysqliTest.php
+++ b/test/classes/Dbal/DbiMysqliTest.php
@@ -13,6 +13,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Dbal\DbiMysqli
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Dbal\DbiMysqli::class)]
 class DbiMysqliTest extends AbstractTestCase
 {
     /** @var DbiMysqli */
diff --git a/test/classes/Dbal/MysqliResultTest.php b/test/classes/Dbal/MysqliResultTest.php
index d594553..1ac532d 100644
--- a/test/classes/Dbal/MysqliResultTest.php
+++ b/test/classes/Dbal/MysqliResultTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Dbal\DbiMysqli
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Dbal\DbiMysqli::class)]
 class MysqliResultTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Dbal/TableNameTest.php b/test/classes/Dbal/TableNameTest.php
index 569832f..e7829ae 100644
--- a/test/classes/Dbal/TableNameTest.php
+++ b/test/classes/Dbal/TableNameTest.php
@@ -13,6 +13,7 @@ use function str_repeat;
 /**
  * @covers \PhpMyAdmin\Dbal\TableName
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Dbal\TableName::class)]
 class TableNameTest extends TestCase
 {
     public function testEmptyName(): void
@@ -51,6 +52,7 @@ class TableNameTest extends TestCase
      *
      * @dataProvider providerForTestInvalidMixedNames
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestInvalidMixedNames')]
     public function testInvalidMixedNames($name, string $exceptionMessage): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/test/classes/Dbal/WarningTest.php b/test/classes/Dbal/WarningTest.php
index 0955b5c..1b719b4 100644
--- a/test/classes/Dbal/WarningTest.php
+++ b/test/classes/Dbal/WarningTest.php
@@ -10,6 +10,7 @@ use PHPUnit\Framework\TestCase;
 /**
  * @covers \PhpMyAdmin\Dbal\Warning
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Dbal\Warning::class)]
 class WarningTest extends TestCase
 {
     /**
@@ -17,6 +18,7 @@ class WarningTest extends TestCase
      *
      * @dataProvider providerForTestWarning
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestWarning')]
     public function testWarning(array $row, string $level, int $code, string $message, string $toString): void
     {
         $warning = Warning::fromArray($row);
diff --git a/test/classes/Display/ResultsTest.php b/test/classes/Display/ResultsTest.php
index 46623a4..89c829c 100644
--- a/test/classes/Display/ResultsTest.php
+++ b/test/classes/Display/ResultsTest.php
@@ -42,6 +42,7 @@ use const MYSQLI_TYPE_TIMESTAMP;
 /**
  * @covers \PhpMyAdmin\Display\Results
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Display\Results::class)]
 class ResultsTest extends AbstractTestCase
 {
     /** @var DisplayResults */
@@ -105,6 +106,7 @@ class ResultsTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGetTableNavigationButton
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetTableNavigationButton')]
     public function testGetTableNavigationButton(
         string $caption,
         string $title,
@@ -264,6 +266,7 @@ class ResultsTest extends AbstractTestCase
      *
      * @dataProvider dataProviderForTestGetSpecialLinkUrl
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderForTestGetSpecialLinkUrl')]
     public function testGetSpecialLinkUrl(
         string $db,
         string $table,
@@ -379,6 +382,7 @@ class ResultsTest extends AbstractTestCase
      *
      * @dataProvider dataProviderForTestGetRowInfoForSpecialLinks
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderForTestGetRowInfoForSpecialLinks')]
     public function testGetRowInfoForSpecialLinks(
         array $fields_meta,
         int $fields_count,
@@ -429,6 +433,7 @@ class ResultsTest extends AbstractTestCase
      *
      * @dataProvider dataProviderForTestSetHighlightedColumnGlobalField
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderForTestSetHighlightedColumnGlobalField')]
     public function testSetHighlightedColumnGlobalField(array $analyzed_sql, array $output): void
     {
         $this->callFunction(
@@ -502,6 +507,7 @@ class ResultsTest extends AbstractTestCase
      *
      * @dataProvider dataProviderForTestGetPartialText
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderForTestGetPartialText')]
     public function testGetPartialText(string $pftext, int $limitChars, string $str, array $output): void
     {
         $_SESSION['tmpval']['pftext'] = $pftext;
@@ -616,6 +622,7 @@ class ResultsTest extends AbstractTestCase
      *
      * @dataProvider dataProviderForTestHandleNonPrintableContents
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderForTestHandleNonPrintableContents')]
     public function testHandleNonPrintableContents(
         bool $display_binary,
         bool $display_blob,
@@ -808,6 +815,7 @@ class ResultsTest extends AbstractTestCase
      *
      * @dataProvider dataProviderForTestGetDataCellForNonNumericColumns
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderForTestGetDataCellForNonNumericColumns')]
     public function testGetDataCellForNonNumericColumns(
         string $protectBinary,
         ?string $column,
@@ -1011,6 +1019,7 @@ class ResultsTest extends AbstractTestCase
     /**
      * @dataProvider dataProviderGetSortOrderHiddenInputs
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderGetSortOrderHiddenInputs')]
     public function testGetSortOrderHiddenInputs(
         string $sqlAdd,
         string $sqlRemove,
@@ -1123,6 +1132,7 @@ class ResultsTest extends AbstractTestCase
     /**
      * @dataProvider providerSetConfigParamsForDisplayTable
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerSetConfigParamsForDisplayTable')]
     public function testSetConfigParamsForDisplayTable(
         array $session,
         array $get,
@@ -1721,6 +1731,7 @@ class ResultsTest extends AbstractTestCase
     /**
      * @dataProvider dataProviderSortOrder
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderSortOrder')]
     public function testGetSingleAndMultiSortUrls(
         string $orderSetting,
         string $querySortDirection,
diff --git a/test/classes/EncodingTest.php b/test/classes/EncodingTest.php
index fae3327..7bf279c 100644
--- a/test/classes/EncodingTest.php
+++ b/test/classes/EncodingTest.php
@@ -21,6 +21,7 @@ use const PHP_INT_SIZE;
 /**
  * @covers \PhpMyAdmin\Encoding
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Encoding::class)]
 class EncodingTest extends AbstractTestCase
 {
     protected function setUp(): void
@@ -40,6 +41,7 @@ class EncodingTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testNoConversion(): void
     {
         self::assertSame('test', Encoding::convertString('UTF-8', 'UTF-8', 'test'));
@@ -55,6 +57,7 @@ class EncodingTest extends AbstractTestCase
     /**
      * @requires extension recode
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('recode')]
     public function testRecode(): void
     {
         Encoding::setEngine(Encoding::ENGINE_RECODE);
@@ -73,6 +76,8 @@ class EncodingTest extends AbstractTestCase
      * @group extension-iconv
      * @requires extension iconv
      */
+    #[\PHPUnit\Framework\Attributes\Group('extension-iconv')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('iconv')]
     public function testIconv(): void
     {
         // Set PHP native locale
diff --git a/test/classes/Engines/BdbTest.php b/test/classes/Engines/BdbTest.php
index ed854ea..dd4d683 100644
--- a/test/classes/Engines/BdbTest.php
+++ b/test/classes/Engines/BdbTest.php
@@ -12,6 +12,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Engines\Bdb
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Engines\Bdb::class)]
 class BdbTest extends AbstractTestCase
 {
     /** @var Bdb */
diff --git a/test/classes/Engines/BinlogTest.php b/test/classes/Engines/BinlogTest.php
index dc1c7b5..d1b7650 100644
--- a/test/classes/Engines/BinlogTest.php
+++ b/test/classes/Engines/BinlogTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Engines\Binlog
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Engines\Binlog::class)]
 class BinlogTest extends AbstractTestCase
 {
     /** @var Binlog */
diff --git a/test/classes/Engines/InnodbTest.php b/test/classes/Engines/InnodbTest.php
index 51f2415..33c227e 100644
--- a/test/classes/Engines/InnodbTest.php
+++ b/test/classes/Engines/InnodbTest.php
@@ -12,6 +12,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Engines\Innodb
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Engines\Innodb::class)]
 class InnodbTest extends AbstractTestCase
 {
     /** @var Innodb */
diff --git a/test/classes/Engines/MemoryTest.php b/test/classes/Engines/MemoryTest.php
index 2cd4315..8709f84 100644
--- a/test/classes/Engines/MemoryTest.php
+++ b/test/classes/Engines/MemoryTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Engines\Memory
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Engines\Memory::class)]
 class MemoryTest extends AbstractTestCase
 {
     /** @var Memory */
diff --git a/test/classes/Engines/MrgMyisamTest.php b/test/classes/Engines/MrgMyisamTest.php
index 100fe17..e67cfaf 100644
--- a/test/classes/Engines/MrgMyisamTest.php
+++ b/test/classes/Engines/MrgMyisamTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Engines\MrgMyisam
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Engines\MrgMyisam::class)]
 class MrgMyisamTest extends AbstractTestCase
 {
     /** @var MrgMyisam */
diff --git a/test/classes/Engines/MyisamTest.php b/test/classes/Engines/MyisamTest.php
index a90f5f8..9137887 100644
--- a/test/classes/Engines/MyisamTest.php
+++ b/test/classes/Engines/MyisamTest.php
@@ -12,6 +12,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Engines\Myisam
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Engines\Myisam::class)]
 class MyisamTest extends AbstractTestCase
 {
     /** @var Myisam */
diff --git a/test/classes/Engines/NdbclusterTest.php b/test/classes/Engines/NdbclusterTest.php
index f727610..dcf6267 100644
--- a/test/classes/Engines/NdbclusterTest.php
+++ b/test/classes/Engines/NdbclusterTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Engines\Ndbcluster
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Engines\Ndbcluster::class)]
 class NdbclusterTest extends AbstractTestCase
 {
     /** @var Ndbcluster */
diff --git a/test/classes/Engines/PbxtTest.php b/test/classes/Engines/PbxtTest.php
index c7fa397..9cbdf50 100644
--- a/test/classes/Engines/PbxtTest.php
+++ b/test/classes/Engines/PbxtTest.php
@@ -14,6 +14,7 @@ use function sprintf;
 /**
  * @covers \PhpMyAdmin\Engines\Pbxt
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Engines\Pbxt::class)]
 class PbxtTest extends AbstractTestCase
 {
     /** @var Pbxt */
@@ -163,6 +164,7 @@ class PbxtTest extends AbstractTestCase
      *
      * @dataProvider providerFortTestResolveTypeSize
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerFortTestResolveTypeSize')]
     public function testResolveTypeSize(string $formatted_size, array $output): void
     {
         self::assertSame($this->object->resolveTypeSize($formatted_size), $output);
diff --git a/test/classes/Engines/PerformanceSchemaTest.php b/test/classes/Engines/PerformanceSchemaTest.php
index b490d1d..ed078c7 100644
--- a/test/classes/Engines/PerformanceSchemaTest.php
+++ b/test/classes/Engines/PerformanceSchemaTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Engines\PerformanceSchema
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Engines\PerformanceSchema::class)]
 class PerformanceSchemaTest extends AbstractTestCase
 {
     /** @var PerformanceSchema */
diff --git a/test/classes/EnvironmentTest.php b/test/classes/EnvironmentTest.php
index 2f3df3d..30e0c29 100644
--- a/test/classes/EnvironmentTest.php
+++ b/test/classes/EnvironmentTest.php
@@ -11,6 +11,7 @@ use const PHP_VERSION;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class EnvironmentTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/ErrorHandlerTest.php b/test/classes/ErrorHandlerTest.php
index 3163d05..b05f41b 100644
--- a/test/classes/ErrorHandlerTest.php
+++ b/test/classes/ErrorHandlerTest.php
@@ -29,6 +29,7 @@ use const E_WARNING;
 /**
  * @covers \PhpMyAdmin\ErrorHandler
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ErrorHandler::class)]
 class ErrorHandlerTest extends AbstractTestCase
 {
     /** @var ErrorHandler */
@@ -99,6 +100,7 @@ class ErrorHandlerTest extends AbstractTestCase
      *
      * @dataProvider providerForTestHandleError
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestHandleError')]
     public function testGetDispErrorsForDisplayFalse(
         int $errno,
         string $errstr,
@@ -137,6 +139,7 @@ class ErrorHandlerTest extends AbstractTestCase
      * @dataProvider providerForTestHandleError
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetDispErrorsForDisplayTrue(
         int $errno,
         string $errstr,
@@ -170,6 +173,7 @@ class ErrorHandlerTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testCountErrors(): void
     {
         $this->object->addError('Compile Error', E_WARNING, 'error.txt', 15);
@@ -177,6 +181,7 @@ class ErrorHandlerTest extends AbstractTestCase
     }
 
     /** @dataProvider addErrorProvider */
+    #[\PHPUnit\Framework\Attributes\DataProvider('addErrorProvider')]
     public function testAddError(int $errorNumber, string $expected): void
     {
         $errorHandler = new ErrorHandler();
@@ -208,6 +213,7 @@ class ErrorHandlerTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSliceErrors(): void
     {
         $this->object->addError('Compile Error', E_WARNING, 'error.txt', 15);
@@ -224,6 +230,7 @@ class ErrorHandlerTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSliceErrorsOtherExample(): void
     {
         for ($i = 0; $i < 10; $i++) {
diff --git a/test/classes/ErrorReportTest.php b/test/classes/ErrorReportTest.php
index b6cd9d2..76a5499 100644
--- a/test/classes/ErrorReportTest.php
+++ b/test/classes/ErrorReportTest.php
@@ -22,6 +22,7 @@ use const JSON_UNESCAPED_SLASHES;
 /**
  * @covers \PhpMyAdmin\ErrorReport
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ErrorReport::class)]
 class ErrorReportTest extends AbstractTestCase
 {
     /** @var ErrorReport $errorReport */
@@ -346,6 +347,7 @@ class ErrorReportTest extends AbstractTestCase
      *
      * @dataProvider urlsToSanitize
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('urlsToSanitize')]
     public function testSanitizeUrl(string $url, array $result): void
     {
         // $this->errorReport->sanitizeUrl
diff --git a/test/classes/ErrorTest.php b/test/classes/ErrorTest.php
index ac0e740..4f573c8 100644
--- a/test/classes/ErrorTest.php
+++ b/test/classes/ErrorTest.php
@@ -28,6 +28,7 @@ use const E_WARNING;
 /**
  * @covers \PhpMyAdmin\Error
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Error::class)]
 class ErrorTest extends AbstractTestCase
 {
     /** @var Error */
@@ -88,6 +89,7 @@ class ErrorTest extends AbstractTestCase
      *
      * @dataProvider filePathProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('filePathProvider')]
     public function testSetFile(string $file, string $expected): void
     {
         $this->object->setFile($file);
@@ -130,6 +132,7 @@ class ErrorTest extends AbstractTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetBacktraceDisplay(): void
     {
         // phpunit >= 10
@@ -159,6 +162,7 @@ class ErrorTest extends AbstractTestCase
     }
 
     /** @dataProvider errorLevelProvider */
+    #[\PHPUnit\Framework\Attributes\DataProvider('errorLevelProvider')]
     public function testGetLevel(int $errorNumber, string $expected): void
     {
         self::assertSame($expected, (new Error($errorNumber, 'Error', 'error.txt', 15))->getLevel());
@@ -186,6 +190,7 @@ class ErrorTest extends AbstractTestCase
     }
 
     /** @dataProvider errorTypeProvider */
+    #[\PHPUnit\Framework\Attributes\DataProvider('errorTypeProvider')]
     public function testGetType(int $errorNumber, string $expected): void
     {
         self::assertSame($expected, (new Error($errorNumber, 'Error', 'error.txt', 15))->getType());
diff --git a/test/classes/Export/OptionsTest.php b/test/classes/Export/OptionsTest.php
index cd393cc..b29100e 100644
--- a/test/classes/Export/OptionsTest.php
+++ b/test/classes/Export/OptionsTest.php
@@ -17,6 +17,7 @@ use PhpMyAdmin\Util;
 /**
  * @covers \PhpMyAdmin\Export\Options
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Export\Options::class)]
 class OptionsTest extends AbstractTestCase
 {
     /** @var Options */
diff --git a/test/classes/ExportTest.php b/test/classes/ExportTest.php
index cb25eb9..143c715 100644
--- a/test/classes/ExportTest.php
+++ b/test/classes/ExportTest.php
@@ -11,6 +11,8 @@ use PhpMyAdmin\Plugins\Export\ExportPhparray;
  * @covers \PhpMyAdmin\Export
  * @group large
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Export::class)]
+#[\PHPUnit\Framework\Attributes\Large]
 class ExportTest extends AbstractTestCase
 {
     /** @var Export */
diff --git a/test/classes/FieldMetadataTest.php b/test/classes/FieldMetadataTest.php
index 8d90de7..6df0ae1 100644
--- a/test/classes/FieldMetadataTest.php
+++ b/test/classes/FieldMetadataTest.php
@@ -16,6 +16,7 @@ use const MYSQLI_TYPE_STRING;
 /**
  * @covers \PhpMyAdmin\FieldMetadata
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\FieldMetadata::class)]
 class FieldMetadataTest extends AbstractTestCase
 {
     public function testEmptyConstruct(): void
diff --git a/test/classes/FileListingTest.php b/test/classes/FileListingTest.php
index 9e0156d..907bf8b 100644
--- a/test/classes/FileListingTest.php
+++ b/test/classes/FileListingTest.php
@@ -15,6 +15,7 @@ use const TEST_PATH;
 /**
  * @covers \PhpMyAdmin\FileListing
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\FileListing::class)]
 class FileListingTest extends AbstractTestCase
 {
     /** @var FileListing $fileListing */
@@ -83,8 +84,9 @@ class FileListingTest extends AbstractTestCase
     }
 
     /**
-     * @requires extension bz2 1
+     * @requires extension bz2
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('bz2')]
     public function testSupportedDecompressionsFull(): void
     {
         $GLOBALS['cfg']['ZipDump'] = true;
diff --git a/test/classes/FileTest.php b/test/classes/FileTest.php
index 61b1369..a959ffe 100644
--- a/test/classes/FileTest.php
+++ b/test/classes/FileTest.php
@@ -12,6 +12,7 @@ use function file_get_contents;
 /**
  * @covers \PhpMyAdmin\File
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\File::class)]
 class FileTest extends AbstractTestCase
 {
     /**
@@ -31,6 +32,7 @@ class FileTest extends AbstractTestCase
      *
      * @dataProvider compressedFiles
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('compressedFiles')]
     public function testMIME(string $file, string $mime): void
     {
         $arr = new File($file);
@@ -44,6 +46,7 @@ class FileTest extends AbstractTestCase
      *
      * @dataProvider compressedFiles
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('compressedFiles')]
     public function testBinaryContent(string $file): void
     {
         $data = '0x' . bin2hex((string) file_get_contents($file));
@@ -57,9 +60,12 @@ class FileTest extends AbstractTestCase
      * @param string $file file string
      *
      * @dataProvider compressedFiles
-     * @requires extension bz2 1
+     * @requires extension bz2
      * @requires extension zip
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('compressedFiles')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('bz2')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('zip')]
     public function testReadCompressed(string $file): void
     {
         $file = new File($file);
diff --git a/test/classes/FlashMessagesTest.php b/test/classes/FlashMessagesTest.php
index 62682fd..8660379 100644
--- a/test/classes/FlashMessagesTest.php
+++ b/test/classes/FlashMessagesTest.php
@@ -10,6 +10,7 @@ use RuntimeException;
 /**
  * @covers \PhpMyAdmin\FlashMessages
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\FlashMessages::class)]
 class FlashMessagesTest extends AbstractTestCase
 {
     private const STORAGE_KEY = 'flashMessages';
diff --git a/test/classes/FontTest.php b/test/classes/FontTest.php
index 0a89bc9..b2d3d3a 100644
--- a/test/classes/FontTest.php
+++ b/test/classes/FontTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Font;
 /**
  * @covers \PhpMyAdmin\Font
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Font::class)]
 class FontTest extends AbstractTestCase
 {
     /** @var Font */
diff --git a/test/classes/FooterTest.php b/test/classes/FooterTest.php
index 594f1dd..e0c203e 100644
--- a/test/classes/FooterTest.php
+++ b/test/classes/FooterTest.php
@@ -14,6 +14,7 @@ use function json_encode;
 /**
  * @covers \PhpMyAdmin\Footer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Footer::class)]
 class FooterTest extends AbstractTestCase
 {
     /** @var array store private attributes of PhpMyAdmin\Footer */
@@ -64,6 +65,7 @@ class FooterTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetDebugMessage(): void
     {
         $GLOBALS['cfg']['DBG']['sql'] = true;
@@ -135,6 +137,7 @@ class FooterTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDisplay(): void
     {
         $footer = new Footer();
diff --git a/test/classes/Gis/GisFactoryTest.php b/test/classes/Gis/GisFactoryTest.php
index 09eac35..99a8055 100644
--- a/test/classes/Gis/GisFactoryTest.php
+++ b/test/classes/Gis/GisFactoryTest.php
@@ -17,6 +17,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Gis\GisFactory
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Gis\GisFactory::class)]
 class GisFactoryTest extends AbstractTestCase
 {
     /**
@@ -28,6 +29,7 @@ class GisFactoryTest extends AbstractTestCase
      *
      * @dataProvider providerForTestFactory
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestFactory')]
     public function testFactory(string $type, string $geom): void
     {
         self::assertInstanceOf($geom, GisFactory::factory($type));
diff --git a/test/classes/Gis/GisGeomTestCase.php b/test/classes/Gis/GisGeomTestCase.php
index e9e00de..9c8c306 100644
--- a/test/classes/Gis/GisGeomTestCase.php
+++ b/test/classes/Gis/GisGeomTestCase.php
@@ -28,6 +28,7 @@ abstract class GisGeomTestCase extends AbstractTestCase
      *
      * @dataProvider providerForTestGenerateParams
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGenerateParams')]
     public function testGenerateParams(string $wkt, ?int $index, array $params): void
     {
         if ($index === null) {
@@ -49,6 +50,7 @@ abstract class GisGeomTestCase extends AbstractTestCase
      *
      * @dataProvider providerForTestScaleRow
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestScaleRow')]
     public function testScaleRow(string $spatial, array $min_max): void
     {
         self::assertEquals($min_max, $this->object->scaleRow($spatial));
diff --git a/test/classes/Gis/GisGeometryCollectionTest.php b/test/classes/Gis/GisGeometryCollectionTest.php
index 43063b8..3927974 100644
--- a/test/classes/Gis/GisGeometryCollectionTest.php
+++ b/test/classes/Gis/GisGeometryCollectionTest.php
@@ -14,6 +14,7 @@ use function preg_match;
 /**
  * @covers \PhpMyAdmin\Gis\GisGeometryCollection
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Gis\GisGeometryCollection::class)]
 class GisGeometryCollectionTest extends AbstractTestCase
 {
     /** @var GisGeometryCollection */
@@ -47,6 +48,7 @@ class GisGeometryCollectionTest extends AbstractTestCase
      *
      * @dataProvider providerForScaleRow
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForScaleRow')]
     public function testScaleRow(string $spatial, array $output): void
     {
         self::assertEquals($output, $this->object->scaleRow($spatial));
@@ -82,6 +84,7 @@ class GisGeometryCollectionTest extends AbstractTestCase
      *
      * @dataProvider providerForGenerateWkt
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForGenerateWkt')]
     public function testGenerateWkt(array $gis_data, int $index, ?string $empty, string $output): void
     {
         self::assertSame($output, $this->object->generateWkt($gis_data, $index, $empty));
@@ -195,6 +198,7 @@ class GisGeometryCollectionTest extends AbstractTestCase
      *
      * @dataProvider providerForGenerateParams
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForGenerateParams')]
     public function testGenerateParams(string $value, array $output): void
     {
         self::assertSame($output, $this->object->generateParams($value));
@@ -235,6 +239,7 @@ class GisGeometryCollectionTest extends AbstractTestCase
     /**
      * @requires extension gd
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('gd')]
     public function testPrepareRowAsPng(): void
     {
         $image = ImageWrapper::create(120, 150);
@@ -261,6 +266,7 @@ class GisGeometryCollectionTest extends AbstractTestCase
      *
      * @dataProvider providerForPrepareRowAsPdf
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsPdf')]
     public function testPrepareRowAsPdf(
         string $spatial,
         string $label,
@@ -306,6 +312,7 @@ class GisGeometryCollectionTest extends AbstractTestCase
      *
      * @dataProvider providerForPrepareRowAsSvg
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsSvg')]
     public function testPrepareRowAsSvg(
         string $spatial,
         string $label,
@@ -360,6 +367,7 @@ class GisGeometryCollectionTest extends AbstractTestCase
      *
      * @dataProvider providerForPrepareRowAsOl
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsOl')]
     public function testPrepareRowAsOl(
         string $spatial,
         int $srid,
diff --git a/test/classes/Gis/GisGeometryTest.php b/test/classes/Gis/GisGeometryTest.php
index 15349c1..bee183f 100644
--- a/test/classes/Gis/GisGeometryTest.php
+++ b/test/classes/Gis/GisGeometryTest.php
@@ -11,6 +11,7 @@ use PHPUnit\Framework\MockObject\MockObject;
 /**
  * @covers \PhpMyAdmin\Gis\GisGeometry
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Gis\GisGeometry::class)]
 class GisGeometryTest extends AbstractTestCase
 {
     /** @var GisGeometry|MockObject */
@@ -45,6 +46,7 @@ class GisGeometryTest extends AbstractTestCase
      *
      * @dataProvider providerForTestSetMinMax
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestSetMinMax')]
     public function testSetMinMax(string $point_set, array $min_max, array $output): void
     {
         self::assertEquals($output, $this->callFunction(
@@ -102,6 +104,7 @@ class GisGeometryTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGenerateParams
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGenerateParams')]
     public function testGenerateParams(string $value, array $output): void
     {
         self::assertEquals($output, $this->callFunction(
@@ -154,6 +157,7 @@ class GisGeometryTest extends AbstractTestCase
      *
      * @dataProvider providerForTestExtractPoints
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestExtractPoints')]
     public function testExtractPoints(string $point_set, ?array $scale_data, bool $linear, array $output): void
     {
         self::assertEquals($output, $this->callFunction(
@@ -267,6 +271,7 @@ class GisGeometryTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGetBoundsForOl
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetBoundsForOl')]
     public function testGetBoundsForOl(int $srid, array $scale_data, string $output): void
     {
         self::assertSame($output, $this->callFunction(
@@ -316,6 +321,7 @@ class GisGeometryTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGetPolygonArrayForOpenLayers
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetPolygonArrayForOpenLayers')]
     public function testGetPolygonArrayForOpenLayers(array $polygons, int $srid, string $output): void
     {
         self::assertSame($output, $this->callFunction(
diff --git a/test/classes/Gis/GisLineStringTest.php b/test/classes/Gis/GisLineStringTest.php
index 3ed9c26..8d4301d 100644
--- a/test/classes/Gis/GisLineStringTest.php
+++ b/test/classes/Gis/GisLineStringTest.php
@@ -13,6 +13,7 @@ use function preg_match;
 /**
  * @covers \PhpMyAdmin\Gis\GisLineString
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Gis\GisLineString::class)]
 class GisLineStringTest extends GisGeomTestCase
 {
     /** @var    GisLineString */
@@ -166,6 +167,7 @@ class GisLineStringTest extends GisGeomTestCase
     /**
      * @requires extension gd
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('gd')]
     public function testPrepareRowAsPng(): void
     {
         $image = ImageWrapper::create(120, 150);
@@ -192,6 +194,7 @@ class GisLineStringTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsPdf
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsPdf')]
     public function testPrepareRowAsPdf(
         string $spatial,
         string $label,
@@ -237,6 +240,7 @@ class GisLineStringTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsSvg
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsSvg')]
     public function testPrepareRowAsSvg(
         string $spatial,
         string $label,
@@ -285,6 +289,7 @@ class GisLineStringTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsOl
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsOl')]
     public function testPrepareRowAsOl(
         string $spatial,
         int $srid,
diff --git a/test/classes/Gis/GisMultiLineStringTest.php b/test/classes/Gis/GisMultiLineStringTest.php
index b1eb705..58971e4 100644
--- a/test/classes/Gis/GisMultiLineStringTest.php
+++ b/test/classes/Gis/GisMultiLineStringTest.php
@@ -13,6 +13,7 @@ use function preg_match;
 /**
  * @covers \PhpMyAdmin\Gis\GisMultiLineString
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Gis\GisMultiLineString::class)]
 class GisMultiLineStringTest extends GisGeomTestCase
 {
     /** @var    GisMultiLineString */
@@ -248,6 +249,7 @@ class GisMultiLineStringTest extends GisGeomTestCase
     /**
      * @requires extension gd
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('gd')]
     public function testPrepareRowAsPng(): void
     {
         $image = ImageWrapper::create(120, 150);
@@ -274,6 +276,7 @@ class GisMultiLineStringTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsPdf
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsPdf')]
     public function testPrepareRowAsPdf(
         string $spatial,
         string $label,
@@ -319,6 +322,7 @@ class GisMultiLineStringTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsSvg
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsSvg')]
     public function testPrepareRowAsSvg(
         string $spatial,
         string $label,
@@ -369,6 +373,7 @@ class GisMultiLineStringTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsOl
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsOl')]
     public function testPrepareRowAsOl(
         string $spatial,
         int $srid,
diff --git a/test/classes/Gis/GisMultiPointTest.php b/test/classes/Gis/GisMultiPointTest.php
index 6e8a82f..1861fe2 100644
--- a/test/classes/Gis/GisMultiPointTest.php
+++ b/test/classes/Gis/GisMultiPointTest.php
@@ -13,6 +13,7 @@ use function preg_match;
 /**
  * @covers \PhpMyAdmin\Gis\GisMultiPoint
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Gis\GisMultiPoint::class)]
 class GisMultiPointTest extends GisGeomTestCase
 {
     /** @var    GisMultiPoint */
@@ -165,6 +166,7 @@ class GisMultiPointTest extends GisGeomTestCase
     /**
      * @requires extension gd
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('gd')]
     public function testPrepareRowAsPng(): void
     {
         $image = ImageWrapper::create(120, 150);
@@ -191,6 +193,7 @@ class GisMultiPointTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsPdf
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsPdf')]
     public function testPrepareRowAsPdf(
         string $spatial,
         string $label,
@@ -236,6 +239,7 @@ class GisMultiPointTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsSvg
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsSvg')]
     public function testPrepareRowAsSvg(
         string $spatial,
         string $label,
@@ -292,6 +296,7 @@ class GisMultiPointTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsOl
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsOl')]
     public function testPrepareRowAsOl(
         string $spatial,
         int $srid,
diff --git a/test/classes/Gis/GisMultiPolygonTest.php b/test/classes/Gis/GisMultiPolygonTest.php
index a627900..135884a 100644
--- a/test/classes/Gis/GisMultiPolygonTest.php
+++ b/test/classes/Gis/GisMultiPolygonTest.php
@@ -13,6 +13,7 @@ use function preg_match;
 /**
  * @covers \PhpMyAdmin\Gis\GisMultiPolygon
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Gis\GisMultiPolygon::class)]
 class GisMultiPolygonTest extends GisGeomTestCase
 {
     /** @var    GisMultiPolygon */
@@ -212,6 +213,7 @@ class GisMultiPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForTestGetShape
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetShape')]
     public function testGetShape(array $row_data, string $shape): void
     {
         self::assertSame($this->object->getShape($row_data), $shape);
@@ -333,6 +335,7 @@ class GisMultiPolygonTest extends GisGeomTestCase
     /**
      * @requires extension gd
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('gd')]
     public function testPrepareRowAsPng(): void
     {
         $image = ImageWrapper::create(120, 150);
@@ -359,6 +362,7 @@ class GisMultiPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsPdf
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsPdf')]
     public function testPrepareRowAsPdf(
         string $spatial,
         string $label,
@@ -404,6 +408,7 @@ class GisMultiPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsSvg
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsSvg')]
     public function testPrepareRowAsSvg(
         string $spatial,
         string $label,
@@ -456,6 +461,7 @@ class GisMultiPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsOl
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsOl')]
     public function testPrepareRowAsOl(
         string $spatial,
         int $srid,
diff --git a/test/classes/Gis/GisPointTest.php b/test/classes/Gis/GisPointTest.php
index e8bfed3..2e5e955 100644
--- a/test/classes/Gis/GisPointTest.php
+++ b/test/classes/Gis/GisPointTest.php
@@ -11,6 +11,7 @@ use TCPDF;
 /**
  * @covers \PhpMyAdmin\Gis\GisPoint
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Gis\GisPoint::class)]
 class GisPointTest extends GisGeomTestCase
 {
     /** @var    GisPoint */
@@ -99,6 +100,7 @@ class GisPointTest extends GisGeomTestCase
      *
      * @dataProvider providerForTestGetShape
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetShape')]
     public function testGetShape(array $row_data, string $shape): void
     {
         self::assertSame($this->object->getShape($row_data), $shape);
@@ -182,6 +184,7 @@ class GisPointTest extends GisGeomTestCase
     /**
      * @requires extension gd
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('gd')]
     public function testPrepareRowAsPng(): void
     {
         $image = ImageWrapper::create(120, 150);
@@ -208,6 +211,7 @@ class GisPointTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsPdf
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsPdf')]
     public function testPrepareRowAsPdf(
         string $spatial,
         string $label,
@@ -253,6 +257,7 @@ class GisPointTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsSvg
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsSvg')]
     public function testPrepareRowAsSvg(
         string $spatial,
         string $label,
@@ -303,6 +308,7 @@ class GisPointTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsOl
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsOl')]
     public function testPrepareRowAsOl(
         string $spatial,
         int $srid,
diff --git a/test/classes/Gis/GisPolygonTest.php b/test/classes/Gis/GisPolygonTest.php
index 4d46a98..2464914 100644
--- a/test/classes/Gis/GisPolygonTest.php
+++ b/test/classes/Gis/GisPolygonTest.php
@@ -13,6 +13,7 @@ use function preg_match;
 /**
  * @covers \PhpMyAdmin\Gis\GisPolygon
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Gis\GisPolygon::class)]
 class GisPolygonTest extends GisGeomTestCase
 {
     /** @var    GisPolygon */
@@ -196,6 +197,7 @@ class GisPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForTestArea
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestArea')]
     public function testArea(array $ring, float $area): void
     {
         self::assertSame($this->object->area($ring), $area);
@@ -278,6 +280,7 @@ class GisPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForTestIsPointInsidePolygon
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestIsPointInsidePolygon')]
     public function testIsPointInsidePolygon(array $point, array $polygon, bool $isInside): void
     {
         self::assertSame($this->object->isPointInsidePolygon($point, $polygon), $isInside);
@@ -356,6 +359,7 @@ class GisPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForTestGetPointOnSurface
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetPointOnSurface')]
     public function testGetPointOnSurface(array $ring): void
     {
         $point = $this->object->getPointOnSurface($ring);
@@ -416,6 +420,7 @@ class GisPolygonTest extends GisGeomTestCase
     /**
      * @requires extension gd
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('gd')]
     public function testPrepareRowAsPng(): void
     {
         $image = ImageWrapper::create(120, 150);
@@ -442,6 +447,7 @@ class GisPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsPdf
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsPdf')]
     public function testPrepareRowAsPdf(
         string $spatial,
         string $label,
@@ -487,6 +493,7 @@ class GisPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsSvg
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsSvg')]
     public function testPrepareRowAsSvg(
         string $spatial,
         string $label,
@@ -536,6 +543,7 @@ class GisPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForPrepareRowAsOl
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForPrepareRowAsOl')]
     public function testPrepareRowAsOl(
         string $spatial,
         int $srid,
@@ -598,6 +606,7 @@ class GisPolygonTest extends GisGeomTestCase
      *
      * @dataProvider providerForIsOuterRing
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForIsOuterRing')]
     public function testIsOuterRing(array $ring): void
     {
         self::assertTrue($this->object->isOuterRing($ring));
diff --git a/test/classes/Gis/GisVisualizationTest.php b/test/classes/Gis/GisVisualizationTest.php
index 22c4577..1374d87 100644
--- a/test/classes/Gis/GisVisualizationTest.php
+++ b/test/classes/Gis/GisVisualizationTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Gis\GisVisualization
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Gis\GisVisualization::class)]
 class GisVisualizationTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/GitTest.php b/test/classes/GitTest.php
index 7ddbdaa..b9c6146 100644
--- a/test/classes/GitTest.php
+++ b/test/classes/GitTest.php
@@ -21,6 +21,8 @@ use const PHP_EOL;
  * @covers \PhpMyAdmin\Git
  * @group git-revision
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Git::class)]
+#[\PHPUnit\Framework\Attributes\Group('git-revision')]
 class GitTest extends AbstractTestCase
 {
     /** @var Git */
@@ -88,6 +90,7 @@ class GitTest extends AbstractTestCase
      *
      * @group git-revision
      */
+    #[\PHPUnit\Framework\Attributes\Group('git-revision')]
     public function testIsGitRevisionLocalGitDir(): void
     {
         self::assertFalse($this->object->isGitRevision());
@@ -121,6 +124,7 @@ class GitTest extends AbstractTestCase
      *
      * @group git-revision
      */
+    #[\PHPUnit\Framework\Attributes\Group('git-revision')]
     public function testIsGitRevisionExternalGitDir(): void
     {
         file_put_contents($this->testDir . '.git', 'gitdir: ' . $this->testDir . '.customgitdir');
@@ -220,6 +224,7 @@ PHP;
      *
      * @group git-revision
      */
+    #[\PHPUnit\Framework\Attributes\Group('git-revision')]
     public function testCheckGitRevisionPacksFolder(): void
     {
         mkdir($this->testDir . '.git');
@@ -301,6 +306,7 @@ PHP;
      *
      * @group git-revision
      */
+    #[\PHPUnit\Framework\Attributes\Group('git-revision')]
     public function testCheckGitRevisionRefFile(): void
     {
         mkdir($this->testDir . '.git');
@@ -339,6 +345,7 @@ PHP;
      *
      * @group git-revision
      */
+    #[\PHPUnit\Framework\Attributes\Group('git-revision')]
     public function testCheckGitRevisionPacksFile(): void
     {
         mkdir($this->testDir . '.git');
diff --git a/test/classes/HeaderTest.php b/test/classes/HeaderTest.php
index 585dd3f..5e4e2a4 100644
--- a/test/classes/HeaderTest.php
+++ b/test/classes/HeaderTest.php
@@ -17,6 +17,8 @@ use const DATE_RFC1123;
  * @covers \PhpMyAdmin\Header
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Header::class)]
 class HeaderTest extends AbstractTestCase
 {
     /**
@@ -120,6 +122,7 @@ class HeaderTest extends AbstractTestCase
      * @covers \PhpMyAdmin\Core::getNoCacheHeaders
      * @dataProvider providerForTestGetHttpHeaders
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetHttpHeaders')]
     public function testGetHttpHeaders(
         $frameOptions,
         string $cspAllow,
diff --git a/test/classes/Html/GeneratorTest.php b/test/classes/Html/GeneratorTest.php
index c97245f..d13871c 100644
--- a/test/classes/Html/GeneratorTest.php
+++ b/test/classes/Html/GeneratorTest.php
@@ -21,6 +21,7 @@ use function urlencode;
 /**
  * @covers \PhpMyAdmin\Html\Generator
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Html\Generator::class)]
 class GeneratorTest extends AbstractTestCase
 {
     /**
@@ -37,6 +38,7 @@ class GeneratorTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetDbLinkEmpty(): void
     {
         $GLOBALS['db'] = null;
@@ -48,6 +50,7 @@ class GeneratorTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetDbLinkNull(): void
     {
         global $cfg;
@@ -183,6 +186,7 @@ class GeneratorTest extends AbstractTestCase
      *
      * @dataProvider linksOrButtons
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('linksOrButtons')]
     public function testLinkOrButton(array $params, int $limit, string $match): void
     {
         parent::setGlobalConfig();
@@ -431,6 +435,7 @@ class GeneratorTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGetDefaultFunctionForField
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetDefaultFunctionForField')]
     public function testGetDefaultFunctionForField(
         array $field,
         bool $insertMode,
diff --git a/test/classes/Html/MySQLDocumentationTest.php b/test/classes/Html/MySQLDocumentationTest.php
index 11d8581..23bb585 100644
--- a/test/classes/Html/MySQLDocumentationTest.php
+++ b/test/classes/Html/MySQLDocumentationTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Html\MySQLDocumentation
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Html\MySQLDocumentation::class)]
 class MySQLDocumentationTest extends AbstractTestCase
 {
     public function testShowDocumentation(): void
diff --git a/test/classes/Html/SecurityTest.php b/test/classes/Html/SecurityTest.php
index 83b1401..b12261e 100644
--- a/test/classes/Html/SecurityTest.php
+++ b/test/classes/Html/SecurityTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Url;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class SecurityTest extends AbstractTestCase
 {
     /** @var Template */
diff --git a/test/classes/Http/Factory/ServerRequestFactoryTest.php b/test/classes/Http/Factory/ServerRequestFactoryTest.php
index b71598b..7087573 100644
--- a/test/classes/Http/Factory/ServerRequestFactoryTest.php
+++ b/test/classes/Http/Factory/ServerRequestFactoryTest.php
@@ -18,6 +18,7 @@ use function class_exists;
 /**
  * @covers \PhpMyAdmin\Http\Factory\ServerRequestFactory
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Http\Factory\ServerRequestFactory::class)]
 class ServerRequestFactoryTest extends AbstractTestCase
 {
     private const IMPLEMENTATION_CLASSES = [
@@ -73,6 +74,7 @@ class ServerRequestFactoryTest extends AbstractTestCase
      *
      * @dataProvider dataProviderPsr7Implementations
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderPsr7Implementations')]
     public function testPsr7ImplementationGet(string $className, string $humanName): void
     {
         $this->runOrSkip($className, $humanName);
@@ -100,6 +102,7 @@ class ServerRequestFactoryTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testCreateServerRequestFromGlobals(): void
     {
         $_GET['foo'] = 'bar';
@@ -158,6 +161,7 @@ class ServerRequestFactoryTest extends AbstractTestCase
      *
      * @dataProvider dataProviderPsr7Implementations
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderPsr7Implementations')]
     public function testPsr7ImplementationCreateServerRequestFactory(string $className, string $humanName): void
     {
         $this->runOrSkip($className, $humanName);
diff --git a/test/classes/Import/AjaxTest.php b/test/classes/Import/AjaxTest.php
index f01a97a..4aea2d9 100644
--- a/test/classes/Import/AjaxTest.php
+++ b/test/classes/Import/AjaxTest.php
@@ -10,6 +10,7 @@ use PHPUnit\Framework\TestCase;
 /**
  * @covers \PhpMyAdmin\Import\Ajax
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Import\Ajax::class)]
 class AjaxTest extends TestCase
 {
     public function testNopluginCheck(): void
diff --git a/test/classes/ImportTest.php b/test/classes/ImportTest.php
index 71cd8d0..2f41865 100644
--- a/test/classes/ImportTest.php
+++ b/test/classes/ImportTest.php
@@ -13,6 +13,7 @@ use const PHP_INT_MAX;
 /**
  * @covers \PhpMyAdmin\Import
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Import::class)]
 class ImportTest extends AbstractTestCase
 {
     /** @var Import $import */
@@ -121,6 +122,7 @@ class ImportTest extends AbstractTestCase
      *
      * @dataProvider provGetColumnAlphaName
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provGetColumnAlphaName')]
     public function testGetColumnAlphaName(string $expected, int $num): void
     {
         self::assertSame($expected, $this->import->getColumnAlphaName($num));
@@ -169,6 +171,7 @@ class ImportTest extends AbstractTestCase
      *
      * @dataProvider provGetColumnNumberFromName
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provGetColumnNumberFromName')]
     public function testGetColumnNumberFromName(int $expected, string $name): void
     {
         self::assertSame($expected, $this->import->getColumnNumberFromName($name));
@@ -217,6 +220,7 @@ class ImportTest extends AbstractTestCase
      *
      * @dataProvider provGetDecimalPrecision
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provGetDecimalPrecision')]
     public function testGetDecimalPrecision(int $expected, string $size): void
     {
         self::assertSame($expected, $this->import->getDecimalPrecision($size));
@@ -257,6 +261,7 @@ class ImportTest extends AbstractTestCase
      *
      * @dataProvider provGetDecimalScale
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provGetDecimalScale')]
     public function testGetDecimalScale(int $expected, string $size): void
     {
         self::assertSame($expected, $this->import->getDecimalScale($size));
@@ -297,6 +302,7 @@ class ImportTest extends AbstractTestCase
      *
      * @dataProvider provGetDecimalSize
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provGetDecimalSize')]
     public function testGetDecimalSize(array $expected, string $cell): void
     {
         self::assertSame($expected, $this->import->getDecimalSize($cell));
@@ -356,6 +362,7 @@ class ImportTest extends AbstractTestCase
      *
      * @dataProvider provDetectType
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provDetectType')]
     public function testDetectType(int $expected, ?int $type, ?string $cell): void
     {
         self::assertSame($expected, $this->import->detectType($type, $cell));
@@ -518,6 +525,7 @@ class ImportTest extends AbstractTestCase
      *
      * @dataProvider providerContentWithByteOrderMarks
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerContentWithByteOrderMarks')]
     public function testSkipByteOrderMarksFromContents(string $input, string $cleanContents): void
     {
         self::assertSame($cleanContents, $this->import->skipByteOrderMarksFromContents($input));
diff --git a/test/classes/IndexColumnTest.php b/test/classes/IndexColumnTest.php
index 7bc1c19..d6f85ce 100644
--- a/test/classes/IndexColumnTest.php
+++ b/test/classes/IndexColumnTest.php
@@ -10,6 +10,7 @@ use PHPUnit\Framework\TestCase;
 /**
  * @covers \PhpMyAdmin\IndexColumn
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\IndexColumn::class)]
 class IndexColumnTest extends TestCase
 {
     /** @var IndexColumn */
diff --git a/test/classes/IndexTest.php b/test/classes/IndexTest.php
index bc11be2..73d9f16 100644
--- a/test/classes/IndexTest.php
+++ b/test/classes/IndexTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Index;
 /**
  * @covers \PhpMyAdmin\Index
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Index::class)]
 class IndexTest extends AbstractTestCase
 {
     /** @var array */
diff --git a/test/classes/InsertEditTest.php b/test/classes/InsertEditTest.php
index d6e9f64..19acf89 100644
--- a/test/classes/InsertEditTest.php
+++ b/test/classes/InsertEditTest.php
@@ -35,6 +35,8 @@ use const MYSQLI_TYPE_TINY;
  * @covers \PhpMyAdmin\InsertEdit
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\InsertEdit::class)]
 class InsertEditTest extends AbstractTestCase
 {
     /** @var InsertEdit */
@@ -376,6 +378,7 @@ class InsertEditTest extends AbstractTestCase
      *
      * @dataProvider dataProviderConfigValueInsertRows
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderConfigValueInsertRows')]
     public function testLoadFirstRow($configValue, array $rowsValue): void
     {
         $GLOBALS['cfg']['InsertRows'] = $configValue;
@@ -1521,6 +1524,7 @@ class InsertEditTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGetSpecialCharsAndBackupFieldForInsertingMode
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetSpecialCharsAndBackupFieldForInsertingMode')]
     public function testGetSpecialCharsAndBackupFieldForInsertingMode(
         array $column,
         array $expected
diff --git a/test/classes/InternalRelationsTest.php b/test/classes/InternalRelationsTest.php
index d686896..61ae85c 100644
--- a/test/classes/InternalRelationsTest.php
+++ b/test/classes/InternalRelationsTest.php
@@ -10,6 +10,7 @@ use PHPUnit\Framework\TestCase;
 /**
  * @covers \PhpMyAdmin\InternalRelations
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\InternalRelations::class)]
 class InternalRelationsTest extends TestCase
 {
     public function testGetInformationSchema(): void
diff --git a/test/classes/IpAllowDenyTest.php b/test/classes/IpAllowDenyTest.php
index e6ab9a8..a4d9da4 100644
--- a/test/classes/IpAllowDenyTest.php
+++ b/test/classes/IpAllowDenyTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\IpAllowDeny;
 /**
  * @covers \PhpMyAdmin\IpAllowDeny
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\IpAllowDeny::class)]
 class IpAllowDenyTest extends AbstractTestCase
 {
     /** @var IpAllowDeny */
@@ -43,6 +44,7 @@ class IpAllowDenyTest extends AbstractTestCase
      *
      * @dataProvider proxyIPs
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('proxyIPs')]
     public function testGetIp(?string $remote, ?string $header, $expected, ?string $proxyip = null): void
     {
         unset($_SERVER['REMOTE_ADDR']);
diff --git a/test/classes/LanguageTest.php b/test/classes/LanguageTest.php
index d8367f6..1dbeddd 100644
--- a/test/classes/LanguageTest.php
+++ b/test/classes/LanguageTest.php
@@ -16,6 +16,8 @@ use function strtolower;
  * @covers \PhpMyAdmin\Language
  * @covers \PhpMyAdmin\LanguageManager
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Language::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\LanguageManager::class)]
 class LanguageTest extends AbstractTestCase
 {
     /** @var LanguageManager */
@@ -155,6 +157,7 @@ class LanguageTest extends AbstractTestCase
      *
      * @dataProvider selectDataProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('selectDataProvider')]
     public function testSelect(
         string $lang,
         string $post,
@@ -234,6 +237,7 @@ class LanguageTest extends AbstractTestCase
      * @group large
      * @dataProvider listLocales
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('listLocales')]
     public function testGettext(string $locale): void
     {
         $GLOBALS['config']->set('FilterLanguages', '');
diff --git a/test/classes/LinterTest.php b/test/classes/LinterTest.php
index 3d6665a..debc5bd 100644
--- a/test/classes/LinterTest.php
+++ b/test/classes/LinterTest.php
@@ -11,6 +11,7 @@ use function str_repeat;
 /**
  * @covers \PhpMyAdmin\Linter
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Linter::class)]
 class LinterTest extends AbstractTestCase
 {
     /**
@@ -75,6 +76,7 @@ class LinterTest extends AbstractTestCase
      *
      * @dataProvider lintProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('lintProvider')]
     public function testLint(array $expected, string $query): void
     {
         self::assertSame($expected, Linter::lint($query));
diff --git a/test/classes/ListDatabaseTest.php b/test/classes/ListDatabaseTest.php
index 9f0ff97..887e9e0 100644
--- a/test/classes/ListDatabaseTest.php
+++ b/test/classes/ListDatabaseTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\ListDatabase;
 /**
  * @covers \PhpMyAdmin\ListDatabase<extended>
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ListDatabase::class)]
 class ListDatabaseTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/LoggingTest.php b/test/classes/LoggingTest.php
index ca6c1e0..d5a52ad 100644
--- a/test/classes/LoggingTest.php
+++ b/test/classes/LoggingTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Logging;
 /**
  * @covers \PhpMyAdmin\Logging
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Logging::class)]
 class LoggingTest extends AbstractTestCase
 {
     public function testGetLogMessage(): void
diff --git a/test/classes/MenuTest.php b/test/classes/MenuTest.php
index 3eb0c3b..6f50316 100644
--- a/test/classes/MenuTest.php
+++ b/test/classes/MenuTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Menu;
 /**
  * @covers \PhpMyAdmin\Menu
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Menu::class)]
 class MenuTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/MessageTest.php b/test/classes/MessageTest.php
index cc97c4b..42c6a73 100644
--- a/test/classes/MessageTest.php
+++ b/test/classes/MessageTest.php
@@ -11,6 +11,7 @@ use function md5;
 /**
  * @covers \PhpMyAdmin\Message
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Message::class)]
 class MessageTest extends AbstractTestCase
 {
     /** @var Message */
@@ -342,6 +343,7 @@ class MessageTest extends AbstractTestCase
      *
      * @dataProvider decodeBBDataProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('decodeBBDataProvider')]
     public function testDecodeBB(string $actual, string $expected): void
     {
         unset($GLOBALS['server']);
@@ -476,6 +478,7 @@ class MessageTest extends AbstractTestCase
      *
      * @dataProvider providerAffectedRows
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerAffectedRows')]
     public function testAffectedRows(int $rows, string $output): void
     {
         $this->object = new Message();
@@ -521,6 +524,7 @@ class MessageTest extends AbstractTestCase
      *
      * @dataProvider providerInsertedRows
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerInsertedRows')]
     public function testInsertedRows(int $rows, string $output): void
     {
         $this->object = new Message();
@@ -566,6 +570,7 @@ class MessageTest extends AbstractTestCase
      *
      * @dataProvider providerDeletedRows
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerDeletedRows')]
     public function testDeletedRows(int $rows, string $output): void
     {
         $this->object = new Message();
diff --git a/test/classes/MimeTest.php b/test/classes/MimeTest.php
index 6d9e1f9..e28d747 100644
--- a/test/classes/MimeTest.php
+++ b/test/classes/MimeTest.php
@@ -11,6 +11,7 @@ use function chr;
 /**
  * @covers \PhpMyAdmin\Mime
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Mime::class)]
 class MimeTest extends AbstractTestCase
 {
     /**
@@ -21,6 +22,7 @@ class MimeTest extends AbstractTestCase
      *
      * @dataProvider providerForTestDetect
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestDetect')]
     public function testDetect(string $test, string $output): void
     {
         self::assertSame(Mime::detect($test), $output);
diff --git a/test/classes/Navigation/NavigationTest.php b/test/classes/Navigation/NavigationTest.php
index 9ea0a4c..94be0b7 100644
--- a/test/classes/Navigation/NavigationTest.php
+++ b/test/classes/Navigation/NavigationTest.php
@@ -15,6 +15,7 @@ use PhpMyAdmin\Url;
 /**
  * @covers \PhpMyAdmin\Navigation\Navigation
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Navigation::class)]
 class NavigationTest extends AbstractTestCase
 {
     /** @var Navigation */
diff --git a/test/classes/Navigation/NavigationTreeTest.php b/test/classes/Navigation/NavigationTreeTest.php
index ba177e0..5a8020f 100644
--- a/test/classes/Navigation/NavigationTreeTest.php
+++ b/test/classes/Navigation/NavigationTreeTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\NavigationTree
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\NavigationTree::class)]
 class NavigationTreeTest extends AbstractTestCase
 {
     /** @var NavigationTree */
diff --git a/test/classes/Navigation/NodeFactoryTest.php b/test/classes/Navigation/NodeFactoryTest.php
index 9d5b18e..055f776 100644
--- a/test/classes/Navigation/NodeFactoryTest.php
+++ b/test/classes/Navigation/NodeFactoryTest.php
@@ -12,6 +12,7 @@ use Exception;
 /**
  * @covers \PhpMyAdmin\Navigation\NodeFactory
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\NodeFactory::class)]
 class NodeFactoryTest extends AbstractTestCase
 {
     /**
@@ -51,6 +52,8 @@ class NodeFactoryTest extends AbstractTestCase
      * @group with-trigger-error
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\Group('with-trigger-error')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testFileError(): void
     {
         set_error_handler(
@@ -70,6 +73,8 @@ class NodeFactoryTest extends AbstractTestCase
      * @group with-trigger-error
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\Group('with-trigger-error')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testClassNameError(): void
     {
         set_error_handler(
diff --git a/test/classes/Navigation/Nodes/NodeColumnContainerTest.php b/test/classes/Navigation/Nodes/NodeColumnContainerTest.php
index e4c4c34..536d4ef 100644
--- a/test/classes/Navigation/Nodes/NodeColumnContainerTest.php
+++ b/test/classes/Navigation/Nodes/NodeColumnContainerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeColumnContainer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeColumnContainer::class)]
 class NodeColumnContainerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeColumnTest.php b/test/classes/Navigation/Nodes/NodeColumnTest.php
index 4ac93a3..29316a0 100644
--- a/test/classes/Navigation/Nodes/NodeColumnTest.php
+++ b/test/classes/Navigation/Nodes/NodeColumnTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeColumn
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeColumn::class)]
 class NodeColumnTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeDatabaseChildTest.php b/test/classes/Navigation/Nodes/NodeDatabaseChildTest.php
index 1145283..e68e349 100644
--- a/test/classes/Navigation/Nodes/NodeDatabaseChildTest.php
+++ b/test/classes/Navigation/Nodes/NodeDatabaseChildTest.php
@@ -14,6 +14,7 @@ use PHPUnit\Framework\MockObject\MockObject;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeDatabaseChild
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeDatabaseChild::class)]
 class NodeDatabaseChildTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeDatabaseTest.php b/test/classes/Navigation/Nodes/NodeDatabaseTest.php
index b69a150..6f9bfc5 100644
--- a/test/classes/Navigation/Nodes/NodeDatabaseTest.php
+++ b/test/classes/Navigation/Nodes/NodeDatabaseTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeDatabase
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeDatabase::class)]
 class NodeDatabaseTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeEventContainerTest.php b/test/classes/Navigation/Nodes/NodeEventContainerTest.php
index c6e919f..9ae7520 100644
--- a/test/classes/Navigation/Nodes/NodeEventContainerTest.php
+++ b/test/classes/Navigation/Nodes/NodeEventContainerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeEventContainer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeEventContainer::class)]
 class NodeEventContainerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeEventTest.php b/test/classes/Navigation/Nodes/NodeEventTest.php
index ce3cd2e..9e8fdb9 100644
--- a/test/classes/Navigation/Nodes/NodeEventTest.php
+++ b/test/classes/Navigation/Nodes/NodeEventTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeEvent
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeEvent::class)]
 class NodeEventTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeFunctionContainerTest.php b/test/classes/Navigation/Nodes/NodeFunctionContainerTest.php
index e67c8da..508d6ea 100644
--- a/test/classes/Navigation/Nodes/NodeFunctionContainerTest.php
+++ b/test/classes/Navigation/Nodes/NodeFunctionContainerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeFunctionContainer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeFunctionContainer::class)]
 class NodeFunctionContainerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeFunctionTest.php b/test/classes/Navigation/Nodes/NodeFunctionTest.php
index 7cc27fc..dbfc06a 100644
--- a/test/classes/Navigation/Nodes/NodeFunctionTest.php
+++ b/test/classes/Navigation/Nodes/NodeFunctionTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeFunction
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeFunction::class)]
 class NodeFunctionTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeIndexContainerTest.php b/test/classes/Navigation/Nodes/NodeIndexContainerTest.php
index d371b5a..f19c30f 100644
--- a/test/classes/Navigation/Nodes/NodeIndexContainerTest.php
+++ b/test/classes/Navigation/Nodes/NodeIndexContainerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeIndexContainer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeIndexContainer::class)]
 class NodeIndexContainerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeIndexTest.php b/test/classes/Navigation/Nodes/NodeIndexTest.php
index 724433b..7afd779 100644
--- a/test/classes/Navigation/Nodes/NodeIndexTest.php
+++ b/test/classes/Navigation/Nodes/NodeIndexTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeIndex
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeIndex::class)]
 class NodeIndexTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeProcedureContainerTest.php b/test/classes/Navigation/Nodes/NodeProcedureContainerTest.php
index 84aff43..4c1fae4 100644
--- a/test/classes/Navigation/Nodes/NodeProcedureContainerTest.php
+++ b/test/classes/Navigation/Nodes/NodeProcedureContainerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeProcedureContainer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeProcedureContainer::class)]
 class NodeProcedureContainerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeProcedureTest.php b/test/classes/Navigation/Nodes/NodeProcedureTest.php
index 057a1f8..ca84ba3 100644
--- a/test/classes/Navigation/Nodes/NodeProcedureTest.php
+++ b/test/classes/Navigation/Nodes/NodeProcedureTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeProcedure
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeProcedure::class)]
 class NodeProcedureTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeTableContainerTest.php b/test/classes/Navigation/Nodes/NodeTableContainerTest.php
index 6893fc9..2a71295 100644
--- a/test/classes/Navigation/Nodes/NodeTableContainerTest.php
+++ b/test/classes/Navigation/Nodes/NodeTableContainerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeTableContainer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeTableContainer::class)]
 class NodeTableContainerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeTableTest.php b/test/classes/Navigation/Nodes/NodeTableTest.php
index ba74cab..1840a98 100644
--- a/test/classes/Navigation/Nodes/NodeTableTest.php
+++ b/test/classes/Navigation/Nodes/NodeTableTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeTable
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeTable::class)]
 class NodeTableTest extends AbstractTestCase
 {
     /**
@@ -54,6 +55,7 @@ class NodeTableTest extends AbstractTestCase
      *
      * @dataProvider providerForTestIcon
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestIcon')]
     public function testIcon(string $target, string $imageName, string $imageTitle): void
     {
         $GLOBALS['cfg']['NavigationTreeDefaultTabTable'] = $target;
diff --git a/test/classes/Navigation/Nodes/NodeTest.php b/test/classes/Navigation/Nodes/NodeTest.php
index 3d99b2f..2ec7de6 100644
--- a/test/classes/Navigation/Nodes/NodeTest.php
+++ b/test/classes/Navigation/Nodes/NodeTest.php
@@ -14,6 +14,7 @@ use ReflectionMethod;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\Node
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\Node::class)]
 class NodeTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeTriggerContainerTest.php b/test/classes/Navigation/Nodes/NodeTriggerContainerTest.php
index 4ce8660..dfcf4f7 100644
--- a/test/classes/Navigation/Nodes/NodeTriggerContainerTest.php
+++ b/test/classes/Navigation/Nodes/NodeTriggerContainerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeTriggerContainer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeTriggerContainer::class)]
 class NodeTriggerContainerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeTriggerTest.php b/test/classes/Navigation/Nodes/NodeTriggerTest.php
index bc01dd3..f53d967 100644
--- a/test/classes/Navigation/Nodes/NodeTriggerTest.php
+++ b/test/classes/Navigation/Nodes/NodeTriggerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeTrigger
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeTrigger::class)]
 class NodeTriggerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeViewContainerTest.php b/test/classes/Navigation/Nodes/NodeViewContainerTest.php
index e4af33e..f099e13 100644
--- a/test/classes/Navigation/Nodes/NodeViewContainerTest.php
+++ b/test/classes/Navigation/Nodes/NodeViewContainerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeViewContainer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeViewContainer::class)]
 class NodeViewContainerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Navigation/Nodes/NodeViewTest.php b/test/classes/Navigation/Nodes/NodeViewTest.php
index ea2661a..157c75c 100644
--- a/test/classes/Navigation/Nodes/NodeViewTest.php
+++ b/test/classes/Navigation/Nodes/NodeViewTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Navigation\Nodes\NodeView
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Navigation\Nodes\NodeView::class)]
 class NodeViewTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/NormalizationTest.php b/test/classes/NormalizationTest.php
index 0b39878..a974ae8 100644
--- a/test/classes/NormalizationTest.php
+++ b/test/classes/NormalizationTest.php
@@ -21,6 +21,7 @@ use function json_encode;
 /**
  * @covers \PhpMyAdmin\Normalization
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Normalization::class)]
 class NormalizationTest extends AbstractTestCase
 {
     /** @var Normalization */
diff --git a/test/classes/OpenDocumentTest.php b/test/classes/OpenDocumentTest.php
index 9cf9b32..430dd42 100644
--- a/test/classes/OpenDocumentTest.php
+++ b/test/classes/OpenDocumentTest.php
@@ -17,6 +17,7 @@ use function unlink;
  * @covers \PhpMyAdmin\OpenDocument
  * @requires extension zip
  */
+#[\PHPUnit\Framework\Attributes\RequiresPhpExtension('zip')]
 class OpenDocumentTest extends AbstractTestCase
 {
     public function testCreateDocument(): void
diff --git a/test/classes/OperationsTest.php b/test/classes/OperationsTest.php
index c1781a2..b54044f 100644
--- a/test/classes/OperationsTest.php
+++ b/test/classes/OperationsTest.php
@@ -12,6 +12,7 @@ use function array_merge;
 /**
  * @covers \PhpMyAdmin\Operations
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Operations::class)]
 class OperationsTest extends AbstractTestCase
 {
     /** @var Operations */
@@ -29,6 +30,7 @@ class OperationsTest extends AbstractTestCase
     /**
      * @dataProvider providerGetPartitionMaintenanceChoices
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetPartitionMaintenanceChoices')]
     public function testGetPartitionMaintenanceChoices(string $tableName, array $extraChoice): void
     {
         global $db, $table;
diff --git a/test/classes/Partitioning/PartitionTest.php b/test/classes/Partitioning/PartitionTest.php
index aa62634..f2f32bb 100644
--- a/test/classes/Partitioning/PartitionTest.php
+++ b/test/classes/Partitioning/PartitionTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Partitioning\Partition
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Partitioning\Partition::class)]
 class PartitionTest extends AbstractTestCase
 {
     public function testGetPartitionMethodReturnsNull(): void
diff --git a/test/classes/Partitioning/SubPartitionTest.php b/test/classes/Partitioning/SubPartitionTest.php
index 7e9bf17..290f4b7 100644
--- a/test/classes/Partitioning/SubPartitionTest.php
+++ b/test/classes/Partitioning/SubPartitionTest.php
@@ -10,6 +10,7 @@ use PHPUnit\Framework\TestCase;
 /**
  * @covers \PhpMyAdmin\Partitioning\SubPartition
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Partitioning\SubPartition::class)]
 class SubPartitionTest extends TestCase
 {
     public function testSubPartition(): void
diff --git a/test/classes/Partitioning/TablePartitionDefinitionTest.php b/test/classes/Partitioning/TablePartitionDefinitionTest.php
index 2a62029..b67d62a 100644
--- a/test/classes/Partitioning/TablePartitionDefinitionTest.php
+++ b/test/classes/Partitioning/TablePartitionDefinitionTest.php
@@ -10,11 +10,13 @@ use PHPUnit\Framework\TestCase;
 /**
  * @covers \PhpMyAdmin\Partitioning\TablePartitionDefinition
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Partitioning\TablePartitionDefinition::class)]
 class TablePartitionDefinitionTest extends TestCase
 {
     /**
      * @dataProvider providerGetDetails
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetDetails')]
     public function testGetDetails(
         string $partitionBy,
         bool $canHaveSubpartitions,
@@ -242,6 +244,7 @@ class TablePartitionDefinitionTest extends TestCase
     /**
      * @dataProvider providerGetDetailsWithMaxPartitions
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetDetailsWithMaxPartitions')]
     public function testGetDetailsWithMaxPartitions(int $partitionCount, string $partitionCountFromPost): void
     {
         $_POST = ['partition_count' => $partitionCountFromPost];
diff --git a/test/classes/PdfTest.php b/test/classes/PdfTest.php
index 90507d9..7ad334b 100644
--- a/test/classes/PdfTest.php
+++ b/test/classes/PdfTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Pdf;
 /**
  * @covers \PhpMyAdmin\Pdf
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Pdf::class)]
 class PdfTest extends AbstractTestCase
 {
     /**
@@ -25,6 +26,7 @@ class PdfTest extends AbstractTestCase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testBasic(): void
     {
         $arr = new Pdf();
@@ -36,6 +38,7 @@ class PdfTest extends AbstractTestCase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testAlias(): void
     {
         $arr = new Pdf();
@@ -48,6 +51,7 @@ class PdfTest extends AbstractTestCase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDocument(): void
     {
         $pdf = new Pdf();
diff --git a/test/classes/Plugins/Auth/AuthenticationConfigTest.php b/test/classes/Plugins/Auth/AuthenticationConfigTest.php
index 24e6b77..7a977c8 100644
--- a/test/classes/Plugins/Auth/AuthenticationConfigTest.php
+++ b/test/classes/Plugins/Auth/AuthenticationConfigTest.php
@@ -15,6 +15,7 @@ use function ob_start;
 /**
  * @covers \PhpMyAdmin\Plugins\Auth\AuthenticationConfig
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Auth\AuthenticationConfig::class)]
 class AuthenticationConfigTest extends AbstractTestCase
 {
     /** @var AuthenticationConfig */
diff --git a/test/classes/Plugins/Auth/AuthenticationCookieTest.php b/test/classes/Plugins/Auth/AuthenticationCookieTest.php
index 3e8cc56..d1d9b44 100644
--- a/test/classes/Plugins/Auth/AuthenticationCookieTest.php
+++ b/test/classes/Plugins/Auth/AuthenticationCookieTest.php
@@ -31,6 +31,7 @@ use const SODIUM_CRYPTO_SECRETBOX_KEYBYTES;
 /**
  * @covers \PhpMyAdmin\Plugins\Auth\AuthenticationCookie
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Auth\AuthenticationCookie::class)]
 class AuthenticationCookieTest extends AbstractNetworkTestCase
 {
     /** @var AuthenticationCookie */
@@ -67,6 +68,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testAuthErrorAJAX(): void
     {
         $mockResponse = $this->mockResponse();
@@ -172,6 +174,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testAuthError(): void
     {
         $_REQUEST = [];
@@ -235,6 +238,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testAuthCaptcha(): void
     {
         $mockResponse = $this->mockResponse();
@@ -304,6 +308,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testAuthCaptchaCheckbox(): void
     {
         $mockResponse = $this->mockResponse();
@@ -692,6 +697,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testAuthFailsNoPass(): void
     {
         $this->object = $this->getMockBuilder(AuthenticationCookie::class)
@@ -745,6 +751,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
     /**
      * @dataProvider dataProviderPasswordLength
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderPasswordLength')]
     public function testAuthFailsTooLongPass(string $password, bool $trueFalse, ?string $connError): void
     {
         $_POST['pma_username'] = str_shuffle('123456987rootfoobar');
@@ -762,6 +769,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testAuthFailsDeny(): void
     {
         $this->object = $this->getMockBuilder(AuthenticationCookie::class)
@@ -784,6 +792,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testAuthFailsActivity(): void
     {
         $this->object = $this->getMockBuilder(AuthenticationCookie::class)
@@ -812,6 +821,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testAuthFailsDBI(): void
     {
         $this->object = $this->getMockBuilder(AuthenticationCookie::class)
@@ -845,6 +855,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testAuthFailsErrno(): void
     {
         $this->object = $this->getMockBuilder(AuthenticationCookie::class)
@@ -1002,6 +1013,7 @@ class AuthenticationCookieTest extends AbstractNetworkTestCase
      *
      * @dataProvider checkRulesProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('checkRulesProvider')]
     public function testCheckRules(
         string $user,
         string $pass,
diff --git a/test/classes/Plugins/Auth/AuthenticationHttpTest.php b/test/classes/Plugins/Auth/AuthenticationHttpTest.php
index ef35a84..807fa31 100644
--- a/test/classes/Plugins/Auth/AuthenticationHttpTest.php
+++ b/test/classes/Plugins/Auth/AuthenticationHttpTest.php
@@ -18,6 +18,7 @@ use function ob_start;
 /**
  * @covers \PhpMyAdmin\Plugins\Auth\AuthenticationHttp
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Auth\AuthenticationHttp::class)]
 class AuthenticationHttpTest extends AbstractNetworkTestCase
 {
     /** @var AuthenticationHttp */
@@ -118,6 +119,7 @@ class AuthenticationHttpTest extends AbstractNetworkTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testAuthLogoutUrl(): void
     {
         $_REQUEST['old_usr'] = '1';
@@ -134,6 +136,7 @@ class AuthenticationHttpTest extends AbstractNetworkTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testAuthVerbose(): void
     {
         $_REQUEST['old_usr'] = '';
@@ -152,6 +155,7 @@ class AuthenticationHttpTest extends AbstractNetworkTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testAuthHost(): void
     {
         $GLOBALS['cfg']['Server']['verbose'] = '';
@@ -170,6 +174,7 @@ class AuthenticationHttpTest extends AbstractNetworkTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testAuthRealm(): void
     {
         $GLOBALS['cfg']['Server']['host'] = '';
@@ -197,6 +202,7 @@ class AuthenticationHttpTest extends AbstractNetworkTestCase
      *
      * @dataProvider readCredentialsProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('readCredentialsProvider')]
     public function testAuthCheck(
         string $user,
         string $pass,
@@ -351,6 +357,7 @@ class AuthenticationHttpTest extends AbstractNetworkTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testAuthFails(): void
     {
         $_REQUEST = [];
diff --git a/test/classes/Plugins/Auth/AuthenticationSignonTest.php b/test/classes/Plugins/Auth/AuthenticationSignonTest.php
index af3f77e..6ac103e 100644
--- a/test/classes/Plugins/Auth/AuthenticationSignonTest.php
+++ b/test/classes/Plugins/Auth/AuthenticationSignonTest.php
@@ -20,6 +20,7 @@ use function version_compare;
 /**
  * @covers \PhpMyAdmin\Plugins\Auth\AuthenticationSignon
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Auth\AuthenticationSignon::class)]
 class AuthenticationSignonTest extends AbstractNetworkTestCase
 {
     /** @var AuthenticationSignon */
diff --git a/test/classes/Plugins/Export/ExportCodegenTest.php b/test/classes/Plugins/Export/ExportCodegenTest.php
index 03da6a2..489b441 100644
--- a/test/classes/Plugins/Export/ExportCodegenTest.php
+++ b/test/classes/Plugins/Export/ExportCodegenTest.php
@@ -22,6 +22,8 @@ use function ob_start;
  * @covers \PhpMyAdmin\Plugins\Export\ExportCodegen
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportCodegen::class)]
 class ExportCodegenTest extends AbstractTestCase
 {
     /** @var ExportCodegen */
diff --git a/test/classes/Plugins/Export/ExportCsvTest.php b/test/classes/Plugins/Export/ExportCsvTest.php
index b81a523..a57ff24 100644
--- a/test/classes/Plugins/Export/ExportCsvTest.php
+++ b/test/classes/Plugins/Export/ExportCsvTest.php
@@ -23,6 +23,8 @@ use function ob_start;
  * @covers \PhpMyAdmin\Plugins\Export\ExportCsv
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportCsv::class)]
 class ExportCsvTest extends AbstractTestCase
 {
     /** @var ExportCsv */
diff --git a/test/classes/Plugins/Export/ExportExcelTest.php b/test/classes/Plugins/Export/ExportExcelTest.php
index 35781cf..99f2f66 100644
--- a/test/classes/Plugins/Export/ExportExcelTest.php
+++ b/test/classes/Plugins/Export/ExportExcelTest.php
@@ -22,6 +22,8 @@ use function array_shift;
  * @covers \PhpMyAdmin\Plugins\Export\ExportExcel
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportExcel::class)]
 class ExportExcelTest extends AbstractTestCase
 {
     /** @var ExportExcel */
diff --git a/test/classes/Plugins/Export/ExportHtmlwordTest.php b/test/classes/Plugins/Export/ExportHtmlwordTest.php
index 45e7aee..3b9d6be 100644
--- a/test/classes/Plugins/Export/ExportHtmlwordTest.php
+++ b/test/classes/Plugins/Export/ExportHtmlwordTest.php
@@ -28,6 +28,8 @@ use function ob_start;
  * @covers \PhpMyAdmin\Plugins\Export\ExportHtmlword
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportHtmlword::class)]
 class ExportHtmlwordTest extends AbstractTestCase
 {
     /** @var ExportHtmlword */
diff --git a/test/classes/Plugins/Export/ExportJsonTest.php b/test/classes/Plugins/Export/ExportJsonTest.php
index af0fd3b..1f90277 100644
--- a/test/classes/Plugins/Export/ExportJsonTest.php
+++ b/test/classes/Plugins/Export/ExportJsonTest.php
@@ -20,6 +20,8 @@ use function array_shift;
  * @covers \PhpMyAdmin\Plugins\Export\ExportJson
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportJson::class)]
 class ExportJsonTest extends AbstractTestCase
 {
     /** @var ExportJson */
diff --git a/test/classes/Plugins/Export/ExportLatexTest.php b/test/classes/Plugins/Export/ExportLatexTest.php
index 094fa0b..31b5b3c 100644
--- a/test/classes/Plugins/Export/ExportLatexTest.php
+++ b/test/classes/Plugins/Export/ExportLatexTest.php
@@ -27,6 +27,8 @@ use function ob_start;
  * @covers \PhpMyAdmin\Plugins\Export\ExportLatex
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportLatex::class)]
 class ExportLatexTest extends AbstractTestCase
 {
     /** @var ExportLatex */
diff --git a/test/classes/Plugins/Export/ExportMediawikiTest.php b/test/classes/Plugins/Export/ExportMediawikiTest.php
index e26233e..e932953 100644
--- a/test/classes/Plugins/Export/ExportMediawikiTest.php
+++ b/test/classes/Plugins/Export/ExportMediawikiTest.php
@@ -25,6 +25,8 @@ use function ob_start;
  * @covers \PhpMyAdmin\Plugins\Export\ExportMediawiki
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportMediawiki::class)]
 class ExportMediawikiTest extends AbstractTestCase
 {
     /** @var ExportMediawiki */
diff --git a/test/classes/Plugins/Export/ExportOdsTest.php b/test/classes/Plugins/Export/ExportOdsTest.php
index 3fd0b0a..7fc8ec5 100644
--- a/test/classes/Plugins/Export/ExportOdsTest.php
+++ b/test/classes/Plugins/Export/ExportOdsTest.php
@@ -34,6 +34,7 @@ use const MYSQLI_TYPE_TINY_BLOB;
  * @requires extension zip
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\RequiresPhpExtension('zip')]
 class ExportOdsTest extends AbstractTestCase
 {
     /** @var ExportOds */
@@ -133,6 +134,7 @@ class ExportOdsTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testExportFooter(): void
     {
         $GLOBALS['ods_buffer'] = 'header';
diff --git a/test/classes/Plugins/Export/ExportOdtTest.php b/test/classes/Plugins/Export/ExportOdtTest.php
index f966289..a4d9d38 100644
--- a/test/classes/Plugins/Export/ExportOdtTest.php
+++ b/test/classes/Plugins/Export/ExportOdtTest.php
@@ -34,6 +34,7 @@ use const MYSQLI_TYPE_STRING;
  * @requires extension zip
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\RequiresPhpExtension('zip')]
 class ExportOdtTest extends AbstractTestCase
 {
     /** @var ExportOdt */
@@ -214,6 +215,7 @@ class ExportOdtTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testExportFooter(): void
     {
         $GLOBALS['odt_buffer'] = 'header';
diff --git a/test/classes/Plugins/Export/ExportPdfTest.php b/test/classes/Plugins/Export/ExportPdfTest.php
index ff0fd77..07019ed 100644
--- a/test/classes/Plugins/Export/ExportPdfTest.php
+++ b/test/classes/Plugins/Export/ExportPdfTest.php
@@ -22,6 +22,8 @@ use function array_shift;
  * @covers \PhpMyAdmin\Plugins\Export\ExportPdf
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportPdf::class)]
 class ExportPdfTest extends AbstractTestCase
 {
     /** @var ExportPdf */
diff --git a/test/classes/Plugins/Export/ExportPhparrayTest.php b/test/classes/Plugins/Export/ExportPhparrayTest.php
index e6a7876..21dea95 100644
--- a/test/classes/Plugins/Export/ExportPhparrayTest.php
+++ b/test/classes/Plugins/Export/ExportPhparrayTest.php
@@ -21,6 +21,8 @@ use function ob_start;
  * @covers \PhpMyAdmin\Plugins\Export\ExportPhparray
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportPhparray::class)]
 class ExportPhparrayTest extends AbstractTestCase
 {
     /** @var ExportPhparray */
diff --git a/test/classes/Plugins/Export/ExportSqlTest.php b/test/classes/Plugins/Export/ExportSqlTest.php
index c90cfe2..e355085 100644
--- a/test/classes/Plugins/Export/ExportSqlTest.php
+++ b/test/classes/Plugins/Export/ExportSqlTest.php
@@ -41,6 +41,8 @@ use const MYSQLI_UNIQUE_KEY_FLAG;
  * @covers \PhpMyAdmin\Plugins\Export\ExportSql
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportSql::class)]
 class ExportSqlTest extends AbstractTestCase
 {
     /** @var ExportSql */
@@ -81,6 +83,7 @@ class ExportSqlTest extends AbstractTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetPropertiesWithHideSql(): void
     {
         // test with hide structure and hide sql as true
@@ -99,6 +102,7 @@ class ExportSqlTest extends AbstractTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetProperties(): void
     {
         // test with hide structure and hide sql as false
@@ -674,6 +678,7 @@ class ExportSqlTest extends AbstractTestCase
      * @group medium
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetTableDef(): void
     {
         $GLOBALS['sql_compatibility'] = 'MSSQL';
@@ -795,6 +800,7 @@ class ExportSqlTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetTableDefWithError(): void
     {
         $GLOBALS['sql_compatibility'] = '';
@@ -926,6 +932,7 @@ class ExportSqlTest extends AbstractTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testExportStructure(): void
     {
         $GLOBALS['sql_compatibility'] = 'MSSQL';
@@ -1040,6 +1047,7 @@ class ExportSqlTest extends AbstractTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testExportData(): void
     {
         $dbi = $this->getMockBuilder(DatabaseInterface::class)
@@ -1155,6 +1163,7 @@ class ExportSqlTest extends AbstractTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testExportDataWithUpdate(): void
     {
         $dbi = $this->getMockBuilder(DatabaseInterface::class)
diff --git a/test/classes/Plugins/Export/ExportTexytextTest.php b/test/classes/Plugins/Export/ExportTexytextTest.php
index 8bb5d8d..972f901 100644
--- a/test/classes/Plugins/Export/ExportTexytextTest.php
+++ b/test/classes/Plugins/Export/ExportTexytextTest.php
@@ -26,6 +26,8 @@ use function ob_start;
  * @covers \PhpMyAdmin\Plugins\Export\ExportTexytext
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportTexytext::class)]
 class ExportTexytextTest extends AbstractTestCase
 {
     /** @var ExportTexytext */
diff --git a/test/classes/Plugins/Export/ExportXmlTest.php b/test/classes/Plugins/Export/ExportXmlTest.php
index 721c7ef..f2e4505 100644
--- a/test/classes/Plugins/Export/ExportXmlTest.php
+++ b/test/classes/Plugins/Export/ExportXmlTest.php
@@ -24,6 +24,8 @@ use function ob_start;
  * @covers \PhpMyAdmin\Plugins\Export\ExportXml
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportXml::class)]
 class ExportXmlTest extends AbstractTestCase
 {
     /** @var ExportXml */
@@ -60,6 +62,7 @@ class ExportXmlTest extends AbstractTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetProperties(): void
     {
         $method = new ReflectionMethod(ExportXml::class, 'setProperties');
@@ -142,6 +145,7 @@ class ExportXmlTest extends AbstractTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testExportHeader(): void
     {
         $GLOBALS['xml_export_functions'] = 1;
diff --git a/test/classes/Plugins/Export/ExportYamlTest.php b/test/classes/Plugins/Export/ExportYamlTest.php
index 0e15388..0f00402 100644
--- a/test/classes/Plugins/Export/ExportYamlTest.php
+++ b/test/classes/Plugins/Export/ExportYamlTest.php
@@ -21,6 +21,8 @@ use function ob_start;
  * @covers \PhpMyAdmin\Plugins\Export\ExportYaml
  * @group medium
  */
+#[\PHPUnit\Framework\Attributes\Group('medium-group')]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\ExportYaml::class)]
 class ExportYamlTest extends AbstractTestCase
 {
     /** @var ExportYaml */
diff --git a/test/classes/Plugins/Export/Helpers/TablePropertyTest.php b/test/classes/Plugins/Export/Helpers/TablePropertyTest.php
index 7425f35..14c063e 100644
--- a/test/classes/Plugins/Export/Helpers/TablePropertyTest.php
+++ b/test/classes/Plugins/Export/Helpers/TablePropertyTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Plugins\Export\Helpers\TableProperty
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Export\Helpers\TableProperty::class)]
 class TablePropertyTest extends AbstractTestCase
 {
     /** @var TableProperty */
@@ -74,6 +75,7 @@ class TablePropertyTest extends AbstractTestCase
      *
      * @dataProvider isNotNullProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('isNotNullProvider')]
     public function testIsNotNull(string $nullable, string $expected): void
     {
         $this->object->nullable = $nullable;
@@ -110,6 +112,7 @@ class TablePropertyTest extends AbstractTestCase
      *
      * @dataProvider isUniqueProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('isUniqueProvider')]
     public function testIsUnique(string $key, string $expected): void
     {
         $this->object->key = $key;
@@ -154,6 +157,7 @@ class TablePropertyTest extends AbstractTestCase
      *
      * @dataProvider getDotNetPrimitiveTypeProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('getDotNetPrimitiveTypeProvider')]
     public function testGetDotNetPrimitiveType(string $type, string $expected): void
     {
         $this->object->type = $type;
@@ -222,6 +226,7 @@ class TablePropertyTest extends AbstractTestCase
      *
      * @dataProvider getDotNetObjectTypeProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('getDotNetObjectTypeProvider')]
     public function testGetDotNetObjectType(string $type, string $expected): void
     {
         $this->object->type = $type;
diff --git a/test/classes/Plugins/Import/ImportCsvTest.php b/test/classes/Plugins/Import/ImportCsvTest.php
index 929fb51..65996c8 100644
--- a/test/classes/Plugins/Import/ImportCsvTest.php
+++ b/test/classes/Plugins/Import/ImportCsvTest.php
@@ -15,6 +15,7 @@ use function basename;
 /**
  * @covers \PhpMyAdmin\Plugins\Import\ImportCsv
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Import\ImportCsv::class)]
 class ImportCsvTest extends AbstractTestCase
 {
     /** @var ImportCsv */
@@ -76,6 +77,7 @@ class ImportCsvTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetProperties(): void
     {
         $properties = $this->object->getProperties();
@@ -88,6 +90,7 @@ class ImportCsvTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImport(): void
     {
         //$sql_query_disabled will show the import SQL detail
@@ -115,6 +118,7 @@ class ImportCsvTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoPartialImport(): void
     {
         //$sql_query_disabled will show the import SQL detail
@@ -148,6 +152,7 @@ class ImportCsvTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetPropertiesForTable(): void
     {
         $GLOBALS['plugin_param'] = 'table';
@@ -162,6 +167,7 @@ class ImportCsvTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImportNotAnalysis(): void
     {
         //$sql_query_disabled will show the import SQL detail
@@ -190,6 +196,7 @@ class ImportCsvTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImportNormal(): void
     {
         //$sql_query_disabled will show the import SQL detail
@@ -229,6 +236,7 @@ class ImportCsvTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImportSkipHeaders(): void
     {
         //$sql_query_disabled will show the import SQL detail
diff --git a/test/classes/Plugins/Import/ImportLdiTest.php b/test/classes/Plugins/Import/ImportLdiTest.php
index 067daf1..6c3d326 100644
--- a/test/classes/Plugins/Import/ImportLdiTest.php
+++ b/test/classes/Plugins/Import/ImportLdiTest.php
@@ -16,6 +16,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Plugins\Import\ImportLdi
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Import\ImportLdi::class)]
 class ImportLdiTest extends AbstractTestCase
 {
     /** @var ImportLdi */
@@ -79,6 +80,7 @@ class ImportLdiTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetProperties(): void
     {
         $properties = $this->object->getProperties();
@@ -91,6 +93,7 @@ class ImportLdiTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetPropertiesAutoLdi(): void
     {
         /**
@@ -124,6 +127,7 @@ class ImportLdiTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImport(): void
     {
         //$sql_query_disabled will show the import SQL detail
@@ -159,6 +163,7 @@ class ImportLdiTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImportInvalidFile(): void
     {
         global $import_file;
@@ -181,6 +186,7 @@ class ImportLdiTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImportLDISetting(): void
     {
         global $ldi_local_option, $ldi_replace, $ldi_ignore, $ldi_terminated,
diff --git a/test/classes/Plugins/Import/ImportMediawikiTest.php b/test/classes/Plugins/Import/ImportMediawikiTest.php
index 308068e..c9f7da7 100644
--- a/test/classes/Plugins/Import/ImportMediawikiTest.php
+++ b/test/classes/Plugins/Import/ImportMediawikiTest.php
@@ -14,6 +14,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Plugins\Import\ImportMediawiki
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Import\ImportMediawiki::class)]
 class ImportMediawikiTest extends AbstractTestCase
 {
     /** @var ImportMediawiki */
@@ -57,6 +58,7 @@ class ImportMediawikiTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetProperties(): void
     {
         $properties = $this->object->getProperties();
@@ -72,6 +74,7 @@ class ImportMediawikiTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImport(): void
     {
         //$import_notice will show the import detail result
@@ -119,6 +122,7 @@ class ImportMediawikiTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImportWithEmptyTable(): void
     {
         //$import_notice will show the import detail result
diff --git a/test/classes/Plugins/Import/ImportOdsTest.php b/test/classes/Plugins/Import/ImportOdsTest.php
index fa9a727..ca9db62 100644
--- a/test/classes/Plugins/Import/ImportOdsTest.php
+++ b/test/classes/Plugins/Import/ImportOdsTest.php
@@ -15,6 +15,7 @@ use function str_repeat;
  * @covers \PhpMyAdmin\Plugins\Import\ImportOds
  * @requires extension zip
  */
+#[\PHPUnit\Framework\Attributes\RequiresPhpExtension('zip')]
 class ImportOdsTest extends AbstractTestCase
 {
     /** @var ImportOds */
@@ -63,6 +64,7 @@ class ImportOdsTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetProperties(): void
     {
         $properties = $this->object->getProperties();
@@ -76,6 +78,7 @@ class ImportOdsTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImport(): void
     {
         //$sql_query_disabled will show the import SQL detail
@@ -134,6 +137,8 @@ class ImportOdsTest extends AbstractTestCase
      * @dataProvider dataProviderOdsEmptyRows
      * @requires extension simplexml
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderOdsEmptyRows')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('simplexml')]
     public function testDoImportDataset2(bool $odsEmptyRowsMode): void
     {
         //$sql_query_disabled will show the import SQL detail
diff --git a/test/classes/Plugins/Import/ImportShpTest.php b/test/classes/Plugins/Import/ImportShpTest.php
index 321efff..d54ed66 100644
--- a/test/classes/Plugins/Import/ImportShpTest.php
+++ b/test/classes/Plugins/Import/ImportShpTest.php
@@ -16,6 +16,7 @@ use function extension_loaded;
  * @covers \PhpMyAdmin\Plugins\Import\ImportShp
  * @requires extension zip
  */
+#[\PHPUnit\Framework\Attributes\RequiresPhpExtension('zip')]
 class ImportShpTest extends AbstractTestCase
 {
     /** @var ImportShp */
@@ -86,6 +87,7 @@ class ImportShpTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetProperties(): void
     {
         $properties = $this->object->getProperties();
@@ -101,6 +103,7 @@ class ImportShpTest extends AbstractTestCase
      * @group medium
      * @group 32bit-incompatible
      */
+    #[\PHPUnit\Framework\Attributes\Group('32bit-incompatible')]
     public function testImportOsm(): void
     {
         //$sql_query_disabled will show the import SQL detail
@@ -133,6 +136,7 @@ class ImportShpTest extends AbstractTestCase
      * @group medium
      * @group 32bit-incompatible
      */
+    #[\PHPUnit\Framework\Attributes\Group('32bit-incompatible')]
     public function testDoImport(): void
     {
         //$sql_query_disabled will show the import SQL detail
diff --git a/test/classes/Plugins/Import/ImportSqlTest.php b/test/classes/Plugins/Import/ImportSqlTest.php
index 352f133..942f10c 100644
--- a/test/classes/Plugins/Import/ImportSqlTest.php
+++ b/test/classes/Plugins/Import/ImportSqlTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Plugins\Import\ImportSql
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Import\ImportSql::class)]
 class ImportSqlTest extends AbstractTestCase
 {
     /** @var ImportSql */
@@ -56,6 +57,7 @@ class ImportSqlTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testDoImport(): void
     {
         //$sql_query_disabled will show the import SQL detail
diff --git a/test/classes/Plugins/Import/ImportXmlTest.php b/test/classes/Plugins/Import/ImportXmlTest.php
index 65f261f..b391371 100644
--- a/test/classes/Plugins/Import/ImportXmlTest.php
+++ b/test/classes/Plugins/Import/ImportXmlTest.php
@@ -16,6 +16,8 @@ use function __;
  * @requires extension xml
  * @requires extension xmlwriter
  */
+#[\PHPUnit\Framework\Attributes\RequiresPhpExtension('xml')]
+#[\PHPUnit\Framework\Attributes\RequiresPhpExtension('xmlwriter')]
 class ImportXmlTest extends AbstractTestCase
 {
     /** @var ImportXml */
@@ -60,6 +62,7 @@ class ImportXmlTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetProperties(): void
     {
         $properties = $this->object->getProperties();
@@ -76,6 +79,8 @@ class ImportXmlTest extends AbstractTestCase
      * @group medium
      * @requires extension simplexml
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('simplexml')]
     public function testDoImport(): void
     {
         //$import_notice will show the import detail result
diff --git a/test/classes/Plugins/Schema/DiaRelationSchemaTest.php b/test/classes/Plugins/Schema/DiaRelationSchemaTest.php
index 0dea54e..5639331 100644
--- a/test/classes/Plugins/Schema/DiaRelationSchemaTest.php
+++ b/test/classes/Plugins/Schema/DiaRelationSchemaTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
  * @covers \PhpMyAdmin\Plugins\Schema\Dia\DiaRelationSchema
  * @requires extension xmlwriter
  */
+#[\PHPUnit\Framework\Attributes\RequiresPhpExtension('xmlwriter')]
 class DiaRelationSchemaTest extends AbstractTestCase
 {
     /** @var DiaRelationSchema */
@@ -57,6 +58,7 @@ class DiaRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetProperty(): void
     {
         self::assertSame(33, $this->object->getPageNumber());
diff --git a/test/classes/Plugins/Schema/EpsRelationSchemaTest.php b/test/classes/Plugins/Schema/EpsRelationSchemaTest.php
index 1a0cdf5..c3dd1e7 100644
--- a/test/classes/Plugins/Schema/EpsRelationSchemaTest.php
+++ b/test/classes/Plugins/Schema/EpsRelationSchemaTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Plugins\Schema\Eps\EpsRelationSchema
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Schema\Eps\EpsRelationSchema::class)]
 class EpsRelationSchemaTest extends AbstractTestCase
 {
     /** @var EpsRelationSchema */
@@ -57,6 +58,7 @@ class EpsRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testConstructor(): void
     {
         self::assertSame(33, $this->object->getPageNumber());
@@ -72,6 +74,7 @@ class EpsRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetPageNumber(): void
     {
         $this->object->setPageNumber(33);
diff --git a/test/classes/Plugins/Schema/ExportRelationSchemaTest.php b/test/classes/Plugins/Schema/ExportRelationSchemaTest.php
index a769d57..c88c9c1 100644
--- a/test/classes/Plugins/Schema/ExportRelationSchemaTest.php
+++ b/test/classes/Plugins/Schema/ExportRelationSchemaTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Plugins\Schema\ExportRelationSchema
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Schema\ExportRelationSchema::class)]
 class ExportRelationSchemaTest extends AbstractTestCase
 {
     /** @var ExportRelationSchema */
@@ -41,6 +42,7 @@ class ExportRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetPageNumber(): void
     {
         $this->object->setPageNumber(33);
@@ -52,6 +54,7 @@ class ExportRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetShowColor(): void
     {
         $this->object->setShowColor(true);
@@ -65,6 +68,7 @@ class ExportRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetOrientation(): void
     {
         $this->object->setOrientation('P');
@@ -78,6 +82,7 @@ class ExportRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetTableDimension(): void
     {
         $this->object->setTableDimension(true);
@@ -91,6 +96,7 @@ class ExportRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetPaper(): void
     {
         $this->object->setPaper('A5');
@@ -104,6 +110,7 @@ class ExportRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetAllTablesSameWidth(): void
     {
         $this->object->setAllTablesSameWidth(true);
@@ -117,6 +124,7 @@ class ExportRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testSetShowKeys(): void
     {
         $this->object->setShowKeys(true);
diff --git a/test/classes/Plugins/Schema/PdfRelationSchemaTest.php b/test/classes/Plugins/Schema/PdfRelationSchemaTest.php
index 1223046..23c3813 100644
--- a/test/classes/Plugins/Schema/PdfRelationSchemaTest.php
+++ b/test/classes/Plugins/Schema/PdfRelationSchemaTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Plugins\Schema\Pdf\PdfRelationSchema
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Schema\Pdf\PdfRelationSchema::class)]
 class PdfRelationSchemaTest extends AbstractTestCase
 {
     /** @var PdfRelationSchema */
@@ -60,6 +61,7 @@ class PdfRelationSchemaTest extends AbstractTestCase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testConstructor(): void
     {
         self::assertSame(33, $this->object->getPageNumber());
diff --git a/test/classes/Plugins/Schema/SvgRelationSchemaTest.php b/test/classes/Plugins/Schema/SvgRelationSchemaTest.php
index 13f7cf0..cc0b735 100644
--- a/test/classes/Plugins/Schema/SvgRelationSchemaTest.php
+++ b/test/classes/Plugins/Schema/SvgRelationSchemaTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
  * @covers \PhpMyAdmin\Plugins\Schema\Svg\SvgRelationSchema
  * @requires extension xmlwriter
  */
+#[\PHPUnit\Framework\Attributes\RequiresPhpExtension('xmlwriter')]
 class SvgRelationSchemaTest extends AbstractTestCase
 {
     /** @var SvgRelationSchema */
@@ -61,6 +62,7 @@ class SvgRelationSchemaTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testConstructor(): void
     {
         self::assertSame(33, $this->object->getPageNumber());
diff --git a/test/classes/Plugins/Transformations/TransformationPluginsTest.php b/test/classes/Plugins/Transformations/TransformationPluginsTest.php
index 6034627..2cbfefb 100644
--- a/test/classes/Plugins/Transformations/TransformationPluginsTest.php
+++ b/test/classes/Plugins/Transformations/TransformationPluginsTest.php
@@ -56,6 +56,25 @@ use const MYSQLI_TYPE_TINY;
  * @covers \PhpMyAdmin\Plugins\Transformations\Text_Plain_PreApPend
  * @covers \PhpMyAdmin\Plugins\Transformations\Text_Plain_Substring
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\TransformationsPlugin::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Input\Image_JPEG_Upload::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Input\Text_Plain_FileUpload::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Input\Text_Plain_Iptolong::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Input\Text_Plain_RegexValidation::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Output\Application_Octetstream_Download::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Output\Application_Octetstream_Hex::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Output\Image_JPEG_Inline::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Output\Image_JPEG_Link::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Output\Image_PNG_Inline::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Output\Text_Plain_Dateformat::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Output\Text_Plain_External::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Output\Text_Plain_Formatted::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Output\Text_Plain_Imagelink::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Output\Text_Plain_Sql::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Text_Plain_Link::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Text_Plain_Longtoipv4::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Text_Plain_PreApPend::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\Transformations\Text_Plain_Substring::class)]
 class TransformationPluginsTest extends AbstractTestCase
 {
     /**
@@ -728,6 +747,8 @@ class TransformationPluginsTest extends AbstractTestCase
      * @dataProvider multiDataProvider
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('multiDataProvider')]
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetMulti($object, string $method, $expected, array $args = []): void
     {
         if (! method_exists($object, $method)) {
@@ -1280,6 +1301,8 @@ class TransformationPluginsTest extends AbstractTestCase
      * @dataProvider transformationDataProvider
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('transformationDataProvider')]
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testTransformation(
         $object,
         array $applyArgs,
diff --git a/test/classes/Plugins/TwoFactor/KeyTest.php b/test/classes/Plugins/TwoFactor/KeyTest.php
index 2097484..1d5e087 100644
--- a/test/classes/Plugins/TwoFactor/KeyTest.php
+++ b/test/classes/Plugins/TwoFactor/KeyTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\TwoFactor;
 /**
  * @covers \PhpMyAdmin\Plugins\TwoFactor\Key
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\TwoFactor\Key::class)]
 class KeyTest extends AbstractTestCase
 {
     public function testGetRegistrations(): void
diff --git a/test/classes/Plugins/TwoFactor/WebAuthnTest.php b/test/classes/Plugins/TwoFactor/WebAuthnTest.php
index 14acd75..14c1088 100644
--- a/test/classes/Plugins/TwoFactor/WebAuthnTest.php
+++ b/test/classes/Plugins/TwoFactor/WebAuthnTest.php
@@ -21,6 +21,9 @@ use function json_decode;
  * @covers \PhpMyAdmin\Plugins\TwoFactorPlugin
  * @covers \PhpMyAdmin\WebAuthn\WebAuthnException
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\TwoFactor\WebAuthn::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins\TwoFactorPlugin::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\WebAuthn\WebAuthnException::class)]
 class WebAuthnTest extends AbstractTestCase
 {
     public function testIdNameAndDescription(): void
diff --git a/test/classes/PluginsTest.php b/test/classes/PluginsTest.php
index 6d0c2f4..2cc782f 100644
--- a/test/classes/PluginsTest.php
+++ b/test/classes/PluginsTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Plugins;
 /**
  * @covers \PhpMyAdmin\Plugins
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Plugins::class)]
 class PluginsTest extends AbstractTestCase
 {
     public function testGetExport(): void
@@ -48,6 +49,7 @@ class PluginsTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGetDefault
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetDefault')]
     public function testGetDefault(
         string $expected,
         $actualConfig,
diff --git a/test/classes/ProfilingTest.php b/test/classes/ProfilingTest.php
index efe30ff..cbed2ea 100644
--- a/test/classes/ProfilingTest.php
+++ b/test/classes/ProfilingTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Utils\SessionCache;
 /**
  * @covers \PhpMyAdmin\Profiling
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Profiling::class)]
 class ProfilingTest extends AbstractTestCase
 {
     public function testIsSupported(): void
diff --git a/test/classes/Properties/Options/Groups/OptionsPropertyMainGroupTest.php b/test/classes/Properties/Options/Groups/OptionsPropertyMainGroupTest.php
index c6361e5..5f2e26a 100644
--- a/test/classes/Properties/Options/Groups/OptionsPropertyMainGroupTest.php
+++ b/test/classes/Properties/Options/Groups/OptionsPropertyMainGroupTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Properties\Options\Groups\OptionsPropertyMainGroup
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Properties\Options\Groups\OptionsPropertyMainGroup::class)]
 class OptionsPropertyMainGroupTest extends AbstractTestCase
 {
     /** @var OptionsPropertyMainGroup */
diff --git a/test/classes/Properties/Options/Groups/OptionsPropertyRootGroupTest.php b/test/classes/Properties/Options/Groups/OptionsPropertyRootGroupTest.php
index 6d70322..2e3fb02 100644
--- a/test/classes/Properties/Options/Groups/OptionsPropertyRootGroupTest.php
+++ b/test/classes/Properties/Options/Groups/OptionsPropertyRootGroupTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Properties\Options\Groups\OptionsPropertyRootGroup
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Properties\Options\Groups\OptionsPropertyRootGroup::class)]
 class OptionsPropertyRootGroupTest extends AbstractTestCase
 {
     /** @var OptionsPropertyRootGroup */
diff --git a/test/classes/Properties/Options/Groups/OptionsPropertySubgroupTest.php b/test/classes/Properties/Options/Groups/OptionsPropertySubgroupTest.php
index d64bcc9..4292bf3 100644
--- a/test/classes/Properties/Options/Groups/OptionsPropertySubgroupTest.php
+++ b/test/classes/Properties/Options/Groups/OptionsPropertySubgroupTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Properties\Options\Groups\OptionsPropertySubgroup
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Properties\Options\Groups\OptionsPropertySubgroup::class)]
 class OptionsPropertySubgroupTest extends AbstractTestCase
 {
     /** @var OptionsPropertySubgroup */
diff --git a/test/classes/Properties/Options/Items/PropertyItemsTest.php b/test/classes/Properties/Options/Items/PropertyItemsTest.php
index df20b26..d675106 100644
--- a/test/classes/Properties/Options/Items/PropertyItemsTest.php
+++ b/test/classes/Properties/Options/Items/PropertyItemsTest.php
@@ -16,6 +16,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class PropertyItemsTest extends AbstractTestCase
 {
     public function testBoolText(): void
diff --git a/test/classes/Properties/Options/OptionsPropertyGroupTest.php b/test/classes/Properties/Options/OptionsPropertyGroupTest.php
index 94d7dd5..efac431 100644
--- a/test/classes/Properties/Options/OptionsPropertyGroupTest.php
+++ b/test/classes/Properties/Options/OptionsPropertyGroupTest.php
@@ -12,6 +12,7 @@ use ReflectionProperty;
 /**
  * @covers \PhpMyAdmin\Properties\Options\OptionsPropertyGroup
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Properties\Options\OptionsPropertyGroup::class)]
 class OptionsPropertyGroupTest extends AbstractTestCase
 {
     /** @var OptionsPropertyGroup|MockObject */
diff --git a/test/classes/Properties/Options/OptionsPropertyItemTest.php b/test/classes/Properties/Options/OptionsPropertyItemTest.php
index 471c49b..5c4c355 100644
--- a/test/classes/Properties/Options/OptionsPropertyItemTest.php
+++ b/test/classes/Properties/Options/OptionsPropertyItemTest.php
@@ -11,6 +11,7 @@ use PHPUnit\Framework\MockObject\MockObject;
 /**
  * @covers \PhpMyAdmin\Properties\Options\OptionsPropertyItem
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Properties\Options\OptionsPropertyItem::class)]
 class OptionsPropertyItemTest extends AbstractTestCase
 {
     /** @var OptionsPropertyItem|MockObject */
diff --git a/test/classes/Properties/Options/OptionsPropertyOneItemTest.php b/test/classes/Properties/Options/OptionsPropertyOneItemTest.php
index 8c8f156..c6fa7db 100644
--- a/test/classes/Properties/Options/OptionsPropertyOneItemTest.php
+++ b/test/classes/Properties/Options/OptionsPropertyOneItemTest.php
@@ -11,6 +11,7 @@ use PHPUnit\Framework\MockObject\MockObject;
 /**
  * @covers \PhpMyAdmin\Properties\Options\OptionsPropertyOneItem
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Properties\Options\OptionsPropertyOneItem::class)]
 class OptionsPropertyOneItemTest extends AbstractTestCase
 {
     /** @var OptionsPropertyOneItem|MockObject  */
diff --git a/test/classes/Properties/Plugins/ExportPluginPropertiesTest.php b/test/classes/Properties/Plugins/ExportPluginPropertiesTest.php
index ff5b0b9..608bcf6 100644
--- a/test/classes/Properties/Plugins/ExportPluginPropertiesTest.php
+++ b/test/classes/Properties/Plugins/ExportPluginPropertiesTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Properties\Plugins\ExportPluginProperties;
 /**
  * @covers \PhpMyAdmin\Properties\Plugins\ExportPluginProperties
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Properties\Plugins\ExportPluginProperties::class)]
 class ExportPluginPropertiesTest extends ImportPluginPropertiesTest
 {
     /** @var ExportPluginProperties */
diff --git a/test/classes/Properties/Plugins/ImportPluginPropertiesTest.php b/test/classes/Properties/Plugins/ImportPluginPropertiesTest.php
index 7285228..f8da858 100644
--- a/test/classes/Properties/Plugins/ImportPluginPropertiesTest.php
+++ b/test/classes/Properties/Plugins/ImportPluginPropertiesTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Properties\Plugins\ImportPluginProperties
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Properties\Plugins\ImportPluginProperties::class)]
 class ImportPluginPropertiesTest extends AbstractTestCase
 {
     /** @var ImportPluginProperties */
diff --git a/test/classes/Properties/Plugins/PluginPropertyItemTest.php b/test/classes/Properties/Plugins/PluginPropertyItemTest.php
index d2bca8d..746bb7c 100644
--- a/test/classes/Properties/Plugins/PluginPropertyItemTest.php
+++ b/test/classes/Properties/Plugins/PluginPropertyItemTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Properties\Plugins\PluginPropertyItem
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Properties\Plugins\PluginPropertyItem::class)]
 class PluginPropertyItemTest extends AbstractTestCase
 {
     /** @var PluginPropertyItem */
diff --git a/test/classes/Properties/PropertyItemTest.php b/test/classes/Properties/PropertyItemTest.php
index 322926b..6ace3d8 100644
--- a/test/classes/Properties/PropertyItemTest.php
+++ b/test/classes/Properties/PropertyItemTest.php
@@ -11,6 +11,7 @@ use PHPUnit\Framework\MockObject\MockObject;
 /**
  * @covers \PhpMyAdmin\Properties\PropertyItem
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Properties\PropertyItem::class)]
 class PropertyItemTest extends AbstractTestCase
 {
     /** @var PropertyItem|MockObject */
diff --git a/test/classes/Query/CompatibilityTest.php b/test/classes/Query/CompatibilityTest.php
index 1f056b1..8ad64da 100644
--- a/test/classes/Query/CompatibilityTest.php
+++ b/test/classes/Query/CompatibilityTest.php
@@ -12,11 +12,13 @@ use PHPUnit\Framework\TestCase;
 /**
  * @covers \PhpMyAdmin\Query\Compatibility
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Query\Compatibility::class)]
 class CompatibilityTest extends TestCase
 {
     /**
      * @dataProvider providerForTestHasAccountLocking
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestHasAccountLocking')]
     public function testHasAccountLocking(bool $expected, bool $isMariaDb, int $version): void
     {
         self::assertSame($expected, Compatibility::hasAccountLocking($isMariaDb, $version));
@@ -41,6 +43,7 @@ class CompatibilityTest extends TestCase
     /**
      * @dataProvider providerForTestIsUUIDSupported
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestIsUUIDSupported')]
     public function testIsUUIDSupported(bool $expected, bool $isMariaDb, int $version): void
     {
         $dbiStub = $this->createStub(DatabaseInterface::class);
@@ -66,6 +69,7 @@ class CompatibilityTest extends TestCase
     }
 
     /** @dataProvider showBinLogStatusProvider */
+    #[\PHPUnit\Framework\Attributes\DataProvider('showBinLogStatusProvider')]
     public function testGetShowBinLogStatusStmt(string $serverName, int $version, string $expected): void
     {
         $dbal = self::createStub(DbalInterface::class);
diff --git a/test/classes/Query/GeneratorTest.php b/test/classes/Query/GeneratorTest.php
index 1590c2d..de7e7b5 100644
--- a/test/classes/Query/GeneratorTest.php
+++ b/test/classes/Query/GeneratorTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Query\Generator
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Query\Generator::class)]
 class GeneratorTest extends AbstractTestCase
 {
     public function testGetColumnsSql(): void
diff --git a/test/classes/ReplicationGuiTest.php b/test/classes/ReplicationGuiTest.php
index f1fe9cb..83e01a8 100644
--- a/test/classes/ReplicationGuiTest.php
+++ b/test/classes/ReplicationGuiTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Template;
 /**
  * @covers \PhpMyAdmin\ReplicationGui
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ReplicationGui::class)]
 class ReplicationGuiTest extends AbstractTestCase
 {
     /**
@@ -52,6 +53,7 @@ class ReplicationGuiTest extends AbstractTestCase
     /**
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetHtmlForPrimaryReplication(): void
     {
         $html = $this->replicationGui->getHtmlForPrimaryReplication();
diff --git a/test/classes/ResponseRendererTest.php b/test/classes/ResponseRendererTest.php
index c855a1e..dc20afe 100644
--- a/test/classes/ResponseRendererTest.php
+++ b/test/classes/ResponseRendererTest.php
@@ -12,6 +12,7 @@ use ReflectionProperty;
 /**
  * @covers \PhpMyAdmin\ResponseRenderer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ResponseRenderer::class)]
 class ResponseRendererTest extends AbstractTestCase
 {
     protected function setUp(): void
@@ -28,6 +29,8 @@ class ResponseRendererTest extends AbstractTestCase
      * @runInSeparateProcess
      * @preserveGlobalState disabled
      */
+    #[\PHPUnit\Framework\Attributes\RunInSeparateProcess]
+    #[\PHPUnit\Framework\Attributes\PreserveGlobalState(false)]
     public function testSetAjax(): void
     {
         $_REQUEST = [];
diff --git a/test/classes/RoutingTest.php b/test/classes/RoutingTest.php
index 6700809..fe74aea 100644
--- a/test/classes/RoutingTest.php
+++ b/test/classes/RoutingTest.php
@@ -23,6 +23,7 @@ use const TEST_PATH;
 /**
  * @covers \PhpMyAdmin\Routing
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Routing::class)]
 class RoutingTest extends AbstractTestCase
 {
     public function testGetDispatcherWithDevEnv(): void
diff --git a/test/classes/SanitizeTest.php b/test/classes/SanitizeTest.php
index f99c8db..dfd005f 100644
--- a/test/classes/SanitizeTest.php
+++ b/test/classes/SanitizeTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Sanitize;
 /**
  * @covers \PhpMyAdmin\Sanitize
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Sanitize::class)]
 class SanitizeTest extends AbstractTestCase
 {
     /**
@@ -57,6 +58,7 @@ class SanitizeTest extends AbstractTestCase
      *
      * @dataProvider docLinks
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('docLinks')]
     public function testDoc(string $link, string $expected): void
     {
         self::assertSame(
@@ -173,6 +175,7 @@ class SanitizeTest extends AbstractTestCase
      *
      * @dataProvider variables
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('variables')]
     public function testGetJsValue(string $key, $value, string $expected): void
     {
         self::assertSame($expected, Sanitize::getJsValue($key, $value));
@@ -248,6 +251,7 @@ class SanitizeTest extends AbstractTestCase
      *
      * @dataProvider escapeDataProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('escapeDataProvider')]
     public function testEscapeJsString(string $target, string $source): void
     {
         self::assertSame($target, Sanitize::escapeJsString($source));
@@ -423,6 +427,7 @@ class SanitizeTest extends AbstractTestCase
      *
      * @dataProvider dataProviderCheckLinks
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderCheckLinks')]
     public function testCheckLink(bool $expected, string $url, bool $http, bool $other): void
     {
         self::assertSame($expected, Sanitize::checkLink($url, $http, $other));
diff --git a/test/classes/ScriptsTest.php b/test/classes/ScriptsTest.php
index 709d147..b0d7fdb 100644
--- a/test/classes/ScriptsTest.php
+++ b/test/classes/ScriptsTest.php
@@ -13,6 +13,7 @@ use function rawurlencode;
 /**
  * @covers \PhpMyAdmin\Scripts
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Scripts::class)]
 class ScriptsTest extends AbstractTestCase
 {
     /** @var Scripts */
diff --git a/test/classes/Server/PluginTest.php b/test/classes/Server/PluginTest.php
index e2d364b..b3bc248 100644
--- a/test/classes/Server/PluginTest.php
+++ b/test/classes/Server/PluginTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Server\Plugin
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Server\Plugin::class)]
 class PluginTest extends AbstractTestCase
 {
     public function testFromState(): Plugin
@@ -53,6 +54,7 @@ class PluginTest extends AbstractTestCase
      *
      * @depends testFromState
      */
+    #[\PHPUnit\Framework\Attributes\Depends('testFromState')]
     public function testToArray(Plugin $plugin): void
     {
         self::assertSame([
diff --git a/test/classes/Server/PluginsTest.php b/test/classes/Server/PluginsTest.php
index b9aff1b..b6b1192 100644
--- a/test/classes/Server/PluginsTest.php
+++ b/test/classes/Server/PluginsTest.php
@@ -13,6 +13,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Server\Plugins
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Server\Plugins::class)]
 class PluginsTest extends AbstractTestCase
 {
     /** @var Plugins */
diff --git a/test/classes/Server/Privileges/AccountLockingTest.php b/test/classes/Server/Privileges/AccountLockingTest.php
index f8102f2..3eeea05 100644
--- a/test/classes/Server/Privileges/AccountLockingTest.php
+++ b/test/classes/Server/Privileges/AccountLockingTest.php
@@ -12,11 +12,13 @@ use Throwable;
 /**
  * @covers \PhpMyAdmin\Server\Privileges\AccountLocking
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Server\Privileges\AccountLocking::class)]
 class AccountLockingTest extends TestCase
 {
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testLockWithValidAccount(): void
     {
         $dbi = $this->createMock(DatabaseInterface::class);
@@ -38,6 +40,7 @@ class AccountLockingTest extends TestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testLockWithInvalidAccount(): void
     {
         $dbi = $this->createMock(DatabaseInterface::class);
@@ -80,6 +83,7 @@ class AccountLockingTest extends TestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testUnlockWithValidAccount(): void
     {
         $dbi = $this->createMock(DatabaseInterface::class);
@@ -101,6 +105,7 @@ class AccountLockingTest extends TestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testUnlockWithInvalidAccount(): void
     {
         $dbi = $this->createMock(DatabaseInterface::class);
diff --git a/test/classes/Server/PrivilegesTest.php b/test/classes/Server/PrivilegesTest.php
index b88331e..0c72573 100644
--- a/test/classes/Server/PrivilegesTest.php
+++ b/test/classes/Server/PrivilegesTest.php
@@ -33,6 +33,7 @@ use function preg_quote;
 /**
  * @covers \PhpMyAdmin\Server\Privileges
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Server\Privileges::class)]
 class PrivilegesTest extends AbstractTestCase
 {
     /** @var Privileges $serverPrivileges */
@@ -633,6 +634,7 @@ class PrivilegesTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetHtmlToDisplayPrivilegesTable(): void
     {
         $GLOBALS['hostname'] = 'hostname';
@@ -934,6 +936,7 @@ class PrivilegesTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetHtmlForAddUser(): void
     {
         $dbi_old = $GLOBALS['dbi'];
@@ -1634,6 +1637,7 @@ class PrivilegesTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetUserPrivileges(): void
     {
         $mysqliResultStub = $this->createMock(mysqli_result::class);
diff --git a/test/classes/Server/SelectTest.php b/test/classes/Server/SelectTest.php
index 3c9a9bc..f4bc294 100644
--- a/test/classes/Server/SelectTest.php
+++ b/test/classes/Server/SelectTest.php
@@ -13,6 +13,7 @@ use function __;
 /**
  * @covers \PhpMyAdmin\Server\Select
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Server\Select::class)]
 class SelectTest extends AbstractTestCase
 {
     /**
@@ -64,6 +65,7 @@ class SelectTest extends AbstractTestCase
      *
      * @dataProvider renderDataProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('renderDataProvider')]
     public function testRender(bool $not_only_options, bool $omit_fieldset): void
     {
         if ($not_only_options) {
diff --git a/test/classes/Server/SysInfo/SysInfoTest.php b/test/classes/Server/SysInfo/SysInfoTest.php
index 09b62a5..8d24a98 100644
--- a/test/classes/Server/SysInfo/SysInfoTest.php
+++ b/test/classes/Server/SysInfo/SysInfoTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Server\SysInfo\SysInfo
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Server\SysInfo\SysInfo::class)]
 class SysInfoTest extends AbstractTestCase
 {
     /**
@@ -21,6 +22,7 @@ class SysInfoTest extends AbstractTestCase
      *
      * @dataProvider sysInfoOsProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('sysInfoOsProvider')]
     public function testGetSysInfoOs(string $os, string $expected): void
     {
         self::assertSame($expected, SysInfo::getOs($os));
diff --git a/test/classes/Setup/ConfigGeneratorTest.php b/test/classes/Setup/ConfigGeneratorTest.php
index 62fa39d..30caee1 100644
--- a/test/classes/Setup/ConfigGeneratorTest.php
+++ b/test/classes/Setup/ConfigGeneratorTest.php
@@ -20,6 +20,7 @@ use const SODIUM_CRYPTO_SECRETBOX_KEYBYTES;
 /**
  * @covers \PhpMyAdmin\Setup\ConfigGenerator
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Setup\ConfigGenerator::class)]
 class ConfigGeneratorTest extends AbstractTestCase
 {
     /**
@@ -27,6 +28,7 @@ class ConfigGeneratorTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testGetConfigFile(): void
     {
         unset($_SESSION['eol']);
diff --git a/test/classes/Setup/FormProcessingTest.php b/test/classes/Setup/FormProcessingTest.php
index fe748e0..bc70544 100644
--- a/test/classes/Setup/FormProcessingTest.php
+++ b/test/classes/Setup/FormProcessingTest.php
@@ -14,6 +14,7 @@ use function ob_start;
 /**
  * @covers \PhpMyAdmin\Setup\FormProcessing
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Setup\FormProcessing::class)]
 class FormProcessingTest extends AbstractNetworkTestCase
 {
     /**
@@ -35,6 +36,7 @@ class FormProcessingTest extends AbstractNetworkTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testProcessFormSet(): void
     {
         $this->mockResponse(
diff --git a/test/classes/Setup/IndexTest.php b/test/classes/Setup/IndexTest.php
index 6a53b53..d15976a 100644
--- a/test/classes/Setup/IndexTest.php
+++ b/test/classes/Setup/IndexTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Setup\Index
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Setup\Index::class)]
 class IndexTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/SqlQueryFormTest.php b/test/classes/SqlQueryFormTest.php
index 22adb1d..896500c 100644
--- a/test/classes/SqlQueryFormTest.php
+++ b/test/classes/SqlQueryFormTest.php
@@ -18,6 +18,7 @@ use function htmlspecialchars;
 /**
  * @covers \PhpMyAdmin\SqlQueryForm
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\SqlQueryForm::class)]
 class SqlQueryFormTest extends AbstractTestCase
 {
     /** @var SqlQueryForm */
diff --git a/test/classes/SqlTest.php b/test/classes/SqlTest.php
index e0ad892..f3a899e 100644
--- a/test/classes/SqlTest.php
+++ b/test/classes/SqlTest.php
@@ -22,6 +22,7 @@ use const MYSQLI_TYPE_VAR_STRING;
 /**
  * @covers \PhpMyAdmin\Sql
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Sql::class)]
 class SqlTest extends AbstractTestCase
 {
     /** @var Sql */
@@ -543,6 +544,7 @@ class SqlTest extends AbstractTestCase
     /**
      * @dataProvider dataProviderCountQueryResults
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderCountQueryResults')]
     public function testCountQueryResults(
         ?string $sqlQuery,
         array $sessionTmpVal,
diff --git a/test/classes/StorageEngineTest.php b/test/classes/StorageEngineTest.php
index a9b36af..ba12f08 100644
--- a/test/classes/StorageEngineTest.php
+++ b/test/classes/StorageEngineTest.php
@@ -25,6 +25,7 @@ use function json_encode;
 /**
  * @covers \PhpMyAdmin\StorageEngine
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\StorageEngine::class)]
 class StorageEngineTest extends AbstractTestCase
 {
     /** @var StorageEngine|MockObject */
@@ -105,6 +106,7 @@ class StorageEngineTest extends AbstractTestCase
      *
      * @dataProvider providerGetEngine
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetEngine')]
     public function testGetEngine(string $expectedClass, string $engineName): void
     {
         $actual = StorageEngine::getEngine($engineName);
diff --git a/test/classes/SystemDatabaseTest.php b/test/classes/SystemDatabaseTest.php
index 8cb7f9a..2f2e51c 100644
--- a/test/classes/SystemDatabaseTest.php
+++ b/test/classes/SystemDatabaseTest.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Tests\Stubs\DummyResult;
 /**
  * @covers \PhpMyAdmin\SystemDatabase
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\SystemDatabase::class)]
 class SystemDatabaseTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/Table/ColumnsDefinitionTest.php b/test/classes/Table/ColumnsDefinitionTest.php
index 455b8d1..25dfc39 100644
--- a/test/classes/Table/ColumnsDefinitionTest.php
+++ b/test/classes/Table/ColumnsDefinitionTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Table\ColumnsDefinition
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Table\ColumnsDefinition::class)]
 class ColumnsDefinitionTest extends AbstractTestCase
 {
     /**
@@ -22,6 +23,7 @@ class ColumnsDefinitionTest extends AbstractTestCase
      *
      * @dataProvider providerColumnMetaDefault
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerColumnMetaDefault')]
     public function testDecorateColumnMetaDefault(array $columnMeta, array $expected): void
     {
         $result = ColumnsDefinition::decorateColumnMetaDefault($columnMeta);
diff --git a/test/classes/Table/IndexesTest.php b/test/classes/Table/IndexesTest.php
index 694190f..b823e1e 100644
--- a/test/classes/Table/IndexesTest.php
+++ b/test/classes/Table/IndexesTest.php
@@ -16,6 +16,7 @@ use PhpMyAdmin\Tests\Stubs\ResponseRenderer as ResponseStub;
 /**
  * @covers \PhpMyAdmin\Table\Indexes
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Table\Indexes::class)]
 class IndexesTest extends AbstractTestCase
 {
     protected function setUp(): void
diff --git a/test/classes/Table/Maintenance/MessageTest.php b/test/classes/Table/Maintenance/MessageTest.php
index 8af8131..320f1ba 100644
--- a/test/classes/Table/Maintenance/MessageTest.php
+++ b/test/classes/Table/Maintenance/MessageTest.php
@@ -10,6 +10,7 @@ use PHPUnit\Framework\TestCase;
 /**
  * @covers \PhpMyAdmin\Table\Maintenance\Message
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Table\Maintenance\Message::class)]
 class MessageTest extends TestCase
 {
     /**
@@ -17,6 +18,7 @@ class MessageTest extends TestCase
      *
      * @dataProvider providerForTestFromArray
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestFromArray')]
     public function testFromArray(array $row, string $table, string $operation, string $type, string $text): void
     {
         $message = Message::fromArray($row);
diff --git a/test/classes/Table/SearchTest.php b/test/classes/Table/SearchTest.php
index f2fd205..dccd4c7 100644
--- a/test/classes/Table/SearchTest.php
+++ b/test/classes/Table/SearchTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\AbstractTestCase;
 /**
  * @covers \PhpMyAdmin\Table\Search
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Table\Search::class)]
 class SearchTest extends AbstractTestCase
 {
     /** @var Search */
diff --git a/test/classes/TableTest.php b/test/classes/TableTest.php
index d849871..0ff4019 100644
--- a/test/classes/TableTest.php
+++ b/test/classes/TableTest.php
@@ -16,6 +16,7 @@ use stdClass;
 /**
  * @covers \PhpMyAdmin\Table
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Table::class)]
 class TableTest extends AbstractTestCase
 {
     /**
@@ -350,6 +351,7 @@ class TableTest extends AbstractTestCase
      *
      * @dataProvider dataValidateName
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataValidateName')]
     public function testValidateName(string $name, bool $result, bool $is_backquoted = false): void
     {
         self::assertSame($result, Table::isValidName($name, $is_backquoted));
diff --git a/test/classes/TemplateTest.php b/test/classes/TemplateTest.php
index 93b6cb4..7a3aa7c 100644
--- a/test/classes/TemplateTest.php
+++ b/test/classes/TemplateTest.php
@@ -11,6 +11,7 @@ use Twig\Error\LoaderError;
 /**
  * @covers \PhpMyAdmin\Template
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Template::class)]
 class TemplateTest extends AbstractTestCase
 {
     /** @var Template */
@@ -52,6 +53,7 @@ class TemplateTest extends AbstractTestCase
      *
      * @dataProvider providerTestSet
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerTestSet')]
     public function testSet(string $data): void
     {
         $result = $this->template->render($data, [
@@ -83,6 +85,7 @@ class TemplateTest extends AbstractTestCase
      *
      * @dataProvider providerTestDynamicRender
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerTestDynamicRender')]
     public function testDynamicRender(string $templateFile, string $key, string $value): void
     {
         self::assertSame($value, $this->template->render($templateFile, [$key => $value]));
@@ -121,6 +124,7 @@ class TemplateTest extends AbstractTestCase
      *
      * @dataProvider providerTestRender
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerTestRender')]
     public function testRender(string $templateFile, string $expectedResult): void
     {
         self::assertSame($expectedResult, $this->template->render($templateFile));
@@ -150,6 +154,7 @@ class TemplateTest extends AbstractTestCase
      *
      * @dataProvider providerTestRenderGettext
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerTestRenderGettext')]
     public function testRenderGettext(string $templateFile, array $renderParams, string $expectedResult): void
     {
         self::assertSame($expectedResult, $this->template->render($templateFile, $renderParams));
diff --git a/test/classes/ThemeManagerTest.php b/test/classes/ThemeManagerTest.php
index 60df5ff..0949aaf 100644
--- a/test/classes/ThemeManagerTest.php
+++ b/test/classes/ThemeManagerTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\ThemeManager;
 /**
  * @covers \PhpMyAdmin\ThemeManager
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\ThemeManager::class)]
 class ThemeManagerTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/ThemeTest.php b/test/classes/ThemeTest.php
index c19f8ab..650d578 100644
--- a/test/classes/ThemeTest.php
+++ b/test/classes/ThemeTest.php
@@ -15,6 +15,7 @@ use const TEST_PATH;
 /**
  * @covers \PhpMyAdmin\Theme
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Theme::class)]
 class ThemeTest extends AbstractTestCase
 {
     /** @var Theme */
@@ -58,6 +59,7 @@ class ThemeTest extends AbstractTestCase
      *
      * @group medium
      */
+    #[\PHPUnit\Framework\Attributes\Group('medium-group')]
     public function testCheckImgPathNotExisted(): void
     {
         $this->object->setPath('path/to/nowhere');
@@ -161,6 +163,7 @@ class ThemeTest extends AbstractTestCase
      *
      * @depends testLoadInfo
      */
+    #[\PHPUnit\Framework\Attributes\Depends('testLoadInfo')]
     public function testGetSetCheckVersion(): void
     {
         self::assertSame('0.0.0.0', $this->object->getVersion(), 'Version 0.0.0.0 by default');
@@ -214,6 +217,7 @@ class ThemeTest extends AbstractTestCase
      *
      * @dataProvider providerForGetImgPath
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForGetImgPath')]
     public function testGetImgPath(?string $file, ?string $fallback, string $output): void
     {
         self::assertSame($this->object->getImgPath($file, $fallback), $output);
diff --git a/test/classes/TrackerTest.php b/test/classes/TrackerTest.php
index 171c90c..41df6ea 100644
--- a/test/classes/TrackerTest.php
+++ b/test/classes/TrackerTest.php
@@ -15,6 +15,7 @@ use ReflectionMethod;
 /**
  * @covers \PhpMyAdmin\Tracker
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Tracker::class)]
 class TrackerTest extends AbstractTestCase
 {
     /**
@@ -92,6 +93,7 @@ class TrackerTest extends AbstractTestCase
      *
      * @dataProvider getTableNameData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('getTableNameData')]
     public function testGetTableName(string $string, string $expected): void
     {
         self::assertSame($expected, $this->callFunction(null, Tracker::class, 'getTableName', [$string]));
@@ -164,6 +166,7 @@ class TrackerTest extends AbstractTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testCreateVersion(): void
     {
         $GLOBALS['cfg']['Server']['tracking_add_drop_table'] = true;
@@ -439,6 +442,7 @@ class TrackerTest extends AbstractTestCase
      *
      * @dataProvider getTrackedDataProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('getTrackedDataProvider')]
     public function testGetTrackedData(array $fetchArrayReturn, array $expectedArray): void
     {
         $resultStub = $this->createMock(DummyResult::class);
@@ -585,6 +589,7 @@ class TrackerTest extends AbstractTestCase
      *
      * @dataProvider parseQueryData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('parseQueryData')]
     public function testParseQuery(
         string $query,
         string $type,
diff --git a/test/classes/TrackingTest.php b/test/classes/TrackingTest.php
index 19db41f..a01aa2a 100644
--- a/test/classes/TrackingTest.php
+++ b/test/classes/TrackingTest.php
@@ -19,6 +19,7 @@ use function sprintf;
 /**
  * @covers \PhpMyAdmin\Tracking
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Tracking::class)]
 class TrackingTest extends AbstractTestCase
 {
     /** @var Tracking $tracking */
diff --git a/test/classes/TransformationsTest.php b/test/classes/TransformationsTest.php
index c077728..dbaa6c2 100644
--- a/test/classes/TransformationsTest.php
+++ b/test/classes/TransformationsTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Transformations;
 /**
  * @covers \PhpMyAdmin\Transformations
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Transformations::class)]
 class TransformationsTest extends AbstractTestCase
 {
     /** @var Transformations */
@@ -49,6 +50,7 @@ class TransformationsTest extends AbstractTestCase
      *
      * @dataProvider getOptionsData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('getOptionsData')]
     public function testGetOptions(string $input, array $expected): void
     {
         self::assertSame($expected, $this->transformations->getOptions($input));
@@ -258,6 +260,7 @@ class TransformationsTest extends AbstractTestCase
      *
      * @dataProvider fixupData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('fixupData')]
     public function testFixup(string $value, string $expected): void
     {
         self::assertSame($expected, $this->transformations->fixUpMime($value));
@@ -297,6 +300,7 @@ class TransformationsTest extends AbstractTestCase
      *
      * @dataProvider providerGetDescription
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetDescription')]
     public function testGetDescription(string $file, string $expectedDescription): void
     {
         self::assertSame($expectedDescription, $this->transformations->getDescription($file));
@@ -328,6 +332,7 @@ class TransformationsTest extends AbstractTestCase
      *
      * @dataProvider providerGetName
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetName')]
     public function testGetName(string $file, string $expectedName): void
     {
         self::assertSame($expectedName, $this->transformations->getName($file));
diff --git a/test/classes/TwoFactorTest.php b/test/classes/TwoFactorTest.php
index 6e1cfb9..0b155fd 100644
--- a/test/classes/TwoFactorTest.php
+++ b/test/classes/TwoFactorTest.php
@@ -19,6 +19,7 @@ use const JSON_UNESCAPED_SLASHES;
 /**
  * @covers \PhpMyAdmin\TwoFactor
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\TwoFactor::class)]
 class TwoFactorTest extends AbstractTestCase
 {
     protected function setUp(): void
@@ -249,6 +250,8 @@ class TwoFactorTest extends AbstractTestCase
      * @requires extension xmlwriter
      * @requires extension iconv
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('xmlwriter')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('iconv')]
     public function testApplication(): void
     {
         parent::setLanguage();
diff --git a/test/classes/TypesByDatabaseVersionTest.php b/test/classes/TypesByDatabaseVersionTest.php
index fb1291a..cb3cda7 100644
--- a/test/classes/TypesByDatabaseVersionTest.php
+++ b/test/classes/TypesByDatabaseVersionTest.php
@@ -11,6 +11,7 @@ use PHPUnit\Framework\MockObject\Stub;
 /**
  * @covers \PhpMyAdmin\Types
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Types::class)]
 class TypesByDatabaseVersionTest extends AbstractTestCase
 {
     /** @var DatabaseInterface&Stub */
@@ -53,6 +54,7 @@ class TypesByDatabaseVersionTest extends AbstractTestCase
      *
      * @dataProvider providerFortTestGetFunctionsClass
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerFortTestGetFunctionsClass')]
     public function testGetFunctionsClass(
         string $database,
         int $dbVersion,
@@ -278,6 +280,7 @@ class TypesByDatabaseVersionTest extends AbstractTestCase
      *
      * @dataProvider providerFortTestGetFunctions
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerFortTestGetFunctions')]
     public function testGetFunctions(string $database, int $dbVersion, array $includes, array $excludes): void
     {
         $this->createObject($database, $dbVersion);
@@ -354,6 +357,7 @@ class TypesByDatabaseVersionTest extends AbstractTestCase
      *
      * @dataProvider providerFortTestGetAllFunctions
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerFortTestGetAllFunctions')]
     public function testGetAllFunctions(string $database, int $dbVersion, array $includes, array $excludes): void
     {
         $this->createObject($database, $dbVersion);
@@ -614,6 +618,7 @@ class TypesByDatabaseVersionTest extends AbstractTestCase
      *
      * @dataProvider providerFortTestGetColumns
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerFortTestGetColumns')]
     public function testGetColumns(string $database, int $dbVersion, array $expected): void
     {
         $this->createObject($database, $dbVersion);
diff --git a/test/classes/TypesTest.php b/test/classes/TypesTest.php
index fe88efc..e89842e 100644
--- a/test/classes/TypesTest.php
+++ b/test/classes/TypesTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Types;
 /**
  * @covers \PhpMyAdmin\Types
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Types::class)]
 class TypesTest extends AbstractTestCase
 {
     /** @var Types */
@@ -141,6 +142,7 @@ class TypesTest extends AbstractTestCase
      *
      * @dataProvider providerForGetTypeOperators
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForGetTypeOperators')]
     public function testGetTypeOperators(string $type, bool $null, $output): void
     {
         self::assertSame($output, $this->object->getTypeOperators($type, $null));
@@ -236,6 +238,7 @@ class TypesTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGetTypeOperatorsHtml
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetTypeOperatorsHtml')]
     public function testGetTypeOperatorsHtml(
         string $type,
         bool $null,
@@ -269,6 +272,7 @@ class TypesTest extends AbstractTestCase
      *
      * @dataProvider providerForTestGetTypeDescription
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestGetTypeDescription')]
     public function testGetTypeDescription(string $type): void
     {
         self::assertNotEquals('', $this->object->getTypeDescription($type));
@@ -341,6 +345,7 @@ class TypesTest extends AbstractTestCase
      *
      * @dataProvider providerFortTestGetFunctionsClass
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerFortTestGetFunctionsClass')]
     public function testGetFunctionsClass(string $class, array $output): void
     {
         self::assertSame($output, $this->object->getFunctionsClass($class));
@@ -754,6 +759,7 @@ class TypesTest extends AbstractTestCase
      *
      * @dataProvider providerFortTestGetTypeClass
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerFortTestGetTypeClass')]
     public function testGetTypeClass(string $type, string $output): void
     {
         self::assertSame($output, $this->object->getTypeClass($type));
diff --git a/test/classes/UrlTest.php b/test/classes/UrlTest.php
index 4baea92..da83450 100644
--- a/test/classes/UrlTest.php
+++ b/test/classes/UrlTest.php
@@ -16,6 +16,7 @@ use function urldecode;
 /**
  * @covers \PhpMyAdmin\Url
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Url::class)]
 class UrlTest extends AbstractTestCase
 {
     /** @var string|false|null */
@@ -243,6 +244,7 @@ class UrlTest extends AbstractTestCase
      *
      * @dataProvider getArgSeparatorProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('getArgSeparatorProvider')]
     public function testGetArgSeparator(string $expected, $iniValue, ?string $cacheValue): void
     {
         $property = new ReflectionProperty(Url::class, 'inputArgSeparator');
diff --git a/test/classes/UserPasswordTest.php b/test/classes/UserPasswordTest.php
index 5543ac8..b0249bb 100644
--- a/test/classes/UserPasswordTest.php
+++ b/test/classes/UserPasswordTest.php
@@ -17,6 +17,7 @@ use function str_repeat;
 /**
  * @covers \PhpMyAdmin\UserPassword
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\UserPassword::class)]
 class UserPasswordTest extends AbstractTestCase
 {
     /** @var UserPassword */
@@ -40,6 +41,7 @@ class UserPasswordTest extends AbstractTestCase
     /**
      * @dataProvider providerSetChangePasswordMsg
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerSetChangePasswordMsg')]
     public function testSetChangePasswordMsg(
         bool $error,
         Message $message,
diff --git a/test/classes/UserPreferencesTest.php b/test/classes/UserPreferencesTest.php
index 949faf4..6fcf008 100644
--- a/test/classes/UserPreferencesTest.php
+++ b/test/classes/UserPreferencesTest.php
@@ -17,6 +17,7 @@ use function time;
 /**
  * @covers \PhpMyAdmin\UserPreferences
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\UserPreferences::class)]
 class UserPreferencesTest extends AbstractNetworkTestCase
 {
     /** @var UserPreferences */
diff --git a/test/classes/UtilTest.php b/test/classes/UtilTest.php
index bd6667d..2fa25c4 100644
--- a/test/classes/UtilTest.php
+++ b/test/classes/UtilTest.php
@@ -47,6 +47,7 @@ const FIELD_TYPE_UNKNOWN = -1;
 /**
  * @covers \PhpMyAdmin\Util
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Util::class)]
 class UtilTest extends AbstractTestCase
 {
     /**
@@ -67,6 +68,10 @@ class UtilTest extends AbstractTestCase
      * @requires extension mbstring
      * @requires extension sodium
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('mysqli')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('curl')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('mbstring')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('sodium')]
     public function testListPHPExtensions(): void
     {
         self::assertSame([
@@ -268,6 +273,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerGetUniqueConditionForGroupFlag
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetUniqueConditionForGroupFlag')]
     public function testGetUniqueConditionForGroupFlag(array $meta, array $row, array $expected): void
     {
         $fieldsCount = count($meta);
@@ -410,6 +416,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider charsetQueryData
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('charsetQueryData')]
     public function testGenerateCharsetQueryPart(string $collation, string $expected): void
     {
         self::assertSame($expected, Util::getCharsetQueryPart($collation));
@@ -515,6 +522,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerConvertBitDefaultValue
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerConvertBitDefaultValue')]
     public function testConvertBitDefaultValue(?string $bit, string $val): void
     {
         self::assertSame($val, Util::convertBitDefaultValue($bit));
@@ -614,6 +622,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerUnEscapeMysqlWildcards
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerUnEscapeMysqlWildcards')]
     public function testEscapeMysqlWildcards(string $a, string $b): void
     {
         self::assertSame($a, Util::escapeMysqlWildcards($b));
@@ -627,6 +636,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerUnEscapeMysqlWildcards
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerUnEscapeMysqlWildcards')]
     public function testUnescapeMysqlWildcards(string $a, string $b): void
     {
         self::assertSame($b, Util::unescapeMysqlWildcards($a));
@@ -640,6 +650,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerExpandUserString
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerExpandUserString')]
     public function testExpandUserString(string $in, string $out): void
     {
         parent::setGlobalConfig();
@@ -703,6 +714,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerExtractColumnSpec
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerExtractColumnSpec')]
     public function testExtractColumnSpec(string $in, array $out): void
     {
         $GLOBALS['cfg']['LimitChars'] = 1000;
@@ -861,6 +873,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerParseEnumSetValues
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerParseEnumSetValues')]
     public function testParseEnumSetValues(string $in, bool $escapeHTML, array $out): void
     {
         self::assertSame($out, Util::parseEnumSetValues($in, $escapeHTML));
@@ -979,6 +992,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerExtractValueFromFormattedSize
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerExtractValueFromFormattedSize')]
     public function testExtractValueFromFormattedSize($size, $expected): void
     {
         self::assertSame($expected, Util::extractValueFromFormattedSize($size));
@@ -1021,6 +1035,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerFormatByteDown
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerFormatByteDown')]
     public function testFormatByteDown($a, int $b, int $c, array $e): void
     {
         $result = Util::formatByteDown($a, $b, $c);
@@ -1230,6 +1245,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerFormatNumber
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerFormatNumber')]
     public function testFormatNumber($a, int $b, int $c, string $d): void
     {
         $this->assertFormatNumber($a, $b, $c, $d);
@@ -1401,6 +1417,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerGetFormattedMaximumUploadSize
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetFormattedMaximumUploadSize')]
     public function testGetFormattedMaximumUploadSize($size, string $unit, string $res): void
     {
         self::assertSame('(' . __('Max: ') . $res . $unit . ')', Util::getFormattedMaximumUploadSize($size));
@@ -1477,6 +1494,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerGetTitleForTarget
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerGetTitleForTarget')]
     public function testGetTitleForTarget(string $target, string $result): void
     {
         self::assertSame($result, Util::getTitleForTarget($target));
@@ -1528,6 +1546,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerLocalisedDate
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerLocalisedDate')]
     public function testLocalisedDate(int $a, string $b, string $e, string $tz, string $locale): void
     {
         // A test case for #15830 could be added for using the php setlocale on a Windows CI
@@ -1661,6 +1680,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerTimespanFormat
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerTimespanFormat')]
     public function testTimespanFormat(int $a, string $e): void
     {
         $GLOBALS['timespanfmt'] = '%s days, %s hours, %s minutes and %s seconds';
@@ -1700,6 +1720,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerPrintableBitValue
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerPrintableBitValue')]
     public function testPrintableBitValue(int $a, int $b, string $e): void
     {
         self::assertSame($e, Util::printableBitValue($a, $b));
@@ -1734,6 +1755,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerUnQuote
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerUnQuote')]
     public function testUnQuote(string $param, string $expected): void
     {
         self::assertSame($expected, Util::unQuote($param));
@@ -1774,6 +1796,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerUnQuoteSelectedChar
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerUnQuoteSelectedChar')]
     public function testUnQuoteSelectedChar(string $param, string $expected): void
     {
         self::assertSame($expected, Util::unQuote($param, '"'));
@@ -1809,6 +1832,7 @@ class UtilTest extends AbstractTestCase
     /**
      * @dataProvider providerForTestBackquote
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForTestBackquote')]
     public function testBackquote(?string $entry, string $expectedNoneOutput, string $expectedMssqlOutput): void
     {
         self::assertSame($expectedNoneOutput, Util::backquote($entry));
@@ -1884,6 +1908,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerUserDir
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerUserDir')]
     public function testUserDir(string $a, string $e): void
     {
         $GLOBALS['cfg']['Server']['user'] = 'root';
@@ -1918,6 +1943,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerDuplicateFirstNewline
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerDuplicateFirstNewline')]
     public function testDuplicateFirstNewline(string $a, string $e): void
     {
         self::assertSame($e, Util::duplicateFirstNewline($a));
@@ -1972,6 +1998,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerIsInteger
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerIsInteger')]
     public function testIsInteger(bool $expected, $input): void
     {
         $isInteger = Util::isInteger($input);
@@ -2017,6 +2044,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider providerForwardedHeaders
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerForwardedHeaders')]
     public function testGetProtoFromForwardedHeader(string $header, string $proto): void
     {
         $protocolDetected = Util::getProtoFromForwardedHeader($header);
@@ -2187,6 +2215,7 @@ class UtilTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testCurrentUserHasNotUserPrivilegeButDbPrivilege(): void
     {
         $dbi = $this->getMockBuilder(DatabaseInterface::class)
@@ -2210,6 +2239,7 @@ class UtilTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testCurrentUserHasNotUserPrivilegeAndNotDbPrivilege(): void
     {
         $dbi = $this->getMockBuilder(DatabaseInterface::class)
@@ -2233,6 +2263,7 @@ class UtilTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testCurrentUserHasNotUserPrivilegeAndNotDbPrivilegeButTablePrivilege(): void
     {
         $dbi = $this->getMockBuilder(DatabaseInterface::class)
@@ -2256,6 +2287,7 @@ class UtilTest extends AbstractTestCase
     /**
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testCurrentUserHasNotUserPrivilegeAndNotDbPrivilegeAndNotTablePrivilege(): void
     {
         $dbi = $this->getMockBuilder(DatabaseInterface::class)
@@ -2441,6 +2473,7 @@ class UtilTest extends AbstractTestCase
     /**
      * @dataProvider dataProviderScriptNames
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderScriptNames')]
     public function testGetScriptNameForOption(string $target, string $location, string $finalLink): void
     {
         self::assertSame($finalLink, Util::getScriptNameForOption($target, $location));
@@ -2455,6 +2488,7 @@ class UtilTest extends AbstractTestCase
      *
      * @dataProvider provideForTestIsUUIDSupported
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provideForTestIsUUIDSupported')]
     public function testIsUUIDSupported(bool $isMariaDB, int $version, bool $expected): void
     {
         $dbi = $this->getMockBuilder(DatabaseInterface::class)
diff --git a/test/classes/Utils/ForeignKeyTest.php b/test/classes/Utils/ForeignKeyTest.php
index dd50fff..ed9352a 100644
--- a/test/classes/Utils/ForeignKeyTest.php
+++ b/test/classes/Utils/ForeignKeyTest.php
@@ -11,6 +11,7 @@ use PhpMyAdmin\Utils\ForeignKey;
 /**
  * @covers \PhpMyAdmin\Utils\ForeignKey
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Utils\ForeignKey::class)]
 class ForeignKeyTest extends AbstractTestCase
 {
     /**
@@ -21,6 +22,7 @@ class ForeignKeyTest extends AbstractTestCase
      *
      * @dataProvider providerIsSupported
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerIsSupported')]
     public function testIsSupported(string $a, bool $e): void
     {
         $GLOBALS['server'] = 1;
@@ -72,6 +74,7 @@ class ForeignKeyTest extends AbstractTestCase
     /**
      * @dataProvider providerCheckInit
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerCheckInit')]
     public function testHandleDisableCheckInit(string $checksValue, string $setVariableParam): void
     {
         $dbi = $this->getMockBuilder(DatabaseInterface::class)
@@ -96,6 +99,7 @@ class ForeignKeyTest extends AbstractTestCase
     /**
      * @dataProvider providerCheckInit
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerCheckInit')]
     public function testHandleDisableCheckInitVarFalse(string $checksValue, string $setVariableParam): void
     {
         $dbi = $this->getMockBuilder(DatabaseInterface::class)
@@ -131,6 +135,7 @@ class ForeignKeyTest extends AbstractTestCase
     /**
      * @dataProvider providerCheckCleanup
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerCheckCleanup')]
     public function testHandleDisableCheckCleanup(bool $checkValue, string $setVariableParam): void
     {
         $dbi = $this->getMockBuilder(DatabaseInterface::class)
diff --git a/test/classes/Utils/FormatConverterTest.php b/test/classes/Utils/FormatConverterTest.php
index 01fdb66..9c3f6e7 100644
--- a/test/classes/Utils/FormatConverterTest.php
+++ b/test/classes/Utils/FormatConverterTest.php
@@ -12,6 +12,7 @@ use function hex2bin;
 /**
  * @covers \PhpMyAdmin\Utils\FormatConverter
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Utils\FormatConverter::class)]
 class FormatConverterTest extends AbstractTestCase
 {
     /**
@@ -23,6 +24,7 @@ class FormatConverterTest extends AbstractTestCase
      *
      * @dataProvider providerBinaryToIp
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerBinaryToIp')]
     public function testBinaryToIp(string $expected, string $input, bool $isBinary): void
     {
         $result = FormatConverter::binaryToIp($input, $isBinary);
@@ -91,6 +93,7 @@ class FormatConverterTest extends AbstractTestCase
      *
      * @dataProvider providerIpToBinary
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerIpToBinary')]
     public function testIpToBinary(string $expected, string $input): void
     {
         $result = FormatConverter::ipToBinary($input);
@@ -124,6 +127,7 @@ class FormatConverterTest extends AbstractTestCase
      *
      * @dataProvider providerIpToLong
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerIpToLong')]
     public function testIpToLong(string $expected, string $input): void
     {
         $result = FormatConverter::ipToLong($input);
@@ -157,6 +161,7 @@ class FormatConverterTest extends AbstractTestCase
      *
      * @dataProvider providerLongToIp
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerLongToIp')]
     public function testLongToIp(string $expected, string $input): void
     {
         $result = FormatConverter::longToIp($input);
diff --git a/test/classes/Utils/GisTest.php b/test/classes/Utils/GisTest.php
index af98fff..9d73695 100644
--- a/test/classes/Utils/GisTest.php
+++ b/test/classes/Utils/GisTest.php
@@ -14,6 +14,7 @@ use function hex2bin;
 /**
  * @covers \PhpMyAdmin\Utils\Gis
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Utils\Gis::class)]
 class GisTest extends AbstractTestCase
 {
     /**
@@ -24,6 +25,7 @@ class GisTest extends AbstractTestCase
      *
      * @dataProvider providerConvertToWellKnownText
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('providerConvertToWellKnownText')]
     public function testConvertToWellKnownText(
         string $expectedQuery,
         array $returnData,
diff --git a/test/classes/Utils/HttpRequestTest.php b/test/classes/Utils/HttpRequestTest.php
index 602870c..e9de197 100644
--- a/test/classes/Utils/HttpRequestTest.php
+++ b/test/classes/Utils/HttpRequestTest.php
@@ -17,6 +17,7 @@ use const CURLOPT_CAPATH;
 /**
  * @covers \PhpMyAdmin\Utils\HttpRequest
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Utils\HttpRequest::class)]
 class HttpRequestTest extends AbstractTestCase
 {
     /** @var HttpRequest */
@@ -63,6 +64,10 @@ class HttpRequestTest extends AbstractTestCase
      * @group network
      * @requires extension curl
      */
+    #[\PHPUnit\Framework\Attributes\Group(name: 'medium-group')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('httpRequests')]
+    #[\PHPUnit\Framework\Attributes\Group('network')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('curl')]
     public function testCurl(string $url, string $method, bool $return_only_status, $expected): void
     {
         $result = $this->callFunction(
@@ -87,6 +92,10 @@ class HttpRequestTest extends AbstractTestCase
      * @group network
      * @requires extension curl
      */
+    #[\PHPUnit\Framework\Attributes\Group(name: 'medium-group')]
+    #[\PHPUnit\Framework\Attributes\Group('network')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('httpRequests')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('curl')]
     public function testCurlCAPath(string $url, string $method, bool $return_only_status, $expected): void
     {
         $this->checkCurlSslFlagsSupport();
@@ -114,6 +123,10 @@ class HttpRequestTest extends AbstractTestCase
      * @group network
      * @requires extension curl
      */
+    #[\PHPUnit\Framework\Attributes\Group(name: 'medium-group')]
+    #[\PHPUnit\Framework\Attributes\Group('network')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('httpRequests')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('curl')]
     public function testCurlCAInfo(string $url, string $method, bool $return_only_status, $expected): void
     {
         $this->checkCurlSslFlagsSupport();
@@ -140,6 +153,9 @@ class HttpRequestTest extends AbstractTestCase
      * @dataProvider httpRequests
      * @group network
      */
+    #[\PHPUnit\Framework\Attributes\Group(name: 'medium-group')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('httpRequests')]
+    #[\PHPUnit\Framework\Attributes\Group('network')]
     public function testFopen(string $url, string $method, bool $return_only_status, $expected): void
     {
         if (! ini_get('allow_url_fopen')) {
@@ -168,6 +184,10 @@ class HttpRequestTest extends AbstractTestCase
      * @group network
      * @requires extension curl
      */
+    #[\PHPUnit\Framework\Attributes\Group(name: 'medium-group')]
+    #[\PHPUnit\Framework\Attributes\DataProvider('httpRequests')]
+    #[\PHPUnit\Framework\Attributes\Group('network')]
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('curl')]
     public function testCreate(string $url, string $method, bool $return_only_status, $expected): void
     {
         if (! ini_get('allow_url_fopen')) {
diff --git a/test/classes/Utils/SessionCacheTest.php b/test/classes/Utils/SessionCacheTest.php
index 2a9d7a8..f5418ca 100644
--- a/test/classes/Utils/SessionCacheTest.php
+++ b/test/classes/Utils/SessionCacheTest.php
@@ -10,6 +10,7 @@ use PHPUnit\Framework\TestCase;
 /**
  * @covers \PhpMyAdmin\Utils\SessionCache
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Utils\SessionCache::class)]
 class SessionCacheTest extends TestCase
 {
     public function testGet(): void
diff --git a/test/classes/VersionInformationTest.php b/test/classes/VersionInformationTest.php
index 7ddb8ca..784174b 100644
--- a/test/classes/VersionInformationTest.php
+++ b/test/classes/VersionInformationTest.php
@@ -12,6 +12,7 @@ use function count;
 /**
  * @covers \PhpMyAdmin\VersionInformation
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\VersionInformation::class)]
 class VersionInformationTest extends AbstractTestCase
 {
     /** @var stdClass[] */
@@ -57,6 +58,7 @@ class VersionInformationTest extends AbstractTestCase
      * @group large
      * @group network
      */
+    #[\PHPUnit\Framework\Attributes\Group('network')]
     public function testGetLatestVersion(): void
     {
         $this->setProxySettings();
@@ -77,6 +79,7 @@ class VersionInformationTest extends AbstractTestCase
      *
      * @dataProvider dataVersions
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataVersions')]
     public function testVersionToInt(string $version, int $numeric): void
     {
         $versionInformation = new VersionInformation();
@@ -173,6 +176,7 @@ class VersionInformationTest extends AbstractTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetLatestCompatibleVersionWithSingleServer(): void
     {
         $GLOBALS['cfg']['Servers'] = [
@@ -197,6 +201,7 @@ class VersionInformationTest extends AbstractTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetLatestCompatibleVersionWithMultipleServers(): void
     {
         $GLOBALS['cfg']['Servers'] = [
@@ -222,6 +227,7 @@ class VersionInformationTest extends AbstractTestCase
      *
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetLatestCompatibleVersionWithOldPHPVersion(): void
     {
         $GLOBALS['cfg']['Servers'] = [
@@ -252,6 +258,7 @@ class VersionInformationTest extends AbstractTestCase
      * @dataProvider dataProviderVersionConditions
      * @requires PHPUnit < 10
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpunit('< 10')]
     public function testGetLatestCompatibleVersionWithNewPHPVersion(
         array $versions,
         array $conditions,
diff --git a/test/classes/VersionTest.php b/test/classes/VersionTest.php
index a000acf..ff05482 100644
--- a/test/classes/VersionTest.php
+++ b/test/classes/VersionTest.php
@@ -11,6 +11,7 @@ use function defined;
 /**
  * @covers \PhpMyAdmin\Version
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\Version::class)]
 class VersionTest extends AbstractTestCase
 {
     /**
diff --git a/test/classes/WebAuthn/CBORDecoderTest.php b/test/classes/WebAuthn/CBORDecoderTest.php
index 6f9c5ac..6cf176d 100644
--- a/test/classes/WebAuthn/CBORDecoderTest.php
+++ b/test/classes/WebAuthn/CBORDecoderTest.php
@@ -18,6 +18,8 @@ use const INF;
  * @covers \PhpMyAdmin\WebAuthn\CBORDecoder
  * @covers \PhpMyAdmin\WebAuthn\DataStream
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\WebAuthn\CBORDecoder::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\WebAuthn\DataStream::class)]
 class CBORDecoderTest extends TestCase
 {
     /**
@@ -25,6 +27,7 @@ class CBORDecoderTest extends TestCase
      *
      * @dataProvider dataProviderForTestDecode
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderForTestDecode')]
     public function testDecode(string $encoded, $expected): void
     {
         $decoder = new CBORDecoder();
@@ -166,6 +169,7 @@ class CBORDecoderTest extends TestCase
     /**
      * @dataProvider indefiniteLengthValuesProvider
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('indefiniteLengthValuesProvider')]
     public function testDecodeForNotSupportedValues(string $encoded): void
     {
         $decoder = new CBORDecoder();
diff --git a/test/classes/WebAuthn/CustomServerTest.php b/test/classes/WebAuthn/CustomServerTest.php
index 5e1dca4..fcca18c 100644
--- a/test/classes/WebAuthn/CustomServerTest.php
+++ b/test/classes/WebAuthn/CustomServerTest.php
@@ -17,6 +17,9 @@ use function hex2bin;
  * @covers \PhpMyAdmin\WebAuthn\CBORDecoder
  * @covers \PhpMyAdmin\WebAuthn\DataStream
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\WebAuthn\CustomServer::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\WebAuthn\CBORDecoder::class)]
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\WebAuthn\DataStream::class)]
 final class CustomServerTest extends TestCase
 {
     public function testGetCredentialCreationOptions(): void
diff --git a/test/classes/WebAuthn/WebauthnLibServerTest.php b/test/classes/WebAuthn/WebauthnLibServerTest.php
index ddd77a2..30abbf8 100644
--- a/test/classes/WebAuthn/WebauthnLibServerTest.php
+++ b/test/classes/WebAuthn/WebauthnLibServerTest.php
@@ -17,6 +17,7 @@ use function class_exists;
 /**
  * @covers \PhpMyAdmin\WebAuthn\WebauthnLibServer
  */
+#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\WebAuthn\WebauthnLibServer::class)]
 final class WebauthnLibServerTest extends TestCase
 {
     protected function setUp(): void
@@ -93,6 +94,7 @@ final class WebauthnLibServerTest extends TestCase
      *
      * @requires extension bcmath
      */
+    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('bcmath')]
     public function testParseAndValidateAssertionResponse(): void
     {
         $twoFactor = self::createStub(TwoFactor::class);
diff --git a/test/classes/ZipExtensionTest.php b/test/classes/ZipExtensionTest.php
index 5b92e6c..7386595 100644
--- a/test/classes/ZipExtensionTest.php
+++ b/test/classes/ZipExtensionTest.php
@@ -15,6 +15,7 @@ use function unlink;
  * @covers \PhpMyAdmin\ZipExtension
  * @requires extension zip
  */
+#[\PHPUnit\Framework\Attributes\RequiresPhpExtension('zip')]
 class ZipExtensionTest extends AbstractTestCase
 {
     /** @var ZipExtension */
@@ -35,6 +36,7 @@ class ZipExtensionTest extends AbstractTestCase
      *
      * @dataProvider provideTestGetContents
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provideTestGetContents')]
     public function testGetContents(string $file, ?string $specific_entry, $output): void
     {
         self::assertSame($this->zipExtension->getContents($file, $specific_entry), $output);
@@ -84,6 +86,7 @@ class ZipExtensionTest extends AbstractTestCase
      *
      * @dataProvider provideTestFindFile
      */
+    #[\PHPUnit\Framework\Attributes\DataProvider('provideTestFindFile')]
     public function testFindFile(string $file, string $file_regexp, $output): void
     {
         self::assertSame($this->zipExtension->findFile($file, $file_regexp), $output);
diff --git a/test/selenium/ChangePasswordTest.php b/test/selenium/ChangePasswordTest.php
index a1e063e..46cba35 100644
--- a/test/selenium/ChangePasswordTest.php
+++ b/test/selenium/ChangePasswordTest.php
@@ -12,6 +12,7 @@ use function trim;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class ChangePasswordTest extends TestBase
 {
     /**
@@ -33,6 +34,7 @@ class ChangePasswordTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testChangePassword(): void
     {
         $this->login();
diff --git a/test/selenium/CreateDropDatabaseTest.php b/test/selenium/CreateDropDatabaseTest.php
index decfb47..c6b624c 100644
--- a/test/selenium/CreateDropDatabaseTest.php
+++ b/test/selenium/CreateDropDatabaseTest.php
@@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Selenium;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class CreateDropDatabaseTest extends TestBase
 {
     /**
@@ -25,6 +26,7 @@ class CreateDropDatabaseTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testCreateDropDatabase(): void
     {
         $this->dbQuery('DROP DATABASE IF EXISTS `' . $this->databaseName . '`;');
diff --git a/test/selenium/CreateRemoveUserTest.php b/test/selenium/CreateRemoveUserTest.php
index 3c25762..9376a56 100644
--- a/test/selenium/CreateRemoveUserTest.php
+++ b/test/selenium/CreateRemoveUserTest.php
@@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Selenium;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class CreateRemoveUserTest extends TestBase
 {
     /**
@@ -47,6 +48,7 @@ class CreateRemoveUserTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testCreateRemoveUser(): void
     {
         $this->waitForElement('partialLinkText', 'User accounts')->click();
diff --git a/test/selenium/Database/EventsTest.php b/test/selenium/Database/EventsTest.php
index b975554..991ed95 100644
--- a/test/selenium/Database/EventsTest.php
+++ b/test/selenium/Database/EventsTest.php
@@ -13,6 +13,7 @@ use function strtotime;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class EventsTest extends TestBase
 {
     /**
@@ -75,6 +76,7 @@ class EventsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testAddEvent(): void
     {
         $this->waitForElement('partialLinkText', 'Events')->click();
@@ -158,6 +160,8 @@ class EventsTest extends TestBase
      * @depends testAddEvent
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Depends('testAddEvent')]
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testEditEvents(): void
     {
         $this->eventSQL();
@@ -196,6 +200,8 @@ class EventsTest extends TestBase
      * @depends testAddEvent
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Depends('testAddEvent')]
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDropEvent(): void
     {
         $this->eventSQL();
diff --git a/test/selenium/Database/OperationsTest.php b/test/selenium/Database/OperationsTest.php
index 816cd17..1d7c8a2 100644
--- a/test/selenium/Database/OperationsTest.php
+++ b/test/selenium/Database/OperationsTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Tests\Selenium\TestBase;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class OperationsTest extends TestBase
 {
     /**
@@ -35,6 +36,7 @@ class OperationsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDbComment(): void
     {
         $this->skipIfNotPMADB();
@@ -54,6 +56,7 @@ class OperationsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testRenameDB(): void
     {
         $this->getToDBOperations();
@@ -98,6 +101,7 @@ class OperationsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testCopyDb(): void
     {
         $this->getToDBOperations();
diff --git a/test/selenium/Database/ProceduresTest.php b/test/selenium/Database/ProceduresTest.php
index 537ed24..ab5f7d9 100644
--- a/test/selenium/Database/ProceduresTest.php
+++ b/test/selenium/Database/ProceduresTest.php
@@ -12,6 +12,7 @@ use function str_replace;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class ProceduresTest extends TestBase
 {
     /**
@@ -111,6 +112,7 @@ class ProceduresTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testAddProcedure(): void
     {
         $this->waitForElement('partialLinkText', 'Routines')->click();
@@ -178,6 +180,7 @@ class ProceduresTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testEditProcedure(): void
     {
         $this->procedureSQL();
@@ -206,6 +209,7 @@ class ProceduresTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDropProcedure(): void
     {
         $this->procedureSQL();
diff --git a/test/selenium/Database/QueryByExampleTest.php b/test/selenium/Database/QueryByExampleTest.php
index 247f47e..acc8407 100644
--- a/test/selenium/Database/QueryByExampleTest.php
+++ b/test/selenium/Database/QueryByExampleTest.php
@@ -11,6 +11,7 @@ use function trim;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class QueryByExampleTest extends TestBase
 {
     /**
diff --git a/test/selenium/Database/StructureTest.php b/test/selenium/Database/StructureTest.php
index 69fd376..af921ba 100644
--- a/test/selenium/Database/StructureTest.php
+++ b/test/selenium/Database/StructureTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Tests\Selenium\TestBase;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class StructureTest extends TestBase
 {
     /**
@@ -45,6 +46,7 @@ class StructureTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testTruncateTable(): void
     {
         $this->byXPath("(//a[contains(., 'Empty')])[1]")->click();
@@ -71,6 +73,7 @@ class StructureTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDropMultipleTables(): void
     {
         $this->byCssSelector("label[for='tablesForm_checkall']")->click();
diff --git a/test/selenium/Database/TriggersTest.php b/test/selenium/Database/TriggersTest.php
index 289bf9d..63b7865 100644
--- a/test/selenium/Database/TriggersTest.php
+++ b/test/selenium/Database/TriggersTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Tests\Selenium\TestBase;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class TriggersTest extends TestBase
 {
     /**
@@ -61,6 +62,7 @@ class TriggersTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testAddTrigger(): void
     {
         $this->expandMore();
@@ -129,6 +131,7 @@ class TriggersTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testEditTriggers(): void
     {
         $this->expandMore();
@@ -169,6 +172,7 @@ class TriggersTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDropTrigger(): void
     {
         $this->expandMore();
diff --git a/test/selenium/ExportTest.php b/test/selenium/ExportTest.php
index 320e8ee..a563ff4 100644
--- a/test/selenium/ExportTest.php
+++ b/test/selenium/ExportTest.php
@@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Selenium;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class ExportTest extends TestBase
 {
     /**
@@ -37,6 +38,7 @@ class ExportTest extends TestBase
      * @dataProvider exportDataProvider
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testServerExport(string $plugin, array $expected): void
     {
         $text = $this->doExport('server', $plugin);
@@ -55,6 +57,7 @@ class ExportTest extends TestBase
      * @dataProvider exportDataProvider
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDbExport(string $plugin, array $expected): void
     {
         $this->navigateDatabase($this->databaseName);
@@ -75,6 +78,7 @@ class ExportTest extends TestBase
      * @dataProvider exportDataProvider
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testTableExport(string $plugin, array $expected): void
     {
         $this->dbQuery('INSERT INTO `' . $this->databaseName . '`.`test_table` (val) VALUES (3);');
diff --git a/test/selenium/ImportTest.php b/test/selenium/ImportTest.php
index c0e26fc..609bd27 100644
--- a/test/selenium/ImportTest.php
+++ b/test/selenium/ImportTest.php
@@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Selenium;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class ImportTest extends TestBase
 {
     /**
@@ -23,6 +24,7 @@ class ImportTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testServerImport(): void
     {
         $this->doImport('server');
@@ -43,6 +45,7 @@ class ImportTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDbImport(): void
     {
         $this->dbQuery('CREATE DATABASE IF NOT EXISTS `' . $this->databaseName . '`');
@@ -65,6 +68,7 @@ class ImportTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testTableImport(): void
     {
         // setup the db
diff --git a/test/selenium/LoginTest.php b/test/selenium/LoginTest.php
index 7e53442..82c80ef 100644
--- a/test/selenium/LoginTest.php
+++ b/test/selenium/LoginTest.php
@@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Selenium;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class LoginTest extends TestBase
 {
     /**
@@ -27,6 +28,7 @@ class LoginTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testSuccessfulLogin(): void
     {
         $this->login();
@@ -40,6 +42,7 @@ class LoginTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testLoginWithWrongPassword(): void
     {
         $this->login('Admin', 'Admin');
diff --git a/test/selenium/NormalizationTest.php b/test/selenium/NormalizationTest.php
index f0a13b9..04b481c 100644
--- a/test/selenium/NormalizationTest.php
+++ b/test/selenium/NormalizationTest.php
@@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Selenium;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class NormalizationTest extends TestBase
 {
     /**
@@ -41,6 +42,7 @@ class NormalizationTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testNormalizationTo1NF(): void
     {
         self::assertTrue($this->isElementPresent('cssSelector', 'fieldset'));
diff --git a/test/selenium/ServerSettingsTest.php b/test/selenium/ServerSettingsTest.php
index a797189..ea02197 100644
--- a/test/selenium/ServerSettingsTest.php
+++ b/test/selenium/ServerSettingsTest.php
@@ -9,6 +9,7 @@ use function sleep;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class ServerSettingsTest extends TestBase
 {
     /**
@@ -57,6 +58,7 @@ class ServerSettingsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testHideDatabase(): void
     {
         $this->createDatabase();
@@ -85,6 +87,7 @@ class ServerSettingsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testSettingsTabsAreDisplayed(): void
     {
         $this->byPartialLinkText('SQL queries')->click();
@@ -106,6 +109,7 @@ class ServerSettingsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testHideLogo(): void
     {
         $this->byPartialLinkText('Navigation panel')->click();
diff --git a/test/selenium/SqlQueryTest.php b/test/selenium/SqlQueryTest.php
index 819a729..6206dfa 100644
--- a/test/selenium/SqlQueryTest.php
+++ b/test/selenium/SqlQueryTest.php
@@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Selenium;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class SqlQueryTest extends TestBase
 {
     /**
diff --git a/test/selenium/Table/BrowseTest.php b/test/selenium/Table/BrowseTest.php
index a22b869..1a7ab1b 100644
--- a/test/selenium/Table/BrowseTest.php
+++ b/test/selenium/Table/BrowseTest.php
@@ -10,6 +10,7 @@ use PhpMyAdmin\Tests\Selenium\TestBase;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class BrowseTest extends TestBase
 {
     /**
@@ -43,6 +44,7 @@ class BrowseTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testSortRecords(): void
     {
         // case 1
@@ -92,6 +94,7 @@ class BrowseTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testChangeRecords(): void
     {
         $ele = $this->byCssSelector('table.table_results tbody tr:nth-child(2) td:nth-child(2)');
@@ -133,6 +136,7 @@ class BrowseTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testChangeRecordsByDoubleClick(): void
     {
         $element = $this->byCssSelector('table.table_results tbody tr:nth-child(1) td:nth-child(6)');
@@ -162,6 +166,7 @@ class BrowseTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testCopyRecords(): void
     {
         $ele = $this->byCssSelector('table.table_results tbody tr:nth-child(3) td:nth-child(3)');
@@ -195,6 +200,7 @@ class BrowseTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testSearchRecords(): void
     {
         $this->expandMore();
@@ -227,6 +233,7 @@ class BrowseTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDeleteRecords(): void
     {
         $this->byId('id_rows_to_delete1_left')->click();
diff --git a/test/selenium/Table/CreateTest.php b/test/selenium/Table/CreateTest.php
index 8a687cc..0a83cd9 100644
--- a/test/selenium/Table/CreateTest.php
+++ b/test/selenium/Table/CreateTest.php
@@ -11,6 +11,7 @@ use function sleep;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class CreateTest extends TestBase
 {
     protected function setUp(): void
@@ -26,6 +27,7 @@ class CreateTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testCreateTable(): void
     {
         $this->waitAjax();
diff --git a/test/selenium/Table/InsertTest.php b/test/selenium/Table/InsertTest.php
index faf13e6..0019731 100644
--- a/test/selenium/Table/InsertTest.php
+++ b/test/selenium/Table/InsertTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Tests\Selenium\TestBase;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class InsertTest extends TestBase
 {
     /**
@@ -37,6 +38,7 @@ class InsertTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testAddData(): void
     {
         if ($this->isSafari()) {
diff --git a/test/selenium/Table/OperationsTest.php b/test/selenium/Table/OperationsTest.php
index 6362abe..f6687d3 100644
--- a/test/selenium/Table/OperationsTest.php
+++ b/test/selenium/Table/OperationsTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Tests\Selenium\TestBase;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class OperationsTest extends TestBase
 {
     /**
@@ -51,6 +52,7 @@ class OperationsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testChangeTableOrder(): void
     {
         $this->selectByLabel(
@@ -82,6 +84,7 @@ class OperationsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testMoveTable(): void
     {
         $this->byCssSelector("form#moveTableForm input[name='new_name']")
@@ -113,6 +116,7 @@ class OperationsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testRenameTable(): void
     {
         $this->byCssSelector("form#tableOptionsForm input[name='new_name']")
@@ -146,6 +150,7 @@ class OperationsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testCopyTable(): void
     {
         $this->scrollIntoView('copyTable');
@@ -177,6 +182,7 @@ class OperationsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testTruncateTable(): void
     {
         $this->scrollToBottom();
@@ -204,6 +210,7 @@ class OperationsTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDropTable(): void
     {
         $dropLink = $this->waitUntilElementIsVisible('partialLinkText', 'Delete the table (DROP)', 30);
diff --git a/test/selenium/Table/StructureTest.php b/test/selenium/Table/StructureTest.php
index d8c82cf..aca035c 100644
--- a/test/selenium/Table/StructureTest.php
+++ b/test/selenium/Table/StructureTest.php
@@ -9,6 +9,7 @@ use PhpMyAdmin\Tests\Selenium\TestBase;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class StructureTest extends TestBase
 {
     /**
@@ -41,6 +42,7 @@ class StructureTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testAddColumn(): void
     {
         $this->waitForElement('cssSelector', "#addColumns > input[value='Go']")->click();
@@ -67,6 +69,7 @@ class StructureTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testChangeColumn(): void
     {
         $this->byCssSelector('#tablestructure tbody tr:nth-child(2) td:nth-child(11)')->click();
@@ -92,6 +95,7 @@ class StructureTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDropColumns(): void
     {
         $this->waitForElement('cssSelector', 'label[for=checkbox_row_2]')->click();
diff --git a/test/selenium/TrackingTest.php b/test/selenium/TrackingTest.php
index a5b6dba..a5fb3a4 100644
--- a/test/selenium/TrackingTest.php
+++ b/test/selenium/TrackingTest.php
@@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Selenium;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class TrackingTest extends TestBase
 {
     /**
@@ -53,6 +54,7 @@ class TrackingTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testTrackingData(): void
     {
         $this->executeSqlAndReturnToTableTracking();
@@ -124,6 +126,7 @@ class TrackingTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDeactivateTracking(): void
     {
         $this->byCssSelector("input[value='Deactivate now']")->click();
@@ -137,6 +140,7 @@ class TrackingTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testDropTracking(): void
     {
         $this->navigateDatabase($this->databaseName, true);
@@ -176,6 +180,7 @@ class TrackingTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testStructureSnapshot(): void
     {
         $this->byPartialLinkText('Structure snapshot')->click();
diff --git a/test/selenium/XssTest.php b/test/selenium/XssTest.php
index 4ebc2b7..28949ef 100644
--- a/test/selenium/XssTest.php
+++ b/test/selenium/XssTest.php
@@ -7,6 +7,7 @@ namespace PhpMyAdmin\Tests\Selenium;
 /**
  * @coversNothing
  */
+#[\PHPUnit\Framework\Attributes\CoversNothing]
 class XssTest extends TestBase
 {
     /**
@@ -27,6 +28,7 @@ class XssTest extends TestBase
      *
      * @group large
      */
+    #[\PHPUnit\Framework\Attributes\Group('large-group')]
     public function testQueryTabWithNullValue(): void
     {
         if ($this->isSafari()) {
