From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
Date: Tue, 18 Feb 2025 18:55:01 +0100
Subject: Modernize PHPUnit syntax

---
 tests/Functional/Bug/Bug256Test.php                |   5 +-
 tests/Functional/Bug/Bug40Test.php                 |   5 +-
 tests/Functional/Bug/Bug458Test.php                |   4 +-
 tests/Functional/Bug/Bug49Test.php                 |   5 +-
 tests/Functional/Channel/ChannelConsumeTest.php    |   6 +-
 tests/Functional/Channel/ChannelTimeoutTest.php    |  10 +-
 tests/Functional/Channel/ChannelWaitTest.php       |  19 +--
 tests/Functional/Channel/DirectExchangeTest.php    |  13 +-
 tests/Functional/Channel/HeadersExchangeTest.php   |   3 +-
 tests/Functional/Channel/TopicExchangeTest.php     |  13 +-
 .../Connection/AMQPStreamConnectionTest.php        |   3 +-
 tests/Functional/Connection/ConnectionAuthTest.php |   3 +-
 .../Functional/Connection/ConnectionClosedTest.php |  52 +++----
 .../Connection/ConnectionCreationTest.php          |  19 +--
 .../Connection/ConnectionResourceLeakTest.php      |   5 +-
 .../Connection/ConnectionUnresponsiveTest.php      |  12 +-
 .../Heartbeat/PCNTLHeartbeatSenderTest.php         |  27 ++--
 .../Heartbeat/SIGHeartbeatSenderTest.php           |  23 ++-
 .../Connection/Heartbeat/SignalHeartbeatTest.php   |   7 +-
 tests/Functional/Connection/SSLConnectionTest.php  |  19 ++-
 tests/Functional/FileTransferTest.php              |   5 +-
 tests/Functional/Message/AMQPMessageTest.php       |   9 +-
 tests/Functional/ReconnectConnectionTest.php       |  25 +---
 tests/Functional/StreamIOTest.php                  |   9 +-
 tests/Unit/Channel/AMQPChannelTest.php             |  26 ++--
 tests/Unit/Connection/AMQPConnectionConfigTest.php |  46 ++----
 tests/Unit/Connection/AMQPSocketConnectionTest.php |   5 +-
 tests/Unit/Connection/AMQPStreamConnectionTest.php |   7 +-
 .../Unit/Connection/AbstractConnectionTestCase.php |  15 +-
 tests/Unit/Connection/LazyConnectionTest.php       |  13 +-
 tests/Unit/Connection/LibraryPropertiesTest.php    |   7 +-
 tests/Unit/Helper/MiscHelperTest.php               |  18 +--
 tests/Unit/Helper/Protocol/Protocol091Test.php     | 113 ++++-----------
 tests/Unit/Message/AMQPMessageTest.php             |  20 +--
 tests/Unit/Wire/AMQPCollectionTest.php             |  93 ++++---------
 tests/Unit/Wire/AMQPDecimalTest.php                |  17 +--
 tests/Unit/Wire/AMQPWriterTest.php                 |  25 +---
 tests/Unit/Wire/IO/SocketIOTest.php                |  32 ++---
 tests/Unit/Wire/IO/StreamIOTest.php                |   9 +-
 tests/Unit/WireTest.php                            | 154 ++++++---------------
 40 files changed, 318 insertions(+), 583 deletions(-)

diff --git a/tests/Functional/Bug/Bug256Test.php b/tests/Functional/Bug/Bug256Test.php
index 6bbf07c..a8377f1 100644
--- a/tests/Functional/Bug/Bug256Test.php
+++ b/tests/Functional/Bug/Bug256Test.php
@@ -5,6 +5,7 @@ namespace PhpAmqpLib\Tests\Functional\Bug;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
 use PhpAmqpLib\Wire\AMQPTable;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -62,9 +63,7 @@ class Bug256Test extends AbstractConnectionTestCase
         }
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function frame_order()
     {
         $msg = new AMQPMessage('');
diff --git a/tests/Functional/Bug/Bug40Test.php b/tests/Functional/Bug/Bug40Test.php
index 18318b9..bfacd32 100644
--- a/tests/Functional/Bug/Bug40Test.php
+++ b/tests/Functional/Bug/Bug40Test.php
@@ -5,6 +5,7 @@ namespace PhpAmqpLib\Tests\Functional\Bug;
 use PhpAmqpLib\Connection\AMQPStreamConnection;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Tests\TestCaseCompat;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -55,9 +56,7 @@ class Bug40Test extends TestCaseCompat
         }
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function frame_order()
     {
         $msg = new AMQPMessage('test message');
diff --git a/tests/Functional/Bug/Bug458Test.php b/tests/Functional/Bug/Bug458Test.php
index 910afb1..7c6f9ce 100644
--- a/tests/Functional/Bug/Bug458Test.php
+++ b/tests/Functional/Bug/Bug458Test.php
@@ -4,6 +4,7 @@ namespace PhpAmqpLib\Tests\Functional\Bug;
 
 use PhpAmqpLib\Connection\AMQPStreamConnection;
 use PhpAmqpLib\Tests\TestCaseCompat;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -35,9 +36,8 @@ class Bug458Test extends TestCaseCompat
 
     /**
      * This test will be skipped in Windows, because pcntl extension is not available there
-     *
-     * @test
      */
+    #[Test]
     public function stream_select_interruption()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPTimeoutException::class);
diff --git a/tests/Functional/Bug/Bug49Test.php b/tests/Functional/Bug/Bug49Test.php
index 923beac..957e9a3 100644
--- a/tests/Functional/Bug/Bug49Test.php
+++ b/tests/Functional/Bug/Bug49Test.php
@@ -6,6 +6,7 @@ use PhpAmqpLib\Connection\AMQPStreamConnection;
 use PhpAmqpLib\Exception\AMQPProtocolChannelException;
 use PhpAmqpLib\Exception\AMQPProtocolException;
 use PhpAmqpLib\Tests\TestCaseCompat;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -41,9 +42,7 @@ class Bug49Test extends TestCaseCompat
         }
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function declaration()
     {
         try {
diff --git a/tests/Functional/Channel/ChannelConsumeTest.php b/tests/Functional/Channel/ChannelConsumeTest.php
index 182dd1b..cb76d11 100644
--- a/tests/Functional/Channel/ChannelConsumeTest.php
+++ b/tests/Functional/Channel/ChannelConsumeTest.php
@@ -2,11 +2,11 @@
 
 namespace PhpAmqpLib\Tests\Functional\Channel;
 
+use PHPUnit\Framework\Attributes\Test;
+
 class ChannelConsumeTest extends ChannelTestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_consume_same_tag_throws_exception()
     {
         $this->expectException(\InvalidArgumentException::class);
diff --git a/tests/Functional/Channel/ChannelTimeoutTest.php b/tests/Functional/Channel/ChannelTimeoutTest.php
index eec40fc..5e7e21b 100644
--- a/tests/Functional/Channel/ChannelTimeoutTest.php
+++ b/tests/Functional/Channel/ChannelTimeoutTest.php
@@ -9,6 +9,9 @@ use PhpAmqpLib\Helper\MiscHelper;
 use PhpAmqpLib\Wire\IO\AbstractIO;
 use PhpAmqpLib\Wire\IO\StreamIO;
 use PhpAmqpLib\Tests\TestCaseCompat;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -52,15 +55,12 @@ class ChannelTimeoutTest extends TestCaseCompat
         $this->connection = $this->getMockBuilder(AbstractConnection::class)
             ->setConstructorArgs(array(USER, PASS, '/', false, 'AMQPLAIN', null, 'en_US', $this->io, 0, 0, $channel_rpc_timeout))
             ->onlyMethods(array())
-            ->getMockForAbstractClass();
+            ->getMock();
 
         $this->channel = $this->connection->channel();
     }
 
     /**
-     * @test
-     *
-     * @dataProvider provide_operations
      * @param string $operation
      * @param mixed[] $args
      *
@@ -68,6 +68,8 @@ class ChannelTimeoutTest extends TestCaseCompat
      * @covers \PhpAmqpLib\Channel\AMQPChannel::queue_declare
      * @covers \PhpAmqpLib\Channel\AMQPChannel::confirm_select
      */
+    #[DataProvider('provide_operations')]
+    #[Test]
     public function should_throw_exception_for_basic_operations_when_timeout_exceeded(string $operation, array $args)
     {
         $this->expectException(AMQPTimeoutException::class);
diff --git a/tests/Functional/Channel/ChannelWaitTest.php b/tests/Functional/Channel/ChannelWaitTest.php
index 9bfa99a..7647a79 100644
--- a/tests/Functional/Channel/ChannelWaitTest.php
+++ b/tests/Functional/Channel/ChannelWaitTest.php
@@ -8,6 +8,8 @@ use PhpAmqpLib\Connection\AMQPStreamConnection;
 use PhpAmqpLib\Exception\AMQPNoDataException;
 use PhpAmqpLib\Exception\AMQPTimeoutException;
 use PhpAmqpLib\Message\AMQPMessage;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\TestCase;
 
 /**
@@ -16,12 +18,12 @@ use PHPUnit\Framework\TestCase;
 class ChannelWaitTest extends TestCase
 {
     /**
-     * @test
      * @small
      * @group signals
-     * @group nophpunit11
      * @param callable $factory
      */
+    #[RequiresPhpunit('< 11')]
+    #[Test]
     public function should_wait_until_signal_by_default($factory)
     {
         $this->deferSignal(0.5);
@@ -39,10 +41,10 @@ class ChannelWaitTest extends TestCase
     }
 
     /**
-     * @test
      * @group signals
      * @covers AMQPIOReader::wait()
      */
+    #[Test]
     public function should_wait_until_timeout_after_signal(): void
     {
         $factory = $this->channelFactory(true, 30, 15);
@@ -67,11 +69,11 @@ class ChannelWaitTest extends TestCase
     }
 
     /**
-     * @test
      * @small
-     * @group nophpunit11
      * @param callable $factory
      */
+    #[RequiresPhpunit('< 11')]
+    #[Test]
     public function should_throw_timeout_exception($factory)
     {
         $this->expectException(AMQPTimeoutException::class);
@@ -82,11 +84,11 @@ class ChannelWaitTest extends TestCase
     }
 
     /**
-     * @test
      * @small
-     * @group nophpunit11
      * @param callable $factory
      */
+    #[RequiresPhpunit('< 11')]
+    #[Test]
     public function should_return_instantly_non_blocking($factory)
     {
         $channel = $factory();
@@ -100,10 +102,9 @@ class ChannelWaitTest extends TestCase
     }
 
     /**
-     * @test
      * @small
-     *
      */
+    #[Test]
     public function should_call_handler_on_ack()
     {
         $receivedAck = false;
diff --git a/tests/Functional/Channel/DirectExchangeTest.php b/tests/Functional/Channel/DirectExchangeTest.php
index 11926bb..9f3c472 100644
--- a/tests/Functional/Channel/DirectExchangeTest.php
+++ b/tests/Functional/Channel/DirectExchangeTest.php
@@ -4,6 +4,7 @@ namespace PhpAmqpLib\Tests\Functional\Channel;
 
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Tests\Functional\Channel\ChannelTestCase;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -17,9 +18,7 @@ class DirectExchangeTest extends ChannelTestCase
         $this->exchange->name = 'test_direct_exchange';
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function exchange_declare_with_closed_connection()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPChannelClosedException::class);
@@ -29,9 +28,7 @@ class DirectExchangeTest extends ChannelTestCase
         $this->channel->exchange_declare($this->exchange->name, 'direct', false, false, false);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function exchange_declare_with_closed_channel()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPChannelClosedException::class);
@@ -41,9 +38,7 @@ class DirectExchangeTest extends ChannelTestCase
         $this->channel->exchange_declare($this->exchange->name, 'direct', false, false, false);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_consume_foo()
     {
         $this->channel->exchange_declare($this->exchange->name, 'direct', false, false, false);
diff --git a/tests/Functional/Channel/HeadersExchangeTest.php b/tests/Functional/Channel/HeadersExchangeTest.php
index 84ef346..d9e6981 100644
--- a/tests/Functional/Channel/HeadersExchangeTest.php
+++ b/tests/Functional/Channel/HeadersExchangeTest.php
@@ -4,6 +4,7 @@ namespace PhpAmqpLib\Tests\Functional\Channel;
 
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Wire\AMQPTable;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -17,11 +18,11 @@ class HeadersExchangeTest extends ChannelTestCase
     }
 
     /**
-     * @test
      * @small
      * @covers \PhpAmqpLib\Channel\AMQPChannel::queue_bind()
      * @covers \PhpAmqpLib\Exchange\AMQPExchangeType
      */
+    #[Test]
     public function consume_specific_headers()
     {
         list($queue1) = $this->channel->queue_declare();
diff --git a/tests/Functional/Channel/TopicExchangeTest.php b/tests/Functional/Channel/TopicExchangeTest.php
index 3d50a33..302411a 100644
--- a/tests/Functional/Channel/TopicExchangeTest.php
+++ b/tests/Functional/Channel/TopicExchangeTest.php
@@ -5,6 +5,7 @@ namespace PhpAmqpLib\Tests\Functional\Channel;
 use PhpAmqpLib\Connection\AMQPSocketConnection;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Tests\Functional\Channel\ChannelTestCase;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -18,9 +19,7 @@ class TopicExchangeTest extends ChannelTestCase
         $this->exchange->name = 'test_topic_exchange';
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function exchange_declare_with_closed_connection()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPChannelClosedException::class);
@@ -30,9 +29,7 @@ class TopicExchangeTest extends ChannelTestCase
         $this->channel->exchange_declare($this->exchange->name, 'topic');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function exchange_declare_with_closed_channel()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPChannelClosedException::class);
@@ -42,9 +39,7 @@ class TopicExchangeTest extends ChannelTestCase
         $this->channel->exchange_declare($this->exchange->name, 'topic');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function publish_with_confirm()
     {
         $this->channel->exchange_declare($this->exchange->name, 'topic');
diff --git a/tests/Functional/Connection/AMQPStreamConnectionTest.php b/tests/Functional/Connection/AMQPStreamConnectionTest.php
index 9bcef17..103e9eb 100644
--- a/tests/Functional/Connection/AMQPStreamConnectionTest.php
+++ b/tests/Functional/Connection/AMQPStreamConnectionTest.php
@@ -4,14 +4,15 @@ namespace PhpAmqpLib\Tests\Functional\Connection;
 
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
 use PhpAmqpLib\Tests\Functional\Channel\ChannelWaitTest;
+use PHPUnit\Framework\Attributes\Test;
 
 class AMQPStreamConnectionTest extends AbstractConnectionTestCase
 {
     /**
-     * @test
      * @group connection
      * @covers \PhpAmqpLib\Wire\IO\StreamIO::select()
      */
+    #[Test]
     public function connection_select_blocking_wo_timeout(): void
     {
         $connection = $this->connection_create('stream');
diff --git a/tests/Functional/Connection/ConnectionAuthTest.php b/tests/Functional/Connection/ConnectionAuthTest.php
index bd3c388..9ac0838 100644
--- a/tests/Functional/Connection/ConnectionAuthTest.php
+++ b/tests/Functional/Connection/ConnectionAuthTest.php
@@ -9,15 +9,16 @@ use PhpAmqpLib\Connection\AMQPStreamConnection;
 use PhpAmqpLib\Exception\AMQPExceptionInterface;
 use PhpAmqpLib\Exception\AMQPTimeoutException;
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
+use PHPUnit\Framework\Attributes\Test;
 
 class ConnectionAuthTest extends AbstractConnectionTestCase
 {
     /**
-     * @test
      * @group connection
      * @group management
      * @covers \PhpAmqpLib\Connection\AbstractConnection::__construct()
      */
+    #[Test]
     public function plain_auth_passwordless_must_fail()
     {
         $username = 'test_' . rand();
diff --git a/tests/Functional/Connection/ConnectionClosedTest.php b/tests/Functional/Connection/ConnectionClosedTest.php
index b9b3b5d..c2b2f71 100644
--- a/tests/Functional/Connection/ConnectionClosedTest.php
+++ b/tests/Functional/Connection/ConnectionClosedTest.php
@@ -9,6 +9,8 @@ use PhpAmqpLib\Exception\AMQPHeartbeatMissedException;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
 use PhpAmqpLib\Tests\Functional\ToxiProxy;
+use PHPUnit\Framework\Attributes\Test;
+use PHPUnit\Framework\Attributes\TestWith;
 
 /**
  * @group connection
@@ -17,14 +19,9 @@ class ConnectionClosedTest extends AbstractConnectionTestCase
 {
     /**
      * Try to wait for incoming data on blocked and closed connection.
-     * @test
      * @small
      * @group connection
      * @group proxy
-     * @testWith ["stream", false]
-     *           ["stream", true]
-     *           ["socket", false]
-     *           ["socket", true]
      * @covers \PhpAmqpLib\Channel\AbstractChannel::wait()
      * @covers \PhpAmqpLib\Connection\AbstractConnection::wait_frame()
      * @covers \PhpAmqpLib\Wire\IO\StreamIO::read()
@@ -33,6 +30,11 @@ class ConnectionClosedTest extends AbstractConnectionTestCase
      * @param string $type
      * @param bool $keepalive
      */
+    #[Test]
+    #[TestWith(["stream", false])]
+    #[TestWith(["stream", true])]
+    #[TestWith(["socket", false])]
+    #[TestWith(["socket", true])]
     public function must_throw_exception_broken_pipe_wait($type, $keepalive)
     {
         $proxy = $this->create_proxy();
@@ -68,19 +70,19 @@ class ConnectionClosedTest extends AbstractConnectionTestCase
     /**
      * Try to write(publish) to blocked(unresponsive) or closed connection.
      * Must throw correct exception for small and big data frames.
-     * @test
      * @small
      * @group connection
      * @group proxy
-     * @testWith ["stream", 1024]
-     *           ["stream", 32768]
-     *           ["socket", 102400]
      * @covers \PhpAmqpLib\Wire\IO\StreamIO::write()
      * @covers \PhpAmqpLib\Wire\IO\SocketIO::write()
      *
      * @param string $type
      * @param int $size
      */
+    #[Test]
+    #[TestWith(["stream", 1024])]
+    #[TestWith(["stream", 32768])]
+    #[TestWith(["socket", 102400])]
     public function must_throw_exception_broken_pipe_write($type, $size)
     {
         $proxy = $this->create_proxy();
@@ -135,19 +137,19 @@ class ConnectionClosedTest extends AbstractConnectionTestCase
 
     /**
      * Try to write(publish) to closed connection after missed heartbeat.
-     * @test
      * @medium
      * @group connection
-     * @testWith ["stream", 1024]
-     *           ["stream", 32768]
-     *           ["socket", 1024]
-     *           ["socket", 32768]
      * @covers \PhpAmqpLib\Wire\IO\StreamIO::write()
      * @covers \PhpAmqpLib\Wire\IO\SocketIO::write()
      *
      * @param string $type
      * @param int $size
      */
+    #[Test]
+    #[TestWith(["stream", 1024])]
+    #[TestWith(["stream", 32768])]
+    #[TestWith(["socket", 1024])]
+    #[TestWith(["socket", 32768])]
     public function must_throw_exception_missed_heartbeat($type, $size)
     {
         $channel = $this->channel_create($type, [
@@ -179,19 +181,19 @@ class ConnectionClosedTest extends AbstractConnectionTestCase
 
     /**
      * When client constantly publish messages in async manner and broker does not send heartbeats.
-     * @test
      * @medium
      * @group connection
-     * @testWith ["stream", 1024]
-     *           ["stream", 32768]
-     *           ["socket", 1024]
-     *           ["socket", 32768]
      * @covers \PhpAmqpLib\Wire\IO\StreamIO::write()
      * @covers \PhpAmqpLib\Wire\IO\SocketIO::write()
      *
      * @param string $type
      * @param int $size
      */
+    #[Test]
+    #[TestWith(["stream", 1024])]
+    #[TestWith(["stream", 32768])]
+    #[TestWith(["socket", 1024])]
+    #[TestWith(["socket", 32768])]
     public function must_ignore_missing_heartbeat_after_recent_write($type, $size)
     {
         $channel = $this->channel_create($type, [
@@ -220,16 +222,16 @@ class ConnectionClosedTest extends AbstractConnectionTestCase
     /**
      * Try to close and reopen connection after timeout.
      *
-     * @test
      * @small
      * @group connection
      * @group proxy
-     * @testWith ["stream"]
-     *           ["socket"]
      * @covers \PhpAmqpLib\Wire\IO\StreamIO::write()
      * @covers \PhpAmqpLib\Wire\IO\SocketIO::write()
      * @param string $type
      */
+    #[Test]
+    #[TestWith(["stream"])]
+    #[TestWith(["socket"])]
     public function must_throw_exception_after_connection_was_restored($type)
     {
         $timeout = 1;
@@ -283,17 +285,17 @@ class ConnectionClosedTest extends AbstractConnectionTestCase
     /**
      * Try to close and reopen connection with two channels.
      *
-     * @test
      * @small
      * @group connection
      * @group proxy
-     * @testWith ["stream"]
-     *            ["socket"]
      * @covers \PhpAmqpLib\Wire\IO\StreamIO::write()
      * @covers \PhpAmqpLib\Wire\IO\SocketIO::write()
      *
      * @param string $type
      */
+    #[Test]
+    #[TestWith(["stream"])]
+    #[TestWith(["socket"])]
     public function must_throw_exception_after_connection_was_restored_with_two_channels($type)
     {
         $timeout = 1;
diff --git a/tests/Functional/Connection/ConnectionCreationTest.php b/tests/Functional/Connection/ConnectionCreationTest.php
index ada531b..4ee6bc9 100644
--- a/tests/Functional/Connection/ConnectionCreationTest.php
+++ b/tests/Functional/Connection/ConnectionCreationTest.php
@@ -7,6 +7,9 @@ use PhpAmqpLib\Connection\AMQPStreamConnection;
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
 use PhpAmqpLib\Wire\AMQPBufferReader;
 use PhpAmqpLib\Wire\AMQPWriter;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Test;
+use PHPUnit\Framework\Attributes\TestWith;
 
 /**
  * @group connection
@@ -32,10 +35,10 @@ class ConnectionCreationTest extends AbstractConnectionTestCase
     }
 
     /**
-     * @test
-     * @dataProvider hostDataProvider
      * @covers \PhpAmqpLib\Connection\AbstractConnection::create_connection()
      */
+    #[DataProvider('hostDataProvider')]
+    #[Test]
     public function create_connection(array $hosts)
     {
         $conn = AMQPStreamConnection::create_connection($hosts);
@@ -43,15 +46,15 @@ class ConnectionCreationTest extends AbstractConnectionTestCase
     }
 
     /**
-     * @test
-     * @testWith [0, 0, 0]
-     *           [0, 10, 0]
-     *           [10, 0, 10]
-     *           [10, 20, 10]
-     *           [20, 10, 10]
      * @covers \PhpAmqpLib\Connection\AbstractConnection::__construct()
      * @covers \PhpAmqpLib\Connection\AbstractConnection::connection_tune()
      */
+    #[Test]
+    #[TestWith([0, 0, 0])]
+    #[TestWith([0, 10, 0])]
+    #[TestWith([10, 0, 10])]
+    #[TestWith([10, 20, 10])]
+    #[TestWith([20, 10, 10])]
     public function heartbeat_negotiation(int $client, int $broker, int $expected)
     {
         $class = new \ReflectionClass(AbstractConnection::class);
diff --git a/tests/Functional/Connection/ConnectionResourceLeakTest.php b/tests/Functional/Connection/ConnectionResourceLeakTest.php
index 1d77e08..0c9a505 100644
--- a/tests/Functional/Connection/ConnectionResourceLeakTest.php
+++ b/tests/Functional/Connection/ConnectionResourceLeakTest.php
@@ -4,15 +4,14 @@ namespace Functional\Connection;
 
 use PhpAmqpLib\Connection\AbstractConnection;
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
  */
 class ConnectionResourceLeakTest extends AbstractConnectionTestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function too_many_resources_after_close()
     {
         $max = 2000;
diff --git a/tests/Functional/Connection/ConnectionUnresponsiveTest.php b/tests/Functional/Connection/ConnectionUnresponsiveTest.php
index ce3895e..3227d4b 100644
--- a/tests/Functional/Connection/ConnectionUnresponsiveTest.php
+++ b/tests/Functional/Connection/ConnectionUnresponsiveTest.php
@@ -5,6 +5,8 @@ namespace PhpAmqpLib\Tests\Functional\Connection;
 use PhpAmqpLib\Exception;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
+use PHPUnit\Framework\Attributes\Test;
+use PHPUnit\Framework\Attributes\TestWith;
 
 /**
  * @group connection
@@ -13,14 +15,14 @@ class ConnectionUnresponsiveTest extends AbstractConnectionTestCase
 {
     /**
      * Use mocked write functions to simulate completely blocked connections.
-     * @test
      * @small
-     * @testWith ["stream"]
-     *           ["socket"]
      * @covers \PhpAmqpLib\Wire\IO\StreamIO::write()
      * @covers \PhpAmqpLib\Wire\IO\SocketIO::write()
      * @param string $type
      */
+    #[Test]
+    #[TestWith(["stream"])]
+    #[TestWith(["socket"])]
     public function must_throw_exception_on_completely_blocked_connection($type)
     {
         self::$blocked = false;
@@ -52,12 +54,12 @@ class ConnectionUnresponsiveTest extends AbstractConnectionTestCase
     }
 
     /**
-     * @test
-     * @testWith ["stream"]
      * @group proxy
      * @covers \PhpAmqpLib\Connection\AbstractConnection::connect()
      * @param string $type
      */
+    #[Test]
+    #[TestWith(["stream"])]
     public function must_throw_timeout_exception_on_missing_connect_response($type)
     {
         $proxy = $this->create_proxy();
diff --git a/tests/Functional/Connection/Heartbeat/PCNTLHeartbeatSenderTest.php b/tests/Functional/Connection/Heartbeat/PCNTLHeartbeatSenderTest.php
index d60503b..a6f5d53 100644
--- a/tests/Functional/Connection/Heartbeat/PCNTLHeartbeatSenderTest.php
+++ b/tests/Functional/Connection/Heartbeat/PCNTLHeartbeatSenderTest.php
@@ -6,13 +6,16 @@ use PhpAmqpLib\Connection\AbstractConnection;
 use PhpAmqpLib\Connection\Heartbeat\PCNTLHeartbeatSender;
 use PhpAmqpLib\Exception\AMQPRuntimeException;
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
+use PHPUnit\Framework\Attributes\RequiresPhp;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
  * @group signals
  * @requires extension pcntl
- * @requires PHP 7.1
  */
+#[RequiresPhp('7.1')]
 class PCNTLHeartbeatSenderTest extends AbstractConnectionTestCase
 {
     /** @var AbstractConnection */
@@ -51,9 +54,7 @@ class PCNTLHeartbeatSenderTest extends AbstractConnectionTestCase
         $this->connection = null;
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function register_should_fail_after_unregister()
     {
         $this->expectException(AMQPRuntimeException::class);
@@ -63,9 +64,7 @@ class PCNTLHeartbeatSenderTest extends AbstractConnectionTestCase
         $this->sender->register();
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function unregister_should_return_default_signal_handler()
     {
         $this->sender->register();
@@ -74,9 +73,7 @@ class PCNTLHeartbeatSenderTest extends AbstractConnectionTestCase
         self::assertEquals(SIG_IGN, pcntl_signal_get_handler(SIGALRM));
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function heartbeat_should_interrupt_non_blocking_action()
     {
         $this->sender->register();
@@ -91,15 +88,13 @@ class PCNTLHeartbeatSenderTest extends AbstractConnectionTestCase
         self::assertEquals(2, $continuation);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function alarm_sig_should_be_registered_when_conn_is_writing()
     {
         $connection = $this->getMockBuilder(AbstractConnection::class)
             ->onlyMethods(['isConnected', 'getHeartbeat', 'isWriting', 'getLastActivity'])
             ->disableOriginalConstructor()
-            ->getMockForAbstractClass();
+            ->getMock();
 
         $connection->expects($this->exactly(3))->method('isConnected')->willReturn(true);
         $connection->expects($this->once())->method('getHeartbeat')->willReturn($this->heartbeatTimeout);
@@ -122,15 +117,15 @@ class PCNTLHeartbeatSenderTest extends AbstractConnectionTestCase
     }
 
     /**
-     * @test
      * @covers \PhpAmqpLib\Connection\Heartbeat\AbstractSignalHeartbeatSender::handleSignal
      */
+    #[Test]
     public function signal_handler_should_ignore_inactive_lazy_connections()
     {
         $connection = $this->getMockBuilder(AbstractConnection::class)
             ->onlyMethods(['isConnected', 'getHeartbeat', 'isWriting', 'getLastActivity', 'checkHeartBeat'])
             ->disableOriginalConstructor()
-            ->getMockForAbstractClass();
+            ->getMock();
         $connection
             ->expects(self::exactly(4))
             ->method('isConnected')
diff --git a/tests/Functional/Connection/Heartbeat/SIGHeartbeatSenderTest.php b/tests/Functional/Connection/Heartbeat/SIGHeartbeatSenderTest.php
index a1c0a30..e15e9b5 100644
--- a/tests/Functional/Connection/Heartbeat/SIGHeartbeatSenderTest.php
+++ b/tests/Functional/Connection/Heartbeat/SIGHeartbeatSenderTest.php
@@ -6,14 +6,17 @@ use PhpAmqpLib\Connection\AbstractConnection;
 use PhpAmqpLib\Connection\Heartbeat\SIGHeartbeatSender;
 use PhpAmqpLib\Exception\AMQPRuntimeException;
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
+use PHPUnit\Framework\Attributes\RequiresPhp;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
  * @group signals
  * @group sig
  * @requires extension pcntl
- * @requires PHP 7.1
  */
+#[RequiresPhp('7.1')]
 class SIGHeartbeatSenderTest extends AbstractConnectionTestCase
 {
     /** @var AbstractConnection */
@@ -51,9 +54,7 @@ class SIGHeartbeatSenderTest extends AbstractConnectionTestCase
         $this->connection = null;
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function register_should_fail_after_unregister()
     {
         $this->expectException(AMQPRuntimeException::class);
@@ -63,9 +64,7 @@ class SIGHeartbeatSenderTest extends AbstractConnectionTestCase
         $this->sender->register();
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function unregister_should_return_default_signal_handler()
     {
         $this->sender->register();
@@ -74,9 +73,7 @@ class SIGHeartbeatSenderTest extends AbstractConnectionTestCase
         self::assertEquals(SIG_IGN, pcntl_signal_get_handler($this->signal));
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function heartbeat_should_interrupt_non_blocking_action()
     {
         $this->sender->register();
@@ -92,15 +89,15 @@ class SIGHeartbeatSenderTest extends AbstractConnectionTestCase
     }
 
     /**
-     * @test
      * @runInSeparateProcess
      */
+    #[Test]
     public function alarm_sig_should_be_registered_when_conn_is_writing()
     {
         $connection = $this->getMockBuilder(AbstractConnection::class)
             ->onlyMethods(['isConnected', 'getHeartbeat', 'isWriting', 'getLastActivity'])
             ->disableOriginalConstructor()
-            ->getMockForAbstractClass();
+            ->getMock();
 
         $connection->expects($this->atLeast(2))->method('isConnected')->willReturn(true);
         $connection->expects($this->once())->method('getHeartbeat')->willReturn($this->heartbeatTimeout);
@@ -123,11 +120,11 @@ class SIGHeartbeatSenderTest extends AbstractConnectionTestCase
     }
 
     /**
-     * @test
      * @runInSeparateProcess
      * @outputBuffering disabled
      * @covers \PhpAmqpLib\Connection\Heartbeat\SIGHeartbeatSender::unregister()
      */
+    #[Test]
      public function child_process_must_be_terminated_after_unregister()
      {
          $property = new \ReflectionProperty(get_class($this->sender), 'childPid');
diff --git a/tests/Functional/Connection/Heartbeat/SignalHeartbeatTest.php b/tests/Functional/Connection/Heartbeat/SignalHeartbeatTest.php
index 128b675..e4726f7 100644
--- a/tests/Functional/Connection/Heartbeat/SignalHeartbeatTest.php
+++ b/tests/Functional/Connection/Heartbeat/SignalHeartbeatTest.php
@@ -7,13 +7,15 @@ use PhpAmqpLib\Connection\AbstractConnection;
 use PhpAmqpLib\Connection\Heartbeat\PCNTLHeartbeatSender;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
+use PHPUnit\Framework\Attributes\RequiresPhp;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
  * @group signals
  * @requires extension pcntl
- * @requires PHP 7.1
  */
+#[RequiresPhp('7.1')]
 class SignalHeartbeatTest extends AbstractConnectionTestCase
 {
     /** @var AbstractConnection */
@@ -67,13 +69,12 @@ class SignalHeartbeatTest extends AbstractConnectionTestCase
     }
 
     /**
-     * @test
-     *
      * @covers \PhpAmqpLib\Connection\Heartbeat\PCNTLHeartbeatSender::isSupported
      * @covers \PhpAmqpLib\Connection\Heartbeat\PCNTLHeartbeatSender::register
      * @covers \PhpAmqpLib\Connection\Heartbeat\PCNTLHeartbeatSender::registerListener
      * @covers \PhpAmqpLib\Connection\Heartbeat\PCNTLHeartbeatSender::unregister
      */
+    #[Test]
     public function process_message_longer_than_heartbeat_timeout()
     {
         $this->sender->register();
diff --git a/tests/Functional/Connection/SSLConnectionTest.php b/tests/Functional/Connection/SSLConnectionTest.php
index 831b3e4..5afed97 100644
--- a/tests/Functional/Connection/SSLConnectionTest.php
+++ b/tests/Functional/Connection/SSLConnectionTest.php
@@ -3,6 +3,9 @@
 namespace PhpAmqpLib\Tests\Functional\Connection;
 
 use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -10,11 +13,9 @@ use PhpAmqpLib\Tests\Functional\AbstractConnectionTestCase;
  */
 class SSLConnectionTest extends AbstractConnectionTestCase
 {
-    /**
-     * @test
-     * @group nophpunit11
-     * @dataProvider secure_connection_params
-     */
+    #[DataProvider('secure_connection_params')]
+    #[RequiresPhpunit('< 11')]
+    #[Test]
     public function secure_connection_default_params($options)
     {
         $port = $options['port'] ?? 5671;
@@ -27,11 +28,9 @@ class SSLConnectionTest extends AbstractConnectionTestCase
         $connection->close();
     }
 
-    /**
-     * @test
-     * @group nophpunit11
-     * @dataProvider secure_connection_params
-     */
+    #[DataProvider('secure_connection_params')]
+    #[RequiresPhpunit('< 11')]
+    #[Test]
     public function secure_connection_default_params_with_keepalive($options)
     {
         $options['keepalive'] = true;
diff --git a/tests/Functional/FileTransferTest.php b/tests/Functional/FileTransferTest.php
index 0be6087..aee381a 100644
--- a/tests/Functional/FileTransferTest.php
+++ b/tests/Functional/FileTransferTest.php
@@ -5,6 +5,7 @@ namespace PhpAmqpLib\Tests\Functional;
 use PhpAmqpLib\Connection\AMQPStreamConnection;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Tests\TestCaseCompat;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -43,9 +44,7 @@ class FileTransferTest extends TestCaseCompat
         }
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function send_file()
     {
         $this->messageBody = $this->generateRandomBytes(1024 * 1024);
diff --git a/tests/Functional/Message/AMQPMessageTest.php b/tests/Functional/Message/AMQPMessageTest.php
index 64479e8..85e7560 100644
--- a/tests/Functional/Message/AMQPMessageTest.php
+++ b/tests/Functional/Message/AMQPMessageTest.php
@@ -5,15 +5,14 @@ namespace PhpAmqpLib\Tests\Functional\Message;
 use LogicException;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Tests\Functional\Channel\ChannelTestCase;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
  */
 class AMQPMessageTest extends ChannelTestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function double_ack_throws_exception()
     {
         $sent = new AMQPMessage('test' . mt_rand());
@@ -38,9 +37,7 @@ class AMQPMessageTest extends ChannelTestCase
         $received->ack();
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function publish_confirm_mode()
     {
         $message = new AMQPMessage('test' . mt_rand());
diff --git a/tests/Functional/ReconnectConnectionTest.php b/tests/Functional/ReconnectConnectionTest.php
index 038b0e1..9e16537 100644
--- a/tests/Functional/ReconnectConnectionTest.php
+++ b/tests/Functional/ReconnectConnectionTest.php
@@ -7,6 +7,7 @@ use PhpAmqpLib\Connection\AMQPLazySocketConnection;
 use PhpAmqpLib\Connection\AMQPSocketConnection;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Tests\TestCaseCompat;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * @group connection
@@ -37,9 +38,7 @@ class ReconnectConnectionTest extends TestCaseCompat
         }
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function lazy_connection_reconnect()
     {
         $this->connection = $this->getLazyConnection();
@@ -47,9 +46,7 @@ class ReconnectConnectionTest extends TestCaseCompat
         $this->doTest();
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function lazy_connection_close_reconnect()
     {
         $this->connection = $this->getLazyConnection();
@@ -61,9 +58,7 @@ class ReconnectConnectionTest extends TestCaseCompat
         $this->assertEquals($this->msgBody, $this->publishGet()->body);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function socket_connection_reconnect()
     {
         $this->connection = $this->getSocketConnection();
@@ -71,9 +66,7 @@ class ReconnectConnectionTest extends TestCaseCompat
         $this->doTest();
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function socket_connection_close_reconnect()
     {
         $this->connection = $this->getSocketConnection();
@@ -84,9 +77,7 @@ class ReconnectConnectionTest extends TestCaseCompat
         $this->assertEquals($this->msgBody, $this->publishGet()->body);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function lazy_socket_connection_close_reconnect()
     {
         $this->connection = $this->getLazySocketConnection();
@@ -97,9 +88,7 @@ class ReconnectConnectionTest extends TestCaseCompat
         $this->assertEquals($this->msgBody, $this->publishGet()->body);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function lazy_connection_socket_reconnect()
     {
         $this->connection = $this->getLazySocketConnection();
diff --git a/tests/Functional/StreamIOTest.php b/tests/Functional/StreamIOTest.php
index 006cd7f..80a0a31 100644
--- a/tests/Functional/StreamIOTest.php
+++ b/tests/Functional/StreamIOTest.php
@@ -3,6 +3,7 @@
 namespace PhpAmqpLib\Tests\Functional;
 
 use PhpAmqpLib\Connection\AMQPStreamConnection;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\TestCase;
 
 /**
@@ -13,9 +14,7 @@ class StreamIOTest extends TestCase
     /** @var array|null */
     protected $last_error;
 
-    /**
-     * @test
-     */
+    #[Test]
     public function error_handler_is_restored_on_failed_connection()
     {
         $this->last_error = null;
@@ -49,9 +48,7 @@ class StreamIOTest extends TestCase
         $this->assertSame('custom_error_handler', $previousErrorHandler[1]);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function error_handler_is_restored_on_success()
     {
         set_error_handler(array($this, 'custom_error_handler'));
diff --git a/tests/Unit/Channel/AMQPChannelTest.php b/tests/Unit/Channel/AMQPChannelTest.php
index dda33e7..de9480a 100644
--- a/tests/Unit/Channel/AMQPChannelTest.php
+++ b/tests/Unit/Channel/AMQPChannelTest.php
@@ -9,14 +9,14 @@ use PhpAmqpLib\Tests\Unit\Test\BufferIO;
 use PhpAmqpLib\Tests\Unit\Test\TestChannel;
 use PhpAmqpLib\Tests\Unit\Test\TestConnection;
 use PhpAmqpLib\Wire\AMQPWriter;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 
 class AMQPChannelTest extends TestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function blocked_connection_exception_on_publish()
     {
         $this->expectException(AMQPConnectionBlockedException::class);
@@ -27,11 +27,11 @@ class AMQPChannelTest extends TestCase
     }
 
     /**
-     * @test
-     * @dataProvider basic_consume_invalid_arguments_provider
      * @param mixed[] $arguments
      * @param string $expectedException
      */
+    #[DataProvider('basic_consume_invalid_arguments_provider')]
+    #[Test]
     public function basic_consume_invalid_arguments($arguments, $expectedException)
     {
         $this->expectException($expectedException);
@@ -40,9 +40,7 @@ class AMQPChannelTest extends TestCase
         $channel->basic_consume(...$arguments);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function publish_batch_failed_connection(): void
     {
         $connection = new TestConnection('user', 'pass', '/', false, 'PLAIN', null, '', new BufferIO());
@@ -59,9 +57,7 @@ class AMQPChannelTest extends TestCase
         $channel->publish_batch();
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function publish_batch_opened_connection(): void
     {
         $mock_builder = $this->getMockBuilder(TestConnection::class)
@@ -100,9 +96,7 @@ class AMQPChannelTest extends TestCase
         $channel->publish_batch();
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function close_if_disconnected_false(): void
     {
         $mockBuilder = $this->getMockBuilder(TestConnection::class)
@@ -131,9 +125,7 @@ class AMQPChannelTest extends TestCase
         $this->assertFalse($firstResult);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function close_if_disconnected_true(): void
     {
         $mockBuilder = $this->getMockBuilder(TestConnection::class)
diff --git a/tests/Unit/Connection/AMQPConnectionConfigTest.php b/tests/Unit/Connection/AMQPConnectionConfigTest.php
index 7eb8ee6..71fd6a6 100644
--- a/tests/Unit/Connection/AMQPConnectionConfigTest.php
+++ b/tests/Unit/Connection/AMQPConnectionConfigTest.php
@@ -5,22 +5,20 @@ namespace PhpAmqpLib\Tests\Unit\Connection;
 use PhpAmqpLib\Connection\AMQPConnectionConfig;
 use PhpAmqpLib\Connection\AMQPConnectionFactory;
 use PhpAmqpLib\Exception\AMQPIOException;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\TestCase;
 
 class AMQPConnectionConfigTest extends TestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function check_default_connection_name()
     {
         $config = new AMQPConnectionConfig();
         $this->assertEquals('', $config->getConnectionName());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function set_get_connection_name()
     {
         $config = new AMQPConnectionConfig();
@@ -29,9 +27,7 @@ class AMQPConnectionConfigTest extends TestCase
         $this->assertEquals($name, $config->getConnectionName());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function external_auth_with_user_credentials()
     {
         $this->expectException(\InvalidArgumentException::class);
@@ -44,9 +40,7 @@ class AMQPConnectionConfigTest extends TestCase
         $config->setLoginMethod(AMQPConnectionConfig::AUTH_EXTERNAL);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function secure_with_incorrect_crypto_method()
     {
         $this->expectException(AMQPIOException::class);
@@ -73,10 +67,8 @@ class AMQPConnectionConfigTest extends TestCase
         AMQPConnectionFactory::create($config);
     }
 
-    /**
-     * @test
-     * @group nophpunit11
-     */
+    #[RequiresPhpunit('< 11')]
+    #[Test]
     public function secure_with_correct_crypto_method()
     {
         $cert_dir = realpath(__DIR__ . "/../../certs");
@@ -103,10 +95,8 @@ class AMQPConnectionConfigTest extends TestCase
         $this->assertEquals(true, $connection->isConnected());
     }
 
-    /**
-     * @group nophpunit11
-     * @test
-     */
+    #[RequiresPhpunit('< 11')]
+    #[Test]
     public function insecure_connection()
     {
         $config = new AMQPConnectionConfig();
@@ -126,9 +116,7 @@ class AMQPConnectionConfigTest extends TestCase
         $this->assertEquals(true, $connection->isConnected());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function check_invalid_port_number()
     {
         $this->expectException(\InvalidArgumentException::class);
@@ -138,9 +126,7 @@ class AMQPConnectionConfigTest extends TestCase
         $config->setPort(-1);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function check_invalid_login_method()
     {
         $this->expectException(\InvalidArgumentException::class);
@@ -149,9 +135,7 @@ class AMQPConnectionConfigTest extends TestCase
         $config->setLoginMethod('INVALID_METHOD');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function set_invalid_amqp_protocol()
     {
         $this->expectException(\InvalidArgumentException::class);
@@ -162,9 +146,7 @@ class AMQPConnectionConfigTest extends TestCase
         $config->setAMQPProtocol($protocol);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function set_invalid_stream_context()
     {
         $this->expectException(\InvalidArgumentException::class);
diff --git a/tests/Unit/Connection/AMQPSocketConnectionTest.php b/tests/Unit/Connection/AMQPSocketConnectionTest.php
index 6dd5ff5..d4c6ed4 100644
--- a/tests/Unit/Connection/AMQPSocketConnectionTest.php
+++ b/tests/Unit/Connection/AMQPSocketConnectionTest.php
@@ -3,13 +3,12 @@
 namespace PhpAmqpLib\Tests\Unit\Connection;
 
 use PhpAmqpLib\Connection\AMQPSocketConnection;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\TestCase;
 
 class AMQPSocketConnectionTest extends TestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function channel_rpc_timeout_should_be_invalid_if_greater_than_read_write_timeout()
     {
         $this->expectException(\InvalidArgumentException::class);
diff --git a/tests/Unit/Connection/AMQPStreamConnectionTest.php b/tests/Unit/Connection/AMQPStreamConnectionTest.php
index 8ea2679..904bf06 100644
--- a/tests/Unit/Connection/AMQPStreamConnectionTest.php
+++ b/tests/Unit/Connection/AMQPStreamConnectionTest.php
@@ -4,13 +4,12 @@ namespace PhpAmqpLib\Tests\Unit\Connection;
 
 use InvalidArgumentException;
 use PhpAmqpLib\Connection\AMQPStreamConnection;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\TestCase;
 
 class AMQPStreamConnectionTest extends TestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function channel_rpc_timeout_should_be_invalid_if_greater_than_read_write_timeout(): void
     {
         $this->expectException(InvalidArgumentException::class);
@@ -36,9 +35,9 @@ class AMQPStreamConnectionTest extends TestCase
     }
 
     /**
-     * @test
      * Generate deprecation warning if ssl_protocol is set
      */
+    #[Test]
     public function trigger_deprecation_is_ssl_protocol_set(): void
     {
         $deprecationMessage = '';
diff --git a/tests/Unit/Connection/AbstractConnectionTestCase.php b/tests/Unit/Connection/AbstractConnectionTestCase.php
index 63f885f..c18bca1 100644
--- a/tests/Unit/Connection/AbstractConnectionTestCase.php
+++ b/tests/Unit/Connection/AbstractConnectionTestCase.php
@@ -9,14 +9,14 @@ use PhpAmqpLib\Connection\AMQPConnectionFactory;
 use PhpAmqpLib\Exception\AMQPConnectionClosedException;
 use PhpAmqpLib\Tests\Unit\Test\TestConnection;
 use PhpAmqpLib\Wire\IO\AbstractIO;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 
 class AbstractConnectionTestCase extends TestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function connection_argument_io_not_empty(): void
     {
         $this->expectException(\InvalidArgumentException::class);
@@ -25,9 +25,7 @@ class AbstractConnectionTestCase extends TestCase
         new TestConnection('', '');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function connection_login_method_external(): void
     {
         $config = new AMQPConnectionConfig();
@@ -45,9 +43,8 @@ class AbstractConnectionTestCase extends TestCase
         self::assertEquals($response, $property->getValue($connection));
     }
 
-    /**
-     * @test
-     */
+    #[RequiresPhpunit('< 12')]
+    #[Test]
     public function close_channels_if_disconnected(): void
     {
         $ioMock = $this->createMock(AbstractIO::class);
diff --git a/tests/Unit/Connection/LazyConnectionTest.php b/tests/Unit/Connection/LazyConnectionTest.php
index 08adb51..c026536 100644
--- a/tests/Unit/Connection/LazyConnectionTest.php
+++ b/tests/Unit/Connection/LazyConnectionTest.php
@@ -7,12 +7,11 @@ use PhpAmqpLib\Connection\AMQPLazySocketConnection;
 use PhpAmqpLib\Connection\AMQPLazySSLConnection;
 use PhpAmqpLib\Connection\AMQPSocketConnection;
 use PhpAmqpLib\Tests\TestCaseCompat;
+use PHPUnit\Framework\Attributes\Test;
 
 class LazyConnectionTest extends TestCaseCompat
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function lazy_stream_connection_multiple_hosts_unsupported()
     {
         $this->expectException(\RuntimeException::class);
@@ -28,9 +27,7 @@ class LazyConnectionTest extends TestCaseCompat
         );
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function lazy_socket_connection_multiple_hosts_unsupported()
     {
         $this->expectException(\RuntimeException::class);
@@ -46,9 +43,7 @@ class LazyConnectionTest extends TestCaseCompat
         );
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function lazy_ssl_connection_multiple_hosts_unsupported()
     {
         $this->expectException(\RuntimeException::class);
diff --git a/tests/Unit/Connection/LibraryPropertiesTest.php b/tests/Unit/Connection/LibraryPropertiesTest.php
index ebb015a..e95b526 100644
--- a/tests/Unit/Connection/LibraryPropertiesTest.php
+++ b/tests/Unit/Connection/LibraryPropertiesTest.php
@@ -3,6 +3,7 @@
 namespace PhpAmqpLib\Tests\Unit\Connection;
 
 use PhpAmqpLib\Tests\TestCaseCompat;
+use PHPUnit\Framework\Attributes\Test;
 
 /**
  * Test the library properties
@@ -19,9 +20,8 @@ class LibraryPropertiesTest extends TestCaseCompat
      *    "platform", giving the name of the operating system,
      *    "copyright", if appropriate, and
      *    "information", giving other general information.
-     *
-     * @test
      */
+    #[Test]
     public function requiredProperties()
     {
         $connection = $this->getMockBuilder('\PhpAmqpLib\Connection\AMQPStreamConnection')
@@ -45,9 +45,8 @@ class LibraryPropertiesTest extends TestCaseCompat
     /**
      * AMQPWriter::table_write expects values given with data types and values
      * ensure each property is an array with the first value being a data type
-     *
-     * @test
      */
+    #[Test]
     public function propertyTypes()
     {
         $connection = $this->getMockBuilder('\PhpAmqpLib\Connection\AMQPStreamConnection')
diff --git a/tests/Unit/Helper/MiscHelperTest.php b/tests/Unit/Helper/MiscHelperTest.php
index bf28eca..adeabd2 100644
--- a/tests/Unit/Helper/MiscHelperTest.php
+++ b/tests/Unit/Helper/MiscHelperTest.php
@@ -4,30 +4,26 @@ namespace PhpAmqpLib\Tests\Unit\Helper;
 
 use PhpAmqpLib\Helper\MiscHelper;
 use PhpAmqpLib\Tests\TestCaseCompat;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Test;
 
 class MiscHelperTest extends TestCaseCompat
 {
-    /**
-     * @dataProvider splitSecondsMicrosecondsData
-     * @test
-     */
+    #[DataProvider('splitSecondsMicrosecondsData')]
+    #[Test]
     public function split_seconds_microseconds($input, $expected)
     {
         self::assertEquals($expected, MiscHelper::splitSecondsMicroseconds($input));
     }
 
-    /**
-     * @dataProvider hexdumpData
-     * @test
-     */
+    #[DataProvider('hexdumpData')]
+    #[Test]
     public function hexdump($args, $expected)
     {
         self::assertPattern($expected, MiscHelper::hexdump($args[0], $args[1], $args[2], $args[3]));
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function method_sig()
     {
         self::assertEquals('test', MiscHelper::methodSig('test'));
diff --git a/tests/Unit/Helper/Protocol/Protocol091Test.php b/tests/Unit/Helper/Protocol/Protocol091Test.php
index 552b1c6..d1916a5 100644
--- a/tests/Unit/Helper/Protocol/Protocol091Test.php
+++ b/tests/Unit/Helper/Protocol/Protocol091Test.php
@@ -4,6 +4,7 @@ namespace PhpAmqpLib\Tests\Unit\Helper\Protocol;
 
 use PhpAmqpLib\Helper\Protocol\Protocol091;
 use PhpAmqpLib\Tests\TestCaseCompat;
+use PHPUnit\Framework\Attributes\Test;
 
 class Protocol091Test extends TestCaseCompat
 {
@@ -14,9 +15,7 @@ class Protocol091Test extends TestCaseCompat
         $this->protocol091 = new Protocol091();
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function channel_close()
     {
         $expected = "\x00\x00\x00\x00\x00\x00\x00";
@@ -25,9 +24,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function channel_close_error()
     {
         $expected = "\x00\x00\x05error\x00\x00\x00\x00";
@@ -39,9 +36,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function channel_flow_true()
     {
         $expected = "\x01";
@@ -50,9 +45,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function channel_flow_false()
     {
         $expected = "\x00";
@@ -61,9 +54,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function channel_open_foo()
     {
         $expected = "\x03foo";
@@ -72,9 +63,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function channel_open_empty_string()
     {
         $expected = "\x00";
@@ -83,9 +72,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function access_request()
     {
         $expected = "\x01/\x00";
@@ -94,9 +81,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function access_request_foo()
     {
         $expected = "\x04/foo\x00";
@@ -112,9 +97,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function exchange_declare()
     {
         $expected = "\x00\x00\x03foo\x06direct\x00\x00\x00\x00\x00";
@@ -133,9 +116,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function exchange_delete()
     {
         $expected = "\x00\x00\x03foo\x00";
@@ -144,9 +125,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function exchange_bind()
     {
         $expected = "\x00\x00\x03foo\x03bar\x03baz\x00\x00\x00\x00\x00";
@@ -155,9 +134,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function exchange_unbind()
     {
         $expected = "\x00\x00\x03foo\x03bar\x03baz\x00\x00\x00\x00\x00";
@@ -166,9 +143,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function queue_bind()
     {
         $expected = "\x00\x00\x03foo\x03bar\x03baz\x00\x00\x00\x00\x00";
@@ -177,9 +152,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function queue_unbind()
     {
         $expected = "\x00\x00\x03foo\x03bar\x03baz\x00\x00\x00\x00";
@@ -188,9 +161,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function queue_declare()
     {
         $expected = "\x00\x00\x03foo\x00\x00\x00\x00\x00";
@@ -208,9 +179,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function queue_delete()
     {
         $expected = "\x00\x00\x03foo\x00";
@@ -219,9 +188,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function queue_purge()
     {
         $expected = "\x00\x00\x03foo\x00";
@@ -230,9 +197,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_ack()
     {
         $expected = "\x00\x00\x00\x00\x00\x00\x00\x01\x00";
@@ -241,9 +206,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_cancel()
     {
         $expected = "\x03foo\x00";
@@ -252,9 +215,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_consume()
     {
         $expected = "\x00\x00\x03foo\x03bar\x00\x00\x00\x00\x00";
@@ -271,9 +232,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_get()
     {
         $expected = "\x00\x00\x03foo\x00";
@@ -282,9 +241,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_publish()
     {
         $expected = "\x00\x00\x03foo\x03bar\x00";
@@ -293,9 +250,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_qos()
     {
         $expected = "\x00\x00\x00\xA\x00\x01\x00";
@@ -304,9 +259,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_recover_true()
     {
         $expected = "\x01";
@@ -315,9 +268,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_recover_false()
     {
         $expected = "\x00";
@@ -326,9 +277,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_reject_1_true()
     {
         $expected = "\x00\x00\x00\x00\x00\x00\x00\x01\x01";
@@ -337,9 +286,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function basic_reject_1_false()
     {
         $expected = "\x00\x00\x00\x00\x00\x00\x00\x01\x00";
@@ -348,9 +295,7 @@ class Protocol091Test extends TestCaseCompat
         $this->assertEquals($expected, $args->getvalue());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function connection_blocked()
     {
         $expected = 'Low on memory';
diff --git a/tests/Unit/Message/AMQPMessageTest.php b/tests/Unit/Message/AMQPMessageTest.php
index 2d5b0a7..6563673 100644
--- a/tests/Unit/Message/AMQPMessageTest.php
+++ b/tests/Unit/Message/AMQPMessageTest.php
@@ -5,14 +5,14 @@ namespace PhpAmqpLib\Tests\Unit\Message;
 use PhpAmqpLib\Exception\AMQPEmptyDeliveryTagException;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Wire\AMQPBufferReader;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\TestCase;
 
 class AMQPMessageTest extends TestCase
 {
-    /**
-     * @dataProvider propertiesData
-     * @test
-     */
+    #[DataProvider('propertiesData')]
+    #[Test]
     public function serialize_properties(array $expected, array $properties)
     {
         $reader = new AMQPBufferReader('');
@@ -30,9 +30,7 @@ class AMQPMessageTest extends TestCase
         $this->assertEquals($expected, $props);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function get_and_set_body()
     {
         $message = new AMQPMessage('');
@@ -45,9 +43,7 @@ class AMQPMessageTest extends TestCase
         $this->assertEquals($message->getContentEncoding(), 'shortstr');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function delivery_tag_immutable()
     {
         $message = new AMQPMessage();
@@ -58,9 +54,7 @@ class AMQPMessageTest extends TestCase
         $message->setDeliveryTag(1231);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function delivery_tag_empty()
     {
         $this->expectException(AMQPEmptyDeliveryTagException::class);
diff --git a/tests/Unit/Wire/AMQPCollectionTest.php b/tests/Unit/Wire/AMQPCollectionTest.php
index 0247fe1..255709c 100644
--- a/tests/Unit/Wire/AMQPCollectionTest.php
+++ b/tests/Unit/Wire/AMQPCollectionTest.php
@@ -6,13 +6,12 @@ use PhpAmqpLib\Exception\AMQPInvalidArgumentException;
 use PhpAmqpLib\Exception\AMQPOutOfBoundsException;
 use PhpAmqpLib\Exception\AMQPOutOfRangeException;
 use PhpAmqpLib\Wire;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\TestCase;
 
 class AMQPCollectionTest extends TestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function encode_080()
     {
         $this->setProtoVersion(Wire\Constants080::VERSION);
@@ -106,9 +105,7 @@ class AMQPCollectionTest extends TestCase
         $this->assertEquals(true, $eData[9][1] instanceof Wire\AMQPTable);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function encode_091()
     {
         $this->setProtoVersion(Wire\Constants091::VERSION);
@@ -205,9 +202,7 @@ class AMQPCollectionTest extends TestCase
         $this->assertEquals(true, $eData[9][1] instanceof Wire\AMQPArray);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function encode_rabbit()
     {
         $this->setProtoVersion(Wire\AMQPAbstractCollection::PROTOCOL_RBT);
@@ -304,18 +299,14 @@ class AMQPCollectionTest extends TestCase
         $this->assertEquals(true, $eData[9][1] instanceof Wire\AMQPArray);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function encode_unknown_data_type()
     {
         $this->expectException(AMQPOutOfBoundsException::class);
         new Wire\AMQPArray(array(new \stdClass()));
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function push_unsupported_data_type_080()
     {
         $this->expectException(AMQPOutOfRangeException::class);
@@ -326,9 +317,7 @@ class AMQPCollectionTest extends TestCase
         $a->push(12345, Wire\AMQPAbstractCollection::T_INT_LONGLONG);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function push_unsupported_data_type_091()
     {
         $this->expectException(AMQPOutOfRangeException::class);
@@ -339,9 +328,7 @@ class AMQPCollectionTest extends TestCase
         $a->push(12345, 'foo');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function push_unsupported_data_type_rabbit()
     {
         $this->expectException(AMQPOutOfRangeException::class);
@@ -352,9 +339,7 @@ class AMQPCollectionTest extends TestCase
         $a->push(12345, Wire\AMQPAbstractCollection::T_INT_LONGLONG_U);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function push_with_type()
     {
         $a = new Wire\AMQPArray();
@@ -397,9 +382,7 @@ class AMQPCollectionTest extends TestCase
         );
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function conflicting_field_symbols()
     {
         $this->setProtoVersion(Wire\Constants091::VERSION);
@@ -443,9 +426,7 @@ class AMQPCollectionTest extends TestCase
         );
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function set_empty_key()
     {
         $this->expectException(AMQPInvalidArgumentException::class);
@@ -456,9 +437,7 @@ class AMQPCollectionTest extends TestCase
         $t->set('', 'foo');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function set_long_key()
     {
         $this->expectException(AMQPInvalidArgumentException::class);
@@ -469,9 +448,7 @@ class AMQPCollectionTest extends TestCase
         $t->set(str_repeat('a', 129), 'bar');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function push_mismatched_type()
     {
         $this->expectException(AMQPInvalidArgumentException::class);
@@ -481,9 +458,7 @@ class AMQPCollectionTest extends TestCase
         $a->push(new Wire\AMQPArray(), Wire\AMQPArray::T_TABLE);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function push_raw_array_with_type()
     {
         $this->expectException(AMQPInvalidArgumentException::class);
@@ -494,9 +469,7 @@ class AMQPCollectionTest extends TestCase
         $a->push(array(), Wire\AMQPArray::T_ARRAY);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function push_raw_table_with_type()
     {
         $this->expectException(AMQPInvalidArgumentException::class);
@@ -507,9 +480,7 @@ class AMQPCollectionTest extends TestCase
         $a->push(array(), Wire\AMQPArray::T_TABLE);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function push_float_with_decimal_type()
     {
         $this->expectException(AMQPInvalidArgumentException::class);
@@ -520,9 +491,7 @@ class AMQPCollectionTest extends TestCase
         $a->push(35.2, Wire\AMQPArray::T_DECIMAL);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function array_round_trip_080()
     {
         $this->setProtoVersion(Wire\Constants080::VERSION);
@@ -531,9 +500,7 @@ class AMQPCollectionTest extends TestCase
         $this->assertEquals(array_values($this->getTestDataCmp080()), $a->getNativeData());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function array_round_trip_091()
     {
         $this->setProtoVersion(Wire\Constants091::VERSION);
@@ -542,9 +509,7 @@ class AMQPCollectionTest extends TestCase
         $this->assertEquals(array_values($this->getTestDataCmp()), $a->getNativeData());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function array_round_trip_rabbit()
     {
         $this->setProtoVersion(Wire\AMQPAbstractCollection::PROTOCOL_RBT);
@@ -553,9 +518,7 @@ class AMQPCollectionTest extends TestCase
         $this->assertEquals(array_values($this->getTestDataCmp()), $a->getNativeData());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function table_round_trip_080()
     {
         $this->setProtoVersion(Wire\Constants080::VERSION);
@@ -564,9 +527,7 @@ class AMQPCollectionTest extends TestCase
         $this->assertEquals($this->getTestDataCmp080(), $a->getNativeData());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function table_round_trip_091()
     {
         $this->setProtoVersion(Wire\Constants091::VERSION);
@@ -575,9 +536,7 @@ class AMQPCollectionTest extends TestCase
         $this->assertEquals($this->getTestDataCmp(), $a->getNativeData());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function table_round_trip_rabbit()
     {
         $this->setProtoVersion(Wire\AMQPAbstractCollection::PROTOCOL_RBT);
@@ -586,9 +545,7 @@ class AMQPCollectionTest extends TestCase
         $this->assertEquals($this->getTestDataCmp(), $a->getNativeData());
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function iterator()
     {
         $d = [
@@ -645,9 +602,7 @@ class AMQPCollectionTest extends TestCase
         }
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function work_with_table_as_array()
     {
         $a = new Wire\AMQPTable();
diff --git a/tests/Unit/Wire/AMQPDecimalTest.php b/tests/Unit/Wire/AMQPDecimalTest.php
index 15aab25..f934348 100644
--- a/tests/Unit/Wire/AMQPDecimalTest.php
+++ b/tests/Unit/Wire/AMQPDecimalTest.php
@@ -3,13 +3,12 @@
 namespace PhpAmqpLib\Tests\Unit\Wire;
 
 use PhpAmqpLib\Wire\AMQPDecimal;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\TestCase;
 
 class AMQPDecimalTest extends TestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function as_bc_value()
     {
         $decimal = new AMQPDecimal(100, 2);
@@ -17,9 +16,7 @@ class AMQPDecimalTest extends TestCase
         $this->assertEquals($decimal->asBCvalue(), 1);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function get_n()
     {
         $decimal = new AMQPDecimal(100, 2);
@@ -27,9 +24,7 @@ class AMQPDecimalTest extends TestCase
         $this->assertEquals($decimal->getN(), 100);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function get_e()
     {
         $decimal = new AMQPDecimal(100, 2);
@@ -37,9 +32,7 @@ class AMQPDecimalTest extends TestCase
         $this->assertEquals($decimal->getE(), 2);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function negative_value()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPOutOfBoundsException::class);
diff --git a/tests/Unit/Wire/AMQPWriterTest.php b/tests/Unit/Wire/AMQPWriterTest.php
index 932851c..4055792 100644
--- a/tests/Unit/Wire/AMQPWriterTest.php
+++ b/tests/Unit/Wire/AMQPWriterTest.php
@@ -9,12 +9,11 @@ use PhpAmqpLib\Wire\AMQPTable;
 use PhpAmqpLib\Wire\AMQPWriter;
 use PhpAmqpLib\Tests\TestCaseCompat;
 use PhpAmqpLib\Wire\AMQPAbstractCollection;
+use PHPUnit\Framework\Attributes\Test;
 
 class AMQPWriterTest extends TestCaseCompat
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function write_array()
     {
         $this->setProtoVersion(Wire\Constants091::VERSION);
@@ -32,9 +31,7 @@ class AMQPWriterTest extends TestCaseCompat
         $this->assertEquals($expected, $out);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function write_AMQP_array()
     {
         $this->setProtoVersion(Wire\Constants091::VERSION);
@@ -54,9 +51,7 @@ class AMQPWriterTest extends TestCaseCompat
         );
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function write_table()
     {
         $this->setProtoVersion(Wire\Constants091::VERSION);
@@ -80,9 +75,7 @@ class AMQPWriterTest extends TestCaseCompat
         $this->assertEquals($expected, $out);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function write_AMQP_table()
     {
         $t = new AMQPTable();
@@ -108,9 +101,7 @@ class AMQPWriterTest extends TestCaseCompat
         );
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function write_table_with_invalid_type()
     {
         $this->expectException(AMQPOutOfRangeException::class);
@@ -122,9 +113,7 @@ class AMQPWriterTest extends TestCaseCompat
         ]);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function write_table_with_null_strings()
     {
         $this->setProtoVersion(Wire\Constants091::VERSION);
diff --git a/tests/Unit/Wire/IO/SocketIOTest.php b/tests/Unit/Wire/IO/SocketIOTest.php
index 7226ab4..836860f 100644
--- a/tests/Unit/Wire/IO/SocketIOTest.php
+++ b/tests/Unit/Wire/IO/SocketIOTest.php
@@ -4,6 +4,8 @@ namespace PhpAmqpLib\Tests\Unit\Wire\IO;
 
 use PhpAmqpLib\Exception\AMQPConnectionClosedException;
 use PhpAmqpLib\Wire\IO\SocketIO;
+use PHPUnit\Framework\Attributes\Depends;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\TestCase;
 
 /**
@@ -11,9 +13,7 @@ use PHPUnit\Framework\TestCase;
  */
 class SocketIOTest extends TestCase
 {
-    /**
-     * @test
-     */
+    #[Test]
     public function connect()
     {
         $socketIO = new SocketIO(HOST, PORT, 20, true, 20, 9);
@@ -24,9 +24,7 @@ class SocketIOTest extends TestCase
         return $socketIO;
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function connect_ipv6()
     {
         $socketIO = new SocketIO(HOST6, PORT, 20, true, 20, 9);
@@ -35,9 +33,7 @@ class SocketIOTest extends TestCase
         $this->assertEquals(0, $ready);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function connect_with_invalid_credentials()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPIOException::class);
@@ -49,28 +45,26 @@ class SocketIOTest extends TestCase
     // TODO FUTURE re-enable test
     // php-amqplib/php-amqplib#648, php-amqplib/php-amqplib#666
     // /**
-    //  * @test
     //  * @expectedException \InvalidArgumentException
     //  * @expectedExceptionMessage read_timeout must be greater than 2x the heartbeat
     //  */
+    // #[Test]
     // public function read_timeout_must_be_greater_than_2x_the_heartbeat()
     // {
     //     new SocketIO('localhost', 5512, 1);
     // }
     // /**
-    //  * @test
     //  * @expectedException \InvalidArgumentException
     //  * @expectedExceptionMessage send_timeout must be greater than 2x the heartbeat
     //  */
+    // #[Test]
     // public function send_timeout_must_be_greater_than_2x_the_heartbeat()
     // {
     //     new SocketIO('localhost', '5512', 30, true, 20, 10);
     // }
 
-    /**
-     * @test
-     * @depends connect
-     */
+    #[Test]
+    #[Depends('connect')]
     public function read_when_closed(SocketIO $socketIO)
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPSocketException::class);
@@ -80,10 +74,8 @@ class SocketIOTest extends TestCase
         $socketIO->read(1);
     }
 
-    /**
-     * @test
-     * @depends connect
-     */
+    #[Test]
+    #[Depends('connect')]
     public function write_when_closed(SocketIO $socketIO)
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPSocketException::class);
@@ -92,10 +84,10 @@ class SocketIOTest extends TestCase
     }
 
     /**
-     * @test
      * @group linux
      * @requires OS Linux
      */
+    #[Test]
     public function select_must_throw_io_exception()
     {
         $this->expectException(AMQPConnectionClosedException::class);
diff --git a/tests/Unit/Wire/IO/StreamIOTest.php b/tests/Unit/Wire/IO/StreamIOTest.php
index 0df94d2..becd120 100644
--- a/tests/Unit/Wire/IO/StreamIOTest.php
+++ b/tests/Unit/Wire/IO/StreamIOTest.php
@@ -4,6 +4,7 @@ namespace PhpAmqpLib\Tests\Unit\Wire\IO;
 
 use PhpAmqpLib\Exception\AMQPConnectionClosedException;
 use PhpAmqpLib\Wire\IO\StreamIO;
+use PHPUnit\Framework\Attributes\Test;
 use PHPUnit\Framework\TestCase;
 
 /**
@@ -12,10 +13,10 @@ use PHPUnit\Framework\TestCase;
 class StreamIOTest extends TestCase
 {
     /**
-     * @test
      * @expectedException \InvalidArgumentException
      * @expectedExceptionMessage read_write_timeout must be at least 2x the heartbeat
      * TODO FUTURE re-enable this test
+    #[Test]
     public function read_write_timeout_must_be_at_least_2x_the_heartbeat()
     {
         new StreamIO(
@@ -31,10 +32,10 @@ class StreamIOTest extends TestCase
      */
 
     /**
-     * @test
      * @group linux
      * @requires OS Linux
      */
+    #[Test]
     public function select_must_throw_io_exception()
     {
         $this->expectException(AMQPConnectionClosedException::class);
@@ -50,9 +51,7 @@ class StreamIOTest extends TestCase
         $stream->select(0, 0);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function connect_ipv6()
     {
         $streamIO = new StreamIO(HOST6, PORT, 0.1, 0.1, null, false, 0);
diff --git a/tests/Unit/WireTest.php b/tests/Unit/WireTest.php
index e7aecc5..5ff09a3 100644
--- a/tests/Unit/WireTest.php
+++ b/tests/Unit/WireTest.php
@@ -8,6 +8,8 @@ use PhpAmqpLib\Wire\AMQPArray;
 use PhpAmqpLib\Wire\AMQPBufferReader;
 use PhpAmqpLib\Wire\AMQPTable;
 use PhpAmqpLib\Wire\AMQPWriter;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Test;
 
 class WireTest extends TestCaseCompat
 {
@@ -17,72 +19,56 @@ class WireTest extends TestCaseCompat
         $this->setProtoVersion(AMQPAbstractCollection::PROTOCOL_RBT);
     }
 
-    /**
-     * @dataProvider bitWrData
-     * @test
-     */
+    #[DataProvider('bitWrData')]
+    #[Test]
     public function bit_wr($value)
     {
         $this->wr($value, 'write_bit', 'read_bit');
     }
 
-    /**
-     * @dataProvider octetWrData
-     * @test
-     */
+    #[DataProvider('octetWrData')]
+    #[Test]
     public function octet_wr($value)
     {
         $this->wr($value, 'write_octet', 'read_octet');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function octet_wr_out_of_range_lower()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(-1, 'write_octet', 'read_octet');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function octet_wr_out_of_range_upper()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(256, 'write_octet', 'read_octet');
     }
 
-    /**
-     * @dataProvider signedOctetWrData
-     * @test
-     */
+    #[DataProvider('signedOctetWrData')]
+    #[Test]
     public function signed_octet_wr($value)
     {
         $this->wr($value, 'write_signed_octet', 'read_signed_octet');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function signed_octet_wr_out_of_range_lower()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(-129, 'write_signed_octet', 'read_signed_octet');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function signed_octet_wr_out_of_range_upper()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(128, 'write_signed_octet', 'read_signed_octet');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function short_wr()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
@@ -90,198 +76,154 @@ class WireTest extends TestCaseCompat
         $this->wr(65536, 'write_short', 'read_short');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function short_wr_out_of_range_lower()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(-1, 'write_short', 'read_short');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function short_wr_out_of_range_upper()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(65536, 'write_short', 'read_short');
     }
 
-    /**
-     * @dataProvider signedShortWrData
-     * @test
-     */
+    #[DataProvider('signedShortWrData')]
+    #[Test]
     public function signed_short_wr($value)
     {
         $this->wr($value, 'write_signed_short', 'read_signed_short');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function signed_short_wr_out_of_range_lower()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(-32769, 'write_signed_short', 'read_signed_short');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function signed_short_wr_out_of_range_upper()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(32768, 'write_signed_short', 'read_signed_short');
     }
 
-    /**
-     * @dataProvider longWrData
-     * @test
-     */
+    #[DataProvider('longWrData')]
+    #[Test]
     public function long_wr($value)
     {
         $this->wr($value, 'write_long', 'read_long');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function long_wr_out_of_range_lower()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(-1, 'write_long', 'read_long');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function long_wr_out_of_range_upper()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr('4294967296', 'write_long', 'read_long');
     }
 
-    /**
-     * @dataProvider signedLongWrData
-     * @test
-     */
+    #[DataProvider('signedLongWrData')]
+    #[Test]
     public function signed_long_wr($value)
     {
         $this->wr($value, 'writeSignedLong', 'readSignedLong', true);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function signed_long_wr_out_of_range_lower()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr('-2147483649', 'writeSignedLong', 'readSignedLong', true);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function signed_long_wr_out_of_range_upper()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr('2147483648', 'writeSignedLong', 'readSignedLong', true);
     }
 
-    /**
-     * @dataProvider longlongWrData
-     * @test
-     */
+    #[DataProvider('longlongWrData')]
+    #[Test]
     public function longlong_wr($value)
     {
         $this->wr($value, 'write_longlong', 'read_longlong');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function longlong_wr_out_of_range_lower()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr('-1', 'write_longlong', 'read_longlong');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function longlong_wr_out_of_range_upper()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr('18446744073709551616', 'write_longlong', 'read_longlong');
     }
 
-    /**
-     * @dataProvider signedLonglongWrData
-     * @test
-     */
+    #[DataProvider('signedLonglongWrData')]
+    #[Test]
     public function signed_longlong_wr($value)
     {
         $this->wr($value, 'write_signed_longlong', 'read_signed_longlong');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function signed_longlong_wr_out_of_range_lower()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr('-9223372036854775809', 'write_signed_longlong', 'read_signed_longlong');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function signed_longlong_wr_out_of_range_upper()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr('9223372036854775808', 'write_signed_longlong', 'read_signed_longlong');
     }
 
-    /**
-     * @dataProvider shortstrWrData
-     * @test
-     */
+    #[DataProvider('shortstrWrData')]
+    #[Test]
     public function shortstr_wr($value)
     {
         $this->wr($value, 'write_shortstr', 'read_shortstr');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function shortstr_wr_out_of_range_ASCII()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(str_repeat('z', 256), 'write_shortstr', 'read_shortstr');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function shortstr_wr_out_of_range_utf_two_byte()
     {
         $this->expectException(\PhpAmqpLib\Exception\AMQPInvalidArgumentException::class);
         $this->wr(str_repeat("\xd0\xaf", 128), 'write_shortstr', 'read_shortstr');
     }
 
-    /**
-     * @dataProvider longstrWrData
-     * @test
-     */
+    #[DataProvider('longstrWrData')]
+    #[Test]
     public function longstr_wr($value)
     {
         $this->wr($value, 'write_longstr', 'read_longstr');
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function array_wr_native()
     {
         $d = [
@@ -303,9 +245,7 @@ class WireTest extends TestCaseCompat
         $this->assertEquals($d, $rd);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function array_wr_collection()
     {
         $w = new AMQPWriter();
@@ -366,9 +306,7 @@ class WireTest extends TestCaseCompat
         );
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function table_wr_native()
     {
         $d = [
@@ -393,9 +331,7 @@ class WireTest extends TestCaseCompat
         $this->assertEquals($d, $rd);
     }
 
-    /**
-     * @test
-     */
+    #[Test]
     public function table_wr_collection()
     {
         $w = new AMQPWriter();
