QPIDJMS-593: convert/update the tests to use JUnit 5
diff --git a/pom.xml b/pom.xml
index e0a0048..eebd986 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,7 +47,7 @@
     <!-- Test Dependency Versions for this Project -->
     <netty-tcnative-version>2.0.61.Final</netty-tcnative-version>
     <activemq-version>5.18.1</activemq-version>
-    <junit-version>4.13.2</junit-version>
+    <junit.jupiter.version>5.10.0</junit.jupiter.version>
     <jetty-version>9.4.51.v20230217</jetty-version>
     <mockito-version>5.4.0</mockito-version>
     <hamcrest-version>2.2</hamcrest-version>
@@ -215,9 +215,9 @@
          <scope>test</scope>
       </dependency>
       <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>${junit-version}</version>
+        <groupId>org.junit.jupiter</groupId>
+        <artifactId>junit-jupiter</artifactId>
+        <version>${junit.jupiter.version}</version>
         <scope>test</scope>
       </dependency>
       <dependency>
diff --git a/qpid-jms-client/pom.xml b/qpid-jms-client/pom.xml
index c408c16..352b486 100644
--- a/qpid-jms-client/pom.xml
+++ b/qpid-jms-client/pom.xml
@@ -98,8 +98,8 @@
     <!-- Testing Dependencies                -->
     <!-- =================================== -->
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionClosedTest.java
index a2c6ca9..b8b1535 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionClosedTest.java
@@ -16,14 +16,18 @@
  */
 package org.apache.qpid.jms;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.Destination;
 import jakarta.jms.ExceptionListener;
 import jakarta.jms.JMSException;
 import jakarta.jms.Session;
 import jakarta.jms.Topic;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test Connection methods contracts when state is closed.
@@ -41,63 +45,91 @@
     }
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         connection = createConnection();
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetClientIdFails() throws Exception {
-        connection.getClientID();
-    }
-
-    @Test(timeout=30000, expected=JMSException.class)
-    public void testSetClientIdFails() throws Exception {
-        connection.setClientID("test");
-    }
-
-    @Test(timeout=30000, expected=JMSException.class)
-    public void testGetMetaData() throws Exception {
-        connection.getMetaData();
-    }
-
-    @Test(timeout=30000, expected=JMSException.class)
-    public void testGetExceptionListener() throws Exception {
-        connection.getExceptionListener();
-    }
-
-    @Test(timeout=30000, expected=JMSException.class)
-    public void testSetExceptionListener() throws Exception {
-        connection.setExceptionListener(new ExceptionListener() {
-            @Override
-            public void onException(JMSException exception) {
-            }
+        assertThrows(JMSException.class, () -> {
+            connection.getClientID();
         });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
+    public void testSetClientIdFails() throws Exception {
+        assertThrows(JMSException.class, () -> {
+            connection.setClientID("test");
+        });
+    }
+
+    @Test
+    @Timeout(30)
+    public void testGetMetaData() throws Exception {
+        assertThrows(JMSException.class, () -> {
+            connection.getMetaData();
+        });
+    }
+
+    @Test
+    @Timeout(30)
+    public void testGetExceptionListener() throws Exception {
+        assertThrows(JMSException.class, () -> {
+            connection.getExceptionListener();
+        });
+    }
+
+    @Test
+    @Timeout(30)
+    public void testSetExceptionListener() throws Exception {
+        assertThrows(JMSException.class, () -> {
+            connection.setExceptionListener(new ExceptionListener() {
+                @Override
+                public void onException(JMSException exception) {
+                }
+            });
+        });
+    }
+
+    @Test
+    @Timeout(30)
     public void testStartFails() throws Exception {
-        connection.start();
+        assertThrows(JMSException.class, () -> {
+            connection.start();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testStopFails() throws Exception {
-        connection.stop();
+        assertThrows(JMSException.class, () -> {
+            connection.stop();
+        });
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testClose() throws Exception {
         connection.close();
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionConsumerFails() throws Exception {
-        connection.createConnectionConsumer(destination, "", null, 1);
+        assertThrows(JMSException.class, () -> {
+            connection.createConnectionConsumer(destination, "", null, 1);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableConnectionConsumerFails() throws Exception {
-        connection.createDurableConnectionConsumer((Topic) destination, "id", "", null, 1);
+        assertThrows(JMSException.class, () -> {
+            connection.createDurableConnectionConsumer((Topic) destination, "id", "", null, 1);
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFactoryTest.java
index 996c2ab..27ec7fa 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFactoryTest.java
@@ -18,16 +18,17 @@
 
 import static org.apache.qpid.jms.SerializationTestSupport.roundTripSerialize;
 import static org.apache.qpid.jms.SerializationTestSupport.serialize;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.URI;
 import java.util.HashMap;
@@ -46,7 +47,8 @@
 import org.apache.qpid.jms.policy.JmsDefaultRedeliveryPolicy;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -249,7 +251,7 @@
 
         JmsConnection connection = (JmsConnection) factory.createConnection();
         assertNotNull(connection);
-        assertTrue("Connection ID = " + connection.getId(), connection.getId().toString().startsWith("TEST-ID:"));
+        assertTrue(connection.getId().toString().startsWith("TEST-ID:"), "Connection ID = " + connection.getId());
 
         connection.close();
     }
@@ -261,7 +263,7 @@
 
         JmsConnection connection = (JmsConnection) factory.createConnection();
         assertNotNull(connection);
-        assertTrue("Connection ID = " + connection.getId(), connection.getId().toString().startsWith("TEST-ID:"));
+        assertTrue(connection.getId().toString().startsWith("TEST-ID:"), "Connection ID = " + connection.getId());
 
         connection.close();
     }
@@ -277,7 +279,7 @@
         connection.start();
 
         assertNotNull(connection);
-        assertTrue("Connection ID = " + connection.getClientID(), connection.getClientID().startsWith("TEST-ID:"));
+        assertTrue(connection.getClientID().startsWith("TEST-ID:"), "Connection ID = " + connection.getClientID());
 
         connection.close();
     }
@@ -291,7 +293,7 @@
         connection.start();
 
         assertNotNull(connection);
-        assertTrue("Client ID = " + connection.getClientID(), connection.getClientID().startsWith("TEST-ID:"));
+        assertTrue(connection.getClientID().startsWith("TEST-ID:"), "Client ID = " + connection.getClientID());
 
         connection.close();
     }
@@ -320,9 +322,11 @@
         }
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testBadUriOptionCausesFail() throws Exception {
-        new JmsConnectionFactory("amqp://localhost:1234?jms.badOption=true");
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConnectionFactory("amqp://localhost:1234?jms.badOption=true");
+        });
     }
 
     @Test
@@ -337,9 +341,9 @@
         JmsConnectionFactory cf = new JmsConnectionFactory();
 
         // Verify the outcome conditions have not been met already
-        assertNotEquals("value should not match yet", clientID, cf.getClientID());
-        assertNotEquals("value should not match yet", queuePrefix, cf.getQueuePrefix());
-        assertNotEquals("value should not match yet", baseUri, cf.getRemoteURI());
+        assertNotEquals(clientID, cf.getClientID(), "value should not match yet");
+        assertNotEquals(queuePrefix, cf.getQueuePrefix(), "value should not match yet");
+        assertNotEquals(baseUri, cf.getRemoteURI(), "value should not match yet");
 
         // Set the properties
         Map<String, String> props = new HashMap<String, String>();
@@ -350,14 +354,14 @@
         Map<String, String> unusedProps = cf.setProperties(props);
 
         // Verify the clientID property option from the URI was applied.
-        assertEquals("uri property query option not applied as expected", clientID, cf.getClientID());
+        assertEquals(clientID, cf.getClientID(), "uri property query option not applied as expected");
         // Verify the direct property was applied
-        assertEquals("direct property not applied as expected", queuePrefix, cf.getQueuePrefix());
+        assertEquals(queuePrefix, cf.getQueuePrefix(), "direct property not applied as expected");
         // Verify the URI was filtered to remove the applied options
-        assertEquals("URI was filtered to remove options that were applied", baseUri, cf.getRemoteURI());
+        assertEquals(baseUri, cf.getRemoteURI(), "URI was filtered to remove options that were applied");
 
         // Verify the returned map was empty and unmodifiable
-        assertTrue("Map should be empty: " + unusedProps, unusedProps.isEmpty());
+        assertTrue(unusedProps.isEmpty(), "Map should be empty: " + unusedProps);
         try {
             unusedProps.put("a", "b");
             fail("Map should be unmodifiable");
@@ -376,7 +380,7 @@
         JmsConnectionFactory cf = new JmsConnectionFactory();
 
         // Verify the outcome conditions have not been met already
-        assertNotEquals("value should not match yet", uri, cf.getRemoteURI());
+        assertNotEquals(uri, cf.getRemoteURI(), "value should not match yet");
 
         // Set the properties
         Map<String, String> props = new HashMap<String, String>();
@@ -387,12 +391,12 @@
         Map<String, String> unusedProps = cf.setProperties(props);
 
         // Verify the URI property was applied.
-        assertEquals("uri property option not applied as expected", uri, cf.getRemoteURI());
+        assertEquals(uri, cf.getRemoteURI(), "uri property option not applied as expected");
 
         //Verify that the unused property was returned
-        assertEquals("Unexpected size of return map", 1, unusedProps.size());
-        assertTrue("Expected property not found in map: " + unusedProps, unusedProps.containsKey(unusedKey));
-        assertEquals("Unexpected property value", unusedValue, unusedProps.get(unusedKey));
+        assertEquals(1, unusedProps.size(), "Unexpected size of return map");
+        assertTrue(unusedProps.containsKey(unusedKey), "Expected property not found in map: " + unusedProps);
+        assertEquals(unusedValue, unusedProps.get(unusedKey), "Unexpected property value");
 
         // Verify the returned map was unmodifiable
         try {
@@ -438,10 +442,10 @@
         Map<String, String> props = cf.getProperties();
 
         // Verify the clientID property option from the URI was applied.
-        assertTrue(CLIENT_ID_PROP + " property not found", props.containsKey(CLIENT_ID_PROP));
-        assertEquals("clientID uri property query option not applied as expected", clientID, props.get(CLIENT_ID_PROP));
-        assertTrue(QUEUE_PREFIX_PROP + " property not found", props.containsKey(QUEUE_PREFIX_PROP));
-        assertEquals("queue prefix property not applied as expected", queuePrefix, props.get(QUEUE_PREFIX_PROP));
+        assertTrue(props.containsKey(CLIENT_ID_PROP), CLIENT_ID_PROP + " property not found");
+        assertEquals(clientID, props.get(CLIENT_ID_PROP), "clientID uri property query option not applied as expected");
+        assertTrue(props.containsKey(QUEUE_PREFIX_PROP), QUEUE_PREFIX_PROP + " property not found");
+        assertEquals(queuePrefix, props.get(QUEUE_PREFIX_PROP), "queue prefix property not applied as expected");
     }
 
     @Test
@@ -453,12 +457,12 @@
 
         Object roundTripped = roundTripSerialize(cf);
 
-        assertNotNull("Null object returned", roundTripped);
-        assertEquals("Unexpected type", JmsConnectionFactory.class, roundTripped.getClass());
-        assertEquals("Unexpected uri", uri, ((JmsConnectionFactory)roundTripped).getRemoteURI());
+        assertNotNull(roundTripped, "Null object returned");
+        assertEquals(JmsConnectionFactory.class, roundTripped.getClass(), "Unexpected type");
+        assertEquals(uri, ((JmsConnectionFactory)roundTripped).getRemoteURI(), "Unexpected uri");
 
         Map<String, String> props2 = ((JmsConnectionFactory)roundTripped).getProperties();
-        assertEquals("Properties were not equal", props, props2);
+        assertEquals(props, props2, "Properties were not equal");
     }
 
     /**
@@ -477,19 +481,19 @@
         JmsConnectionFactory cf = new JmsConnectionFactory(uri);
         Map<String, String> props = cf.getProperties();
 
-        assertTrue("Props dont contain expected prefetch policy change", props.containsKey(topicPrefetchKey));
-        assertEquals("Unexpected value", topicPrefetchValue, props.get(topicPrefetchKey));
+        assertTrue(props.containsKey(topicPrefetchKey), "Props dont contain expected prefetch policy change");
+        assertEquals(topicPrefetchValue, props.get(topicPrefetchKey), "Unexpected value");
 
         Object roundTripped = roundTripSerialize(cf);
 
-        assertNotNull("Null object returned", roundTripped);
-        assertEquals("Unexpected type", JmsConnectionFactory.class, roundTripped.getClass());
+        assertNotNull(roundTripped, "Null object returned");
+        assertEquals(JmsConnectionFactory.class, roundTripped.getClass(), "Unexpected type");
 
         Map<String, String> props2 = ((JmsConnectionFactory)roundTripped).getProperties();
-        assertTrue("Props dont contain expected prefetch policy change", props2.containsKey(topicPrefetchKey));
-        assertEquals("Unexpected value", topicPrefetchValue, props2.get(topicPrefetchKey));
+        assertTrue(props2.containsKey(topicPrefetchKey), "Props dont contain expected prefetch policy change");
+        assertEquals(topicPrefetchValue, props2.get(topicPrefetchKey), "Unexpected value");
 
-        assertEquals("Properties were not equal", props, props2);
+        assertEquals(props, props2, "Properties were not equal");
     }
 
     /**
@@ -508,19 +512,19 @@
         JmsConnectionFactory cf = new JmsConnectionFactory(uri);
         Map<String, String> props = cf.getProperties();
 
-        assertTrue("Props dont contain expected redelivery policy change", props.containsKey(maxRedeliveryKey));
-        assertEquals("Unexpected value", maxRedeliveryValue, props.get(maxRedeliveryKey));
+        assertTrue(props.containsKey(maxRedeliveryKey), "Props dont contain expected redelivery policy change");
+        assertEquals(maxRedeliveryValue, props.get(maxRedeliveryKey), "Unexpected value");
 
         Object roundTripped = roundTripSerialize(cf);
 
-        assertNotNull("Null object returned", roundTripped);
-        assertEquals("Unexpected type", JmsConnectionFactory.class, roundTripped.getClass());
+        assertNotNull(roundTripped, "Null object returned");
+        assertEquals(JmsConnectionFactory.class, roundTripped.getClass(), "Unexpected type");
 
         Map<String, String> props2 = ((JmsConnectionFactory)roundTripped).getProperties();
-        assertTrue("Props dont contain expected redelivery policy change", props2.containsKey(maxRedeliveryKey));
-        assertEquals("Unexpected value", maxRedeliveryValue, props2.get(maxRedeliveryKey));
+        assertTrue(props2.containsKey(maxRedeliveryKey), "Props dont contain expected redelivery policy change");
+        assertEquals(maxRedeliveryValue, props2.get(maxRedeliveryKey), "Unexpected value");
 
-        assertEquals("Properties were not equal", props, props2);
+        assertEquals(props, props2, "Properties were not equal");
     }
 
     /**
@@ -539,19 +543,19 @@
         JmsConnectionFactory cf = new JmsConnectionFactory(uri);
         Map<String, String> props = cf.getProperties();
 
-        assertTrue("Props dont contain expected presettle policy change", props.containsKey(presettleAllKey));
-        assertEquals("Unexpected value", presettleAllValue, props.get(presettleAllKey));
+        assertTrue(props.containsKey(presettleAllKey), "Props dont contain expected presettle policy change");
+        assertEquals(presettleAllValue, props.get(presettleAllKey), "Unexpected value");
 
         Object roundTripped = roundTripSerialize(cf);
 
-        assertNotNull("Null object returned", roundTripped);
-        assertEquals("Unexpected type", JmsConnectionFactory.class, roundTripped.getClass());
+        assertNotNull(roundTripped, "Null object returned");
+        assertEquals(JmsConnectionFactory.class, roundTripped.getClass(), "Unexpected type");
 
         Map<String, String> props2 = ((JmsConnectionFactory)roundTripped).getProperties();
-        assertTrue("Props dont contain expected presettle policy change", props2.containsKey(presettleAllKey));
-        assertEquals("Unexpected value", presettleAllValue, props2.get(presettleAllKey));
+        assertTrue(props2.containsKey(presettleAllKey), "Props dont contain expected presettle policy change");
+        assertEquals(presettleAllValue, props2.get(presettleAllKey), "Unexpected value");
 
-        assertEquals("Properties were not equal", props, props2);
+        assertEquals(props, props2, "Properties were not equal");
     }
 
     /**
@@ -570,19 +574,19 @@
         JmsConnectionFactory cf = new JmsConnectionFactory(uri);
         Map<String, String> props = cf.getProperties();
 
-        assertTrue("Props dont contain expected message ID policy change", props.containsKey(messageIDTypeKey));
-        assertEquals("Unexpected value", messageIDTypeValue, props.get(messageIDTypeKey));
+        assertTrue(props.containsKey(messageIDTypeKey), "Props dont contain expected message ID policy change");
+        assertEquals(messageIDTypeValue, props.get(messageIDTypeKey), "Unexpected value");
 
         Object roundTripped = roundTripSerialize(cf);
 
-        assertNotNull("Null object returned", roundTripped);
-        assertEquals("Unexpected type", JmsConnectionFactory.class, roundTripped.getClass());
+        assertNotNull(roundTripped, "Null object returned");
+        assertEquals(JmsConnectionFactory.class, roundTripped.getClass(), "Unexpected type");
 
         Map<String, String> props2 = ((JmsConnectionFactory)roundTripped).getProperties();
-        assertTrue("Props dont contain expected message ID policy change", props2.containsKey(messageIDTypeKey));
-        assertEquals("Unexpected value", messageIDTypeValue, props2.get(messageIDTypeKey));
+        assertTrue(props2.containsKey(messageIDTypeKey), "Props dont contain expected message ID policy change");
+        assertEquals(messageIDTypeValue, props2.get(messageIDTypeKey), "Unexpected value");
 
-        assertEquals("Properties were not equal", props, props2);
+        assertEquals(props, props2, "Properties were not equal");
     }
 
     /**
@@ -608,25 +612,25 @@
         JmsConnectionFactory cf = new JmsConnectionFactory(uri);
         Map<String, String> props = cf.getProperties();
 
-        assertTrue("Props dont contain expected deserialization policy change", props.containsKey(allowListKey));
-        assertEquals("Unexpected value", allowListValue, props.get(allowListKey));
+        assertTrue(props.containsKey(allowListKey), "Props dont contain expected deserialization policy change");
+        assertEquals(allowListValue, props.get(allowListKey), "Unexpected value");
 
-        assertTrue("Props dont contain expected deserialization policy change", props.containsKey(denyListKey));
-        assertEquals("Unexpected value", denyListValue, props.get(denyListKey));
+        assertTrue(props.containsKey(denyListKey), "Props dont contain expected deserialization policy change");
+        assertEquals(denyListValue, props.get(denyListKey), "Unexpected value");
 
         Object roundTripped = roundTripSerialize(cf);
 
-        assertNotNull("Null object returned", roundTripped);
-        assertEquals("Unexpected type", JmsConnectionFactory.class, roundTripped.getClass());
+        assertNotNull(roundTripped, "Null object returned");
+        assertEquals(JmsConnectionFactory.class, roundTripped.getClass(), "Unexpected type");
 
         Map<String, String> props2 = ((JmsConnectionFactory)roundTripped).getProperties();
-        assertTrue("Props dont contain expected deserialization policy change", props2.containsKey(allowListKey));
-        assertEquals("Unexpected value", allowListValue, props2.get(allowListKey));
+        assertTrue(props2.containsKey(allowListKey), "Props dont contain expected deserialization policy change");
+        assertEquals(allowListValue, props2.get(allowListKey), "Unexpected value");
 
-        assertTrue("Props dont contain expected deserialization policy change", props2.containsKey(denyListKey));
-        assertEquals("Unexpected value", denyListValue, props2.get(denyListKey));
+        assertTrue(props2.containsKey(denyListKey), "Props dont contain expected deserialization policy change");
+        assertEquals(denyListValue, props2.get(denyListKey), "Unexpected value");
 
-        assertEquals("Properties were not equal", props, props2);
+        assertEquals(props, props2, "Properties were not equal");
     }
 
     /**
@@ -649,25 +653,25 @@
         JmsConnectionFactory cf = new JmsConnectionFactory(uri);
         Map<String, String> props = cf.getProperties();
 
-        assertTrue("Props dont contain expected deserialization policy change", props.containsKey(allowListKey));
-        assertEquals("Unexpected value", allowListValue, props.get(allowListKey));
+        assertTrue(props.containsKey(allowListKey), "Props dont contain expected deserialization policy change");
+        assertEquals(allowListValue, props.get(allowListKey), "Unexpected value");
 
-        assertTrue("Props dont contain expected deserialization policy change", props.containsKey(denyListKey));
-        assertEquals("Unexpected value", denyListValue, props.get(denyListKey));
+        assertTrue(props.containsKey(denyListKey), "Props dont contain expected deserialization policy change");
+        assertEquals(denyListValue, props.get(denyListKey), "Unexpected value");
 
         Object roundTripped = roundTripSerialize(cf);
 
-        assertNotNull("Null object returned", roundTripped);
-        assertEquals("Unexpected type", JmsConnectionFactory.class, roundTripped.getClass());
+        assertNotNull(roundTripped, "Null object returned");
+        assertEquals(JmsConnectionFactory.class, roundTripped.getClass(), "Unexpected type");
 
         Map<String, String> props2 = ((JmsConnectionFactory)roundTripped).getProperties();
-        assertTrue("Props dont contain expected deserialization policy change", props2.containsKey(allowListKey));
-        assertEquals("Unexpected value", allowListValue, props2.get(allowListKey));
+        assertTrue(props2.containsKey(allowListKey), "Props dont contain expected deserialization policy change");
+        assertEquals(allowListValue, props2.get(allowListKey), "Unexpected value");
 
-        assertTrue("Props dont contain expected deserialization policy change", props2.containsKey(denyListKey));
-        assertEquals("Unexpected value", denyListValue, props2.get(denyListKey));
+        assertTrue(props2.containsKey(denyListKey), "Props dont contain expected deserialization policy change");
+        assertEquals(denyListValue, props2.get(denyListKey), "Unexpected value");
 
-        assertEquals("Properties were not equal", props, props2);
+        assertEquals(props, props2, "Properties were not equal");
     }
 
     @Test
@@ -795,17 +799,18 @@
 
         Object roundTripped = roundTripSerialize(cf);
 
-        assertNotNull("Null object returned", roundTripped);
-        assertEquals("Unexpected type", JmsConnectionFactory.class, roundTripped.getClass());
-        assertEquals("Unexpected uri", uri, ((JmsConnectionFactory)roundTripped).getRemoteURI());
+        assertNotNull(roundTripped, "Null object returned");
+        assertEquals(JmsConnectionFactory.class, roundTripped.getClass(), "Unexpected type");
+        assertEquals(uri, ((JmsConnectionFactory)roundTripped).getRemoteURI(), "Unexpected uri");
 
         Map<String, String> props2 = ((JmsConnectionFactory)roundTripped).getProperties();
 
-        assertFalse("Properties map should not contain ExceptionListener", props.containsKey("exceptionListener"));
-        assertEquals("Properties were not equal", props, props2);
+        assertFalse(props.containsKey("exceptionListener"), "Properties map should not contain ExceptionListener");
+        assertEquals(props, props2, "Properties were not equal");
     }
 
-    @Test(timeout = 5000)
+    @Test
+    @Timeout(5)
     public void testCreateConnectionWithPortOutOfRange() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory("amqp://127.0.0.1:567564562");
 
@@ -826,7 +831,8 @@
         }
     }
 
-    @Test(timeout = 5000)
+    @Test
+    @Timeout(5)
     public void testURIOptionPopulateJMSXUserID() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "amqp://127.0.0.1:5672?jms.populateJMSXUserID=true");
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFailedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFailedTest.java
index 50500f2..e5bdfb9 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFailedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionFailedTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.qpid.jms;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.concurrent.TimeUnit;
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java
index e307dfc..ea9528c 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java
@@ -16,13 +16,14 @@
  */
 package org.apache.qpid.jms;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.net.URI;
@@ -43,9 +44,10 @@
 import org.apache.qpid.jms.provider.mock.MockProvider;
 import org.apache.qpid.jms.provider.mock.MockProviderFactory;
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test basic functionality around JmsConnection
@@ -58,27 +60,31 @@
     private JmsConnection connection;
     private JmsConnectionInfo connectionInfo;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         provider = (MockProvider) MockProviderFactory.create(new URI("mock://localhost"));
         connectionInfo = new JmsConnectionInfo(new JmsConnectionId("ID:TEST:1"));
         connectionInfo.setClientId(clientIdGenerator.generateId(), false);
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         if (connection != null) {
             connection.close();
         }
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testJmsConnectionThrowsJMSExceptionProviderStartFails() throws JMSException, IllegalStateException, IOException {
-        provider.getConfiguration().setFailOnStart(true);
-        try (JmsConnection connection = new JmsConnection(connectionInfo, provider);) {}
+        assertThrows(JMSException.class, () -> {
+            provider.getConfiguration().setFailOnStart(true);
+            try (JmsConnection connection = new JmsConnection(connectionInfo, provider);) {}
+        });
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testStateAfterCreate() throws JMSException {
         connection = new JmsConnection(connectionInfo, provider);
 
@@ -87,7 +93,8 @@
         assertFalse(connection.isConnected());
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testGetExceptionListener() throws JMSException {
         connection = new JmsConnection(connectionInfo, provider);
 
@@ -102,7 +109,8 @@
         assertNotNull(connection.getExceptionListener());
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testReplacePrefetchPolicy() throws JMSException {
         connection = new JmsConnection(connectionInfo, provider);
 
@@ -114,13 +122,15 @@
         assertEquals(newPolicy, connection.getPrefetchPolicy());
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testGetConnectionId() throws JMSException {
         connection = new JmsConnection(connectionInfo, provider);
         assertEquals("ID:TEST:1", connection.getId().toString());
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testAddConnectionListener() throws JMSException {
         connection = new JmsConnection(connectionInfo, provider);
         JmsConnectionListener listener = new JmsDefaultConnectionListener();
@@ -129,7 +139,8 @@
         assertTrue(connection.removeConnectionListener(listener));
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testConnectionStart() throws JMSException, IOException {
         connection = new JmsConnection(connectionInfo, provider);
 
@@ -138,7 +149,8 @@
         assertTrue(connection.isConnected());
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testConnectionMulitpleStartCalls() throws JMSException, IOException {
         connection = new JmsConnection(connectionInfo, provider);
 
@@ -149,7 +161,8 @@
         assertTrue(connection.isConnected());
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testConnectionStartAndStop() throws JMSException, IOException {
         connection = new JmsConnection(connectionInfo, provider);
 
@@ -160,14 +173,18 @@
         assertTrue(connection.isConnected());
     }
 
-    @Test(timeout=30000, expected=InvalidClientIDException.class)
+    @Test
+    @Timeout(30)
     public void testSetClientIDFromNull() throws JMSException, IOException {
-        connection = new JmsConnection(connectionInfo, provider);
-        assertFalse(connection.isConnected());
-        connection.setClientID("");
+        assertThrows(InvalidClientIDException.class, () -> {
+            connection = new JmsConnection(connectionInfo, provider);
+            assertFalse(connection.isConnected());
+            connection.setClientID("");
+        });
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateNonTXSessionWithTXAckMode() throws JMSException, IOException {
         connection = new JmsConnection(connectionInfo, provider);
         connection.start();
@@ -179,7 +196,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateNonTXSessionWithUnknownAckMode() throws JMSException, IOException {
         connection = new JmsConnection(connectionInfo, provider);
         connection.start();
@@ -191,7 +209,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateSessionWithUnknownAckMode() throws JMSException, IOException {
         connection = new JmsConnection(connectionInfo, provider);
         connection.start();
@@ -203,7 +222,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateSessionDefaultMode() throws JMSException, IOException {
         connection = new JmsConnection(connectionInfo, provider);
         connection.start();
@@ -212,34 +232,44 @@
         assertEquals(session.getSessionMode(), Session.AUTO_ACKNOWLEDGE);
     }
 
-    @Test(timeout=30000, expected=InvalidClientIDException.class)
+    @Test
+    @Timeout(30)
     public void testSetClientIDFromEmptyString() throws JMSException, IOException {
-        connection = new JmsConnection(connectionInfo, provider);
-        assertFalse(connection.isConnected());
-        connection.setClientID(null);
+        assertThrows(InvalidClientIDException.class, () -> {
+            connection = new JmsConnection(connectionInfo, provider);
+            assertFalse(connection.isConnected());
+            connection.setClientID(null);
+        });
     }
 
-    @Test(timeout=30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testSetClientIDFailsOnSecondCall() throws JMSException, IOException {
-        connection = new JmsConnection(connectionInfo, provider);
+        assertThrows(IllegalStateException.class, () -> {
+            connection = new JmsConnection(connectionInfo, provider);
 
-        assertFalse(connection.isConnected());
-        connection.setClientID("TEST-ID");
-        assertTrue(connection.isConnected());
-        connection.setClientID("TEST-ID");
+            assertFalse(connection.isConnected());
+            connection.setClientID("TEST-ID");
+            assertTrue(connection.isConnected());
+            connection.setClientID("TEST-ID");
+        });
     }
 
-    @Test(timeout=30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testSetClientIDFailsAfterStart() throws JMSException, IOException {
-        connection = new JmsConnection(connectionInfo, provider);
+        assertThrows(IllegalStateException.class, () -> {
+            connection = new JmsConnection(connectionInfo, provider);
 
-        assertFalse(connection.isConnected());
-        connection.start();
-        assertTrue(connection.isConnected());
-        connection.setClientID("TEST-ID");
+            assertFalse(connection.isConnected());
+            connection.start();
+            assertTrue(connection.isConnected());
+            connection.setClientID("TEST-ID");
+        });
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testDeleteOfTempQueueOnClosedConnection() throws JMSException, IOException {
         connection = new JmsConnection(connectionInfo, provider);
         connection.start();
@@ -256,7 +286,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testDeleteOfTempTopicOnClosedConnection() throws JMSException, IOException {
         connection = new JmsConnection(connectionInfo, provider);
         connection.start();
@@ -273,7 +304,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testConnectionCreatedSessionRespectsAcknowledgementMode() throws Exception {
         connection = new JmsConnection(connectionInfo, provider);
         connection.start();
@@ -286,7 +318,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testConnectionMetaData() throws Exception {
         connection = new JmsConnection(connectionInfo, provider);
 
@@ -303,6 +336,6 @@
 
         int major = metaData.getProviderMajorVersion();
         int minor = metaData.getProviderMinorVersion();
-        assertTrue("Expected non-zero provider major(" + major + ") / minor(" + minor +") version.", (major + minor) != 0);
+        assertTrue((major + minor) != 0, "Expected non-zero provider major(" + major + ") / minor(" + minor +") version.");
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTestSupport.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTestSupport.java
index 4dc829d..8b37980 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTestSupport.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsConnectionTestSupport.java
@@ -29,8 +29,9 @@
 import org.apache.qpid.jms.provider.mock.MockProviderListener;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.After;
-import org.junit.Before;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestInfo;
 
 /**
  * Base for tests that require a JmsConnection that is created using a
@@ -79,15 +80,15 @@
     }
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         connectionInfo = new JmsConnectionInfo(new JmsConnectionId("ID:JCTS(" + CONN_ID_SUFFIX.incrementAndGet() + "):" + getClass().getName()));
         connectionInfo.setClientId(clientIdGenerator.generateId(), false);
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         super.tearDown();
         if (connection != null) {
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsContextTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsContextTest.java
index c3b7c0c..1d94f47 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsContextTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsContextTest.java
@@ -16,12 +16,12 @@
  */
 package org.apache.qpid.jms;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
@@ -50,9 +50,10 @@
 
 import org.apache.qpid.jms.provider.ProviderConstants.ACK_TYPE;
 import org.apache.qpid.jms.provider.mock.MockRemotePeer;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
 import org.mockito.Mockito;
 
 /**
@@ -65,15 +66,15 @@
     private JmsContext context;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         remotePeer.start();
         context = createJMSContextToMockProvider();
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         super.tearDown();
         if (context != null) {
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsQueueConnectionTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsQueueConnectionTest.java
index 96a94fe..5233e29 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsQueueConnectionTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsQueueConnectionTest.java
@@ -16,13 +16,17 @@
  */
 package org.apache.qpid.jms;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.IllegalStateException;
 import jakarta.jms.JMSException;
 import jakarta.jms.ServerSessionPool;
 import jakarta.jms.Session;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test various contract aspects of the QueueConnection implementation
@@ -30,21 +34,27 @@
 public class JmsQueueConnectionTest extends JmsConnectionTestSupport {
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         queueConnection = createQueueConnectionToMockProvider();
         queueConnection.start();
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
-    public void testCreateConnectionConsumerOnQueueConnection() throws JMSException{
-        queueConnection.createConnectionConsumer(new JmsTopic(), "subscriptionName", (ServerSessionPool)null, 1);
+    @Test
+    @Timeout(30)
+    public void testCreateConnectionConsumerOnQueueConnection() throws JMSException {
+        assertThrows(IllegalStateException.class, () -> {
+            queueConnection.createConnectionConsumer(new JmsTopic(), "subscriptionName", (ServerSessionPool) null, 1);
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
-    public void testCreateTopicSessionOnTopicConnection() throws JMSException{
-        queueConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
+    @Test
+    @Timeout(30)
+    public void testCreateTopicSessionOnTopicConnection() throws JMSException {
+        assertThrows(IllegalStateException.class, () -> {
+            queueConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
+        });
     }
 
     /**
@@ -57,8 +67,11 @@
      *
      * @throws JMSException if an error occurs during the test.
      */
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableConnectionConsumerOnQueueConnection() throws JMSException {
-        queueConnection.createDurableConnectionConsumer(new JmsTopic(), "subscriptionName", "", (ServerSessionPool)null, 1);
+        assertThrows(IllegalStateException.class, () -> {
+            queueConnection.createDurableConnectionConsumer(new JmsTopic(), "subscriptionName", "", (ServerSessionPool) null, 1);
+        });
     }
 }
\ No newline at end of file
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsQueueTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsQueueTest.java
index 835a643..7c3c2be 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsQueueTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsQueueTest.java
@@ -18,20 +18,20 @@
 
 import static org.apache.qpid.jms.SerializationTestSupport.roundTripSerialize;
 import static org.apache.qpid.jms.SerializationTestSupport.serialize;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class JmsQueueTest extends QpidJmsTestCase {
 
@@ -41,61 +41,61 @@
     @Test
     public void testIsQueue() {
         JmsQueue queue = new JmsQueue("myQueue");
-        assertTrue("should be a queue", queue.isQueue());
+        assertTrue(queue.isQueue(), "should be a queue");
     }
 
     @Test
     public void testIsTopic() {
         JmsQueue queue = new JmsQueue("myQueue");
-        assertFalse("should not be a topic", queue.isTopic());
+        assertFalse(queue.isTopic(), "should not be a topic");
     }
 
     @Test
     public void testIsTemporary() {
         JmsQueue queue = new JmsQueue("myQueue");
-        assertFalse("should not be temporary", queue.isTemporary());
+        assertFalse(queue.isTemporary(), "should not be temporary");
     }
 
     @Test
     public void testEqualsWithNull() {
         JmsQueue queue = new JmsQueue("myQueue");
-        assertFalse("should not be equal", queue.equals(null));
+        assertFalse(queue.equals(null), "should not be equal");
     }
 
     @Test
     public void testEqualsWithDifferentObjectType() {
         JmsQueue queue = new JmsQueue("name");
         JmsTopic otherObject = new JmsTopic("name");
-        assertFalse("should not be equal", queue.equals(otherObject));
+        assertFalse(queue.equals(otherObject), "should not be equal");
     }
 
     @Test
     public void testEqualsWithSameObject() {
         JmsQueue queue = new JmsQueue("name");
-        assertTrue("should be equal to itself", queue.equals(queue));
+        assertTrue(queue.equals(queue), "should be equal to itself");
     }
 
     @Test
     public void testEqualsWithDifferentObject() {
         JmsQueue queue1 = new JmsQueue("name");
         JmsQueue queue2 = new JmsQueue("name");
-        assertTrue("should be equal", queue1.equals(queue2));
-        assertTrue("should still be equal", queue2.equals(queue1));
+        assertTrue(queue1.equals(queue2), "should be equal");
+        assertTrue(queue2.equals(queue1), "should still be equal");
     }
 
     @Test
     public void testEqualsWithTemporaryQueue() {
         JmsQueue queue1 = new JmsQueue("name");
         JmsTemporaryQueue queue2 = new JmsTemporaryQueue("name");
-        assertFalse("should be unequal", queue1.equals(queue2));
-        assertFalse("should still be unequal", queue2.equals(queue1));
+        assertFalse(queue1.equals(queue2), "should be unequal");
+        assertFalse(queue2.equals(queue1), "should still be unequal");
     }
 
     @Test
     public void testHashcodeWithEqualNamedObjects() {
         JmsQueue queue1 = new JmsQueue("name");
         JmsQueue queue2 = new JmsQueue("name");
-        assertEquals("should have same hashcode", queue1.hashCode(), queue2.hashCode());
+        assertEquals(queue1.hashCode(), queue2.hashCode(), "should have same hashcode");
     }
 
     @Test
@@ -104,7 +104,7 @@
         JmsQueue queue2 = new JmsQueue("name2");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("should not have same hashcode", queue1.hashCode(), queue2.hashCode());
+        assertNotEquals(queue1.hashCode(), queue2.hashCode(), "should not have same hashcode");
     }
 
     @Test
@@ -114,9 +114,9 @@
 
         Map<String, String> props = queue.getProperties();
 
-        assertTrue("Property not found: " + NAME_PROP, props.containsKey(NAME_PROP));
-        assertEquals("Unexpected value for property: " + NAME_PROP, name, props.get(NAME_PROP));
-        assertEquals("Unexpected number of properties", 1, props.size());
+        assertTrue(props.containsKey(NAME_PROP), "Property not found: " + NAME_PROP);
+        assertEquals(name, props.get(NAME_PROP), "Unexpected value for property: " + NAME_PROP);
+        assertEquals(1, props.size(), "Unexpected number of properties");
     }
 
     @Test
@@ -138,7 +138,7 @@
         String name = "myQueue";
         JmsQueue queue = new JmsQueue();
 
-        assertNull("Shouldnt have name yet", queue.getQueueName());
+        assertNull(queue.getQueueName(), "Shouldnt have name yet");
 
         Map<String, String> props = new HashMap<String, String>();
         if(addNameProp) {
@@ -151,10 +151,10 @@
 
         Map<String, String> unusedProps = queue.setProperties(props);
 
-        assertEquals("Unexpected value for name", name, queue.getQueueName());
+        assertEquals(name, queue.getQueueName(), "Unexpected value for name");
 
         // Verify the returned map was empty and unmodifiable
-        assertTrue("Map should be empty: " + unusedProps, unusedProps.isEmpty());
+        assertTrue(unusedProps.isEmpty(), "Map should be empty: " + unusedProps);
         try {
             unusedProps.put("a", "b");
             fail("Map should be unmodifiable");
@@ -177,12 +177,12 @@
         Map<String, String> unusedProps = queue.setProperties(props);
 
         // Verify the name property was applied.
-        assertEquals("Unexpected value for name", name, queue.getQueueName());
+        assertEquals(name, queue.getQueueName(), "Unexpected value for name");
 
         //Verify that the unused property was returned
-        assertEquals("Unexpected size of return map", 1, unusedProps.size());
-        assertTrue("Expected property not found in map: " + unusedProps, unusedProps.containsKey(unusedKey));
-        assertEquals("Unexpected property value", unusedValue, unusedProps.get(unusedKey));
+        assertEquals(1, unusedProps.size(), "Unexpected size of return map");
+        assertTrue(unusedProps.containsKey(unusedKey), "Expected property not found in map: " + unusedProps);
+        assertEquals(unusedValue, unusedProps.get(unusedKey), "Unexpected property value");
 
         // Verify the returned map was unmodifiable
         try {
@@ -200,12 +200,12 @@
 
         Object roundTripped = roundTripSerialize(queue);
 
-        assertNotNull("Null destination returned", roundTripped);
-        assertEquals("Unexpected type", JmsQueue.class, roundTripped.getClass());
-        assertEquals("Unexpected name", name, ((JmsQueue)roundTripped).getQueueName());
+        assertNotNull(roundTripped, "Null destination returned");
+        assertEquals(JmsQueue.class, roundTripped.getClass(), "Unexpected type");
+        assertEquals(name, ((JmsQueue)roundTripped).getQueueName(), "Unexpected name");
 
-        assertEquals("Objects were not equal", queue, roundTripped);
-        assertEquals("Object hashCodes were not equal", queue.hashCode(), roundTripped.hashCode());
+        assertEquals(queue, roundTripped, "Objects were not equal");
+        assertEquals(queue.hashCode(), roundTripped.hashCode(), "Object hashCodes were not equal");
     }
 
     @Test
@@ -213,12 +213,12 @@
         JmsQueue queue1 = new JmsQueue("myQueue");
         JmsQueue queue2 = new JmsQueue("myQueue");
 
-        assertEquals("Destinations were not equal", queue1, queue2);
+        assertEquals(queue1, queue2, "Destinations were not equal");
 
         byte[] bytes1 = serialize(queue1);
         byte[] bytes2 = serialize(queue2);
 
-        assertArrayEquals("Serialized bytes were not equal", bytes1, bytes2);
+        assertArrayEquals(bytes1, bytes2, "Serialized bytes were not equal");
     }
 
     @Test
@@ -226,7 +226,7 @@
         JmsQueue queue1 = new JmsQueue("myQueue1");
         JmsQueue queue2 = new JmsQueue("myQueue2");
 
-        assertNotEquals("Destinations were not expected to be equal", queue1, queue2);
+        assertNotEquals(queue1, queue2, "Destinations were not expected to be equal");
 
         byte[] bytes1 = serialize(queue1);
         byte[] bytes2 = serialize(queue2);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsSessionTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsSessionTest.java
index 91dd21e..429cfbc 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsSessionTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsSessionTest.java
@@ -16,12 +16,13 @@
  */
 package org.apache.qpid.jms;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.UUID;
 
@@ -37,8 +38,10 @@
 import jakarta.jms.TextMessage;
 import jakarta.jms.Topic;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 import org.mockito.Mockito;
 
 /**
@@ -51,13 +54,14 @@
     private static final int INDIVIDUAL_ACKNOWLEDGE = 101;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         connection = createConnectionToMockProvider();
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testGetMessageListener() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNull(session.getMessageListener());
@@ -70,7 +74,8 @@
         assertNotNull(session.getMessageListener());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testGetAcknowledgementMode() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertEquals(Session.AUTO_ACKNOWLEDGE, session.getAcknowledgeMode());
@@ -88,7 +93,8 @@
         assertEquals(INDIVIDUAL_ACKNOWLEDGE, session.getAcknowledgeMode());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testIsAutoAcknowledge() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertTrue(session.isAutoAcknowledge());
@@ -98,7 +104,8 @@
         assertFalse(session.isIndividualAcknowledge());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testIsDupsOkAcknowledge() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
         assertFalse(session.isAutoAcknowledge());
@@ -108,7 +115,8 @@
         assertFalse(session.isIndividualAcknowledge());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testIsClientAcknowledge() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
         assertFalse(session.isAutoAcknowledge());
@@ -118,7 +126,8 @@
         assertFalse(session.isIndividualAcknowledge());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testIsNoAcknowledge() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, NO_ACKNOWLEDGE);
         assertFalse(session.isAutoAcknowledge());
@@ -128,7 +137,8 @@
         assertFalse(session.isIndividualAcknowledge());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testIsNoAcknowledgeWithArtemisMode() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, ARTEMIS_PRE_ACKNOWLEDGE);
         assertFalse(session.isAutoAcknowledge());
@@ -138,7 +148,8 @@
         assertFalse(session.isIndividualAcknowledge());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testIsTransacted() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertFalse(session.isTransacted());
@@ -146,7 +157,8 @@
         assertTrue(session.isTransacted());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testIsIndividualAcknowledge() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, INDIVIDUAL_ACKNOWLEDGE);
         assertFalse(session.isAutoAcknowledge());
@@ -156,61 +168,77 @@
         assertTrue(session.isIndividualAcknowledge());
     }
 
-    @Test(timeout = 10000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(10)
     public void testRecoverThrowsForTxSession() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(true, Session.SESSION_TRANSACTED);
-        session.recover();
+        assertThrows(IllegalStateException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(true, Session.SESSION_TRANSACTED);
+            session.recover();
+        });
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testRecoverWithNoSessionActivity() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         session.recover();
     }
 
-    @Test(timeout = 10000, expected=JMSException.class)
+    @Test
+    @Timeout(10)
     public void testRollbackThrowsOnNonTxSession() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.rollback();
+        assertThrows(JMSException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.rollback();
+        });
     }
 
-    @Test(timeout = 10000, expected=JMSException.class)
+    @Test
+    @Timeout(10)
     public void testCommitThrowsOnNonTxSession() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.commit();
+        assertThrows(JMSException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.commit();
+        });
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateMessage() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session.createMessage());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateBytesMessage() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session.createBytesMessage());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateStreamMessage() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session.createStreamMessage());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateMapMessage() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session.createMapMessage());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateObjectMessage() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session.createObjectMessage());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateObjectMessageWithValue() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         ObjectMessage message = session.createObjectMessage("TEST-MESSAGE");
@@ -220,13 +248,15 @@
         assertEquals("TEST-MESSAGE", message.getObject());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateTextMessage() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session.createTextMessage());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateTextMessageWithValue() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         TextMessage message = session.createTextMessage("TEST-MESSAGE");
@@ -234,91 +264,132 @@
         assertEquals("TEST-MESSAGE", message.getText());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testUnsubscribe() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         session.unsubscribe("some-subscription");
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateConsumerNullDestinationThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createConsumer(null);
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createConsumer(null);
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateConsumerNullDestinationWithSelectorThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createConsumer(null, "a > b");
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createConsumer(null, "a > b");
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateConsumerNullDestinationWithSelectorNoLocalThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createConsumer(null, "a > b", true);
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createConsumer(null, "a > b", true);
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateReceiverNullDestinationThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createReceiver(null);
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createReceiver(null);
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateReceiverNullDestinationWithSelectorThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createConsumer(null, "a > b");
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createConsumer(null, "a > b");
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateBrowserNullDestinationThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createBrowser(null);
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createBrowser(null);
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateBrowserNullDestinationWithSelectorThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createBrowser(null, "a > b");
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createBrowser(null, "a > b");
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateSubscriberNullDestinationThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createSubscriber(null);
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createSubscriber(null);
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateSubscriberNullDestinationWithSelectorNoLocalThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createSubscriber(null, "a > b", true);
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createSubscriber(null, "a > b", true);
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateDurableSubscriberNullDestinationThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createDurableSubscriber(null, "name");
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createDurableSubscriber(null, "name");
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateDurableSubscriberNullDestinationWithSelectorNoLocalThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createDurableSubscriber(null, "name", "a > b", true);
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createDurableSubscriber(null, "name", "a > b", true);
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateDurableConsumerNullDestinationThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createDurableConsumer(null, "name");
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createDurableConsumer(null, "name");
+        });
     }
 
-    @Test(timeout = 10000, expected=InvalidDestinationException.class)
+    @Test
+    @Timeout(10)
     public void testCreateDurableConsumerNullDestinationWithSelectorNoLocalThrowsIDE() throws JMSException {
-        JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        session.createDurableConsumer(null, "name", "a > b", true);
+        assertThrows(InvalidDestinationException.class, () -> {
+            JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            session.createDurableConsumer(null, "name", "a > b", true);
+        });
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testSendWithNullDestThrowsIDE() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         JmsMessageProducer mockProducer = Mockito.mock(JmsMessageProducer.class);
@@ -329,7 +400,8 @@
         } catch (InvalidDestinationException idex) {}
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCannotCreateConsumerOnTempDestinationFromSomeOtherSource() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         TemporaryQueue tempQueue = new JmsTemporaryQueue("ID:" + UUID.randomUUID().toString());
@@ -340,7 +412,8 @@
         } catch (InvalidDestinationException idex) {}
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCannotCreateConsumerOnDeletedTemporaryDestination() throws JMSException {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         TemporaryQueue tempQueue = session.createTemporaryQueue();
@@ -360,7 +433,8 @@
         } catch (IllegalStateException ise) {}
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testSessionRunFailsWhenSessionIsClosed() throws Exception {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -372,7 +446,8 @@
         } catch (RuntimeException re) {}
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateSharedConsumer() throws Exception {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -380,11 +455,12 @@
         JmsMessageConsumer consumer = (JmsMessageConsumer) session.createSharedConsumer(topic, "subscription");
 
         assertNotNull(consumer);
-        assertNull("unexpected selector", consumer.getMessageSelector());
-        assertEquals("unexpected topic", topic, consumer.getDestination());
+        assertNull(consumer.getMessageSelector(), "unexpected selector");
+        assertEquals(topic, consumer.getDestination(), "unexpected topic");
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateSharedConsumerWithSelector() throws Exception {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -393,11 +469,12 @@
         JmsMessageConsumer consumer = (JmsMessageConsumer) session.createSharedConsumer(topic, "subscription", selector);
 
         assertNotNull(consumer);
-        assertEquals("unexpected selector", selector, consumer.getMessageSelector());
-        assertEquals("unexpected topic", topic, consumer.getDestination());
+        assertEquals(selector, consumer.getMessageSelector(), "unexpected selector");
+        assertEquals(topic, consumer.getDestination(), "unexpected topic");
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateSharedDurableConsumer() throws Exception {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -405,11 +482,12 @@
         JmsMessageConsumer consumer = (JmsMessageConsumer) session.createSharedDurableConsumer(topic, "subscription");
 
         assertNotNull(consumer);
-        assertNull("unexpected selector", consumer.getMessageSelector());
-        assertEquals("unexpected topic", topic, consumer.getDestination());
+        assertNull(consumer.getMessageSelector(), "unexpected selector");
+        assertEquals(topic, consumer.getDestination(), "unexpected topic");
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateSharedDurableConsumerWithSelector() throws Exception {
         JmsSession session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
@@ -418,7 +496,7 @@
         JmsMessageConsumer consumer = (JmsMessageConsumer) session.createSharedDurableConsumer(topic, "subscription", selector);
 
         assertNotNull(consumer);
-        assertEquals("unexpected selector", selector, consumer.getMessageSelector());
-        assertEquals("unexpected topic", topic, consumer.getDestination());
+        assertEquals(selector, consumer.getMessageSelector(), "unexpected selector");
+        assertEquals(topic, consumer.getDestination(), "unexpected topic");
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTemporaryQueueTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTemporaryQueueTest.java
index 0d83316..8c583a8 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTemporaryQueueTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTemporaryQueueTest.java
@@ -18,20 +18,20 @@
 
 import static org.apache.qpid.jms.SerializationTestSupport.roundTripSerialize;
 import static org.apache.qpid.jms.SerializationTestSupport.serialize;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class JmsTemporaryQueueTest extends QpidJmsTestCase {
 
@@ -41,61 +41,61 @@
     @Test
     public void testIsQueue() {
         JmsTemporaryQueue queue = new JmsTemporaryQueue("myQueue");
-        assertTrue("should be a queue", queue.isQueue());
+        assertTrue(queue.isQueue(), "should be a queue");
     }
 
     @Test
     public void testIsTopic() {
         JmsTemporaryQueue queue = new JmsTemporaryQueue("myQueue");
-        assertFalse("should not be a topic", queue.isTopic());
+        assertFalse(queue.isTopic(), "should not be a topic");
     }
 
     @Test
     public void testIsTemporary() {
         JmsTemporaryQueue queue = new JmsTemporaryQueue("myQueue");
-        assertTrue("should be temporary", queue.isTemporary());
+        assertTrue(queue.isTemporary(), "should be temporary");
     }
 
     @Test
     public void testIsDeleted() throws Exception {
         JmsTemporaryQueue queue = new JmsTemporaryQueue("myQueue");
-        assertFalse("should not be deleted", queue.isDeleted());
+        assertFalse(queue.isDeleted(), "should not be deleted");
         queue.delete();
-        assertTrue("should be deleted", queue.isDeleted());
+        assertTrue(queue.isDeleted(), "should be deleted");
     }
 
     @Test
     public void testEqualsWithNull() {
         JmsTemporaryQueue queue = new JmsTemporaryQueue("myQueue");
-        assertFalse("should not be equal", queue.equals(null));
+        assertFalse(queue.equals(null), "should not be equal");
     }
 
     @Test
     public void testEqualsWithDifferentObjectType() {
         JmsTemporaryQueue queue = new JmsTemporaryQueue("name");
         JmsQueue otherObject = new JmsQueue("name");
-        assertFalse("should not be equal", queue.equals(otherObject));
+        assertFalse(queue.equals(otherObject), "should not be equal");
     }
 
     @Test
     public void testEqualsWithSameObject() {
         JmsTemporaryQueue queue = new JmsTemporaryQueue("name");
-        assertTrue("should be equal to itself", queue.equals(queue));
+        assertTrue(queue.equals(queue), "should be equal to itself");
     }
 
     @Test
     public void testEqualsWithDifferentObject() {
         JmsTemporaryQueue queue1 = new JmsTemporaryQueue("name");
         JmsTemporaryQueue queue2 = new JmsTemporaryQueue("name");
-        assertTrue("should be equal", queue1.equals(queue2));
-        assertTrue("should still be equal", queue2.equals(queue1));
+        assertTrue(queue1.equals(queue2), "should be equal");
+        assertTrue(queue2.equals(queue1), "should still be equal");
     }
 
     @Test
     public void testHashcodeWithEqualNamedObjects() {
         JmsTemporaryQueue queue1 = new JmsTemporaryQueue("name");
         JmsTemporaryQueue queue2 = new JmsTemporaryQueue("name");
-        assertEquals("should have same hashcode", queue1.hashCode(), queue2.hashCode());
+        assertEquals(queue1.hashCode(), queue2.hashCode(), "should have same hashcode");
     }
 
     @Test
@@ -104,7 +104,7 @@
         JmsTemporaryQueue queue2 = new JmsTemporaryQueue("name2");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("should not have same hashcode", queue1.hashCode(), queue2.hashCode());
+        assertNotEquals(queue1.hashCode(), queue2.hashCode(), "should not have same hashcode");
     }
 
     @Test
@@ -114,9 +114,9 @@
 
         Map<String, String> props = queue.getProperties();
 
-        assertTrue("Property not found: " + NAME_PROP, props.containsKey(NAME_PROP));
-        assertEquals("Unexpected value for property: " + NAME_PROP, name, props.get(NAME_PROP));
-        assertEquals("Unexpected number of properties", 1, props.size());
+        assertTrue(props.containsKey(NAME_PROP), "Property not found: " + NAME_PROP);
+        assertEquals(name, props.get(NAME_PROP), "Unexpected value for property: " + NAME_PROP);
+        assertEquals(1, props.size(), "Unexpected number of properties");
     }
 
     @Test
@@ -138,7 +138,7 @@
         String name = "myQueue";
         JmsTemporaryQueue queue = new JmsTemporaryQueue();
 
-        assertNull("Shouldnt have name yet", queue.getQueueName());
+        assertNull(queue.getQueueName(), "Shouldnt have name yet");
 
         Map<String, String> props = new HashMap<String, String>();
         if(addNameProp) {
@@ -151,10 +151,10 @@
 
         Map<String, String> unusedProps = queue.setProperties(props);
 
-        assertEquals("Unexpected value for name", name, queue.getQueueName());
+        assertEquals(name, queue.getQueueName(), "Unexpected value for name");
 
         // Verify the returned map was empty and unmodifiable
-        assertTrue("Map should be empty: " + unusedProps, unusedProps.isEmpty());
+        assertTrue(unusedProps.isEmpty(), "Map should be empty: " + unusedProps);
         try {
             unusedProps.put("a", "b");
             fail("Map should be unmodifiable");
@@ -176,12 +176,12 @@
         Map<String, String> unusedProps = queue.setProperties(props);
 
         // Verify the name property was applied.
-        assertEquals("Unexpected value for name", name, queue.getQueueName());
+        assertEquals(name, queue.getQueueName(), "Unexpected value for name");
 
         //Verify that the unused property was returned
-        assertEquals("Unexpected size of return map", 1, unusedProps.size());
-        assertTrue("Expected property not found in map: " + unusedProps, unusedProps.containsKey(unusedKey));
-        assertEquals("Unexpected property value", unusedValue, unusedProps.get(unusedKey));
+        assertEquals(1, unusedProps.size(), "Unexpected size of return map");
+        assertTrue(unusedProps.containsKey(unusedKey), "Expected property not found in map: " + unusedProps);
+        assertEquals(unusedValue, unusedProps.get(unusedKey), "Unexpected property value");
 
         // Verify the returned map was unmodifiable
         try {
@@ -199,12 +199,12 @@
 
         Object roundTripped = roundTripSerialize(queue);
 
-        assertNotNull("Null destination returned", roundTripped);
-        assertEquals("Unexpected type", JmsTemporaryQueue.class, roundTripped.getClass());
-        assertEquals("Unexpected name", name, ((JmsTemporaryQueue)roundTripped).getQueueName());
+        assertNotNull(roundTripped, "Null destination returned");
+        assertEquals(JmsTemporaryQueue.class, roundTripped.getClass(), "Unexpected type");
+        assertEquals(name, ((JmsTemporaryQueue)roundTripped).getQueueName(), "Unexpected name");
 
-        assertEquals("Objects were not equal", queue, roundTripped);
-        assertEquals("Object hashCodes were not equal", queue.hashCode(), roundTripped.hashCode());
+        assertEquals(queue, roundTripped, "Objects were not equal");
+        assertEquals(queue.hashCode(), roundTripped.hashCode(), "Object hashCodes were not equal");
     }
 
     @Test
@@ -212,12 +212,12 @@
         JmsTemporaryQueue queue1 = new JmsTemporaryQueue("myQueue");
         JmsTemporaryQueue queue2 = new JmsTemporaryQueue("myQueue");
 
-        assertEquals("Destinations were not equal", queue1, queue2);
+        assertEquals(queue1, queue2, "Destinations were not equal");
 
         byte[] bytes1 = serialize(queue1);
         byte[] bytes2 = serialize(queue2);
 
-        assertArrayEquals("Serialized bytes were not equal", bytes1, bytes2);
+        assertArrayEquals(bytes1, bytes2, "Serialized bytes were not equal");
     }
 
     @Test
@@ -225,7 +225,7 @@
         JmsTemporaryQueue queue1 = new JmsTemporaryQueue("myQueue1");
         JmsTemporaryQueue queue2 = new JmsTemporaryQueue("myQueue2");
 
-        assertNotEquals("Destinations were not expected to be equal", queue1, queue2);
+        assertNotEquals(queue1, queue2, "Destinations were not expected to be equal");
 
         byte[] bytes1 = serialize(queue1);
         byte[] bytes2 = serialize(queue2);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTemporaryTopicTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTemporaryTopicTest.java
index b7f3d67..cc7c818 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTemporaryTopicTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTemporaryTopicTest.java
@@ -18,20 +18,20 @@
 
 import static org.apache.qpid.jms.SerializationTestSupport.roundTripSerialize;
 import static org.apache.qpid.jms.SerializationTestSupport.serialize;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class JmsTemporaryTopicTest extends QpidJmsTestCase {
 
@@ -41,61 +41,61 @@
     @Test
     public void testIsQueue() {
         JmsTemporaryTopic topic = new JmsTemporaryTopic("myTopic");
-        assertFalse("should not be a queue", topic.isQueue());
+        assertFalse(topic.isQueue(), "should not be a queue");
     }
 
     @Test
     public void testIsTopic() {
         JmsTemporaryTopic topic = new JmsTemporaryTopic("myTopic");
-        assertTrue("should be a topic", topic.isTopic());
+        assertTrue(topic.isTopic(), "should be a topic");
     }
 
     @Test
     public void testIsTemporary() {
         JmsTemporaryTopic topic = new JmsTemporaryTopic("myTopic");
-        assertTrue("should be temporary", topic.isTemporary());
+        assertTrue(topic.isTemporary(), "should be temporary");
     }
 
     @Test
     public void testIsDeleted() throws Exception {
         JmsTemporaryTopic topic = new JmsTemporaryTopic("myTopic");
-        assertFalse("should not be deleted", topic.isDeleted());
+        assertFalse(topic.isDeleted(), "should not be deleted");
         topic.delete();
-        assertTrue("should be deleted", topic.isDeleted());
+        assertTrue(topic.isDeleted(), "should be deleted");
     }
 
     @Test
     public void testEqualsWithNull() {
         JmsTemporaryTopic topic = new JmsTemporaryTopic("myTopic");
-        assertFalse("should not be equal", topic.equals(null));
+        assertFalse(topic.equals(null), "should not be equal");
     }
 
     @Test
     public void testEqualsWithDifferentObjectType() {
         JmsTemporaryTopic topic = new JmsTemporaryTopic("name");
         JmsQueue otherObject = new JmsQueue("name");
-        assertFalse("should not be equal", topic.equals(otherObject));
+        assertFalse(topic.equals(otherObject), "should not be equal");
     }
 
     @Test
     public void testEqualsWithSameObject() {
         JmsTemporaryTopic topic = new JmsTemporaryTopic("name");
-        assertTrue("should be equal to itself", topic.equals(topic));
+        assertTrue(topic.equals(topic), "should be equal to itself");
     }
 
     @Test
     public void testEqualsWithDifferentObject() {
         JmsTemporaryTopic topic1 = new JmsTemporaryTopic("name");
         JmsTemporaryTopic topic2 = new JmsTemporaryTopic("name");
-        assertTrue("should be equal", topic1.equals(topic2));
-        assertTrue("should still be equal", topic2.equals(topic1));
+        assertTrue(topic1.equals(topic2), "should be equal");
+        assertTrue(topic2.equals(topic1), "should still be equal");
     }
 
     @Test
     public void testHashcodeWithEqualNamedObjects() {
         JmsTemporaryTopic topic1 = new JmsTemporaryTopic("name");
         JmsTemporaryTopic topic2 = new JmsTemporaryTopic("name");
-        assertEquals("should have same hashcode", topic1.hashCode(), topic2.hashCode());
+        assertEquals(topic1.hashCode(), topic2.hashCode(), "should have same hashcode");
     }
 
     @Test
@@ -104,7 +104,7 @@
         JmsTemporaryTopic topic2 = new JmsTemporaryTopic("name2");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("should not have same hashcode", topic1.hashCode(), topic2.hashCode());
+        assertNotEquals(topic1.hashCode(), topic2.hashCode(), "should not have same hashcode");
     }
 
     @Test
@@ -114,9 +114,9 @@
 
         Map<String, String> props = topic.getProperties();
 
-        assertTrue("Property not found: " + NAME_PROP, props.containsKey(NAME_PROP));
-        assertEquals("Unexpected value for property: " + NAME_PROP, name, props.get(NAME_PROP));
-        assertEquals("Unexpected number of properties", 1, props.size());
+        assertTrue(props.containsKey(NAME_PROP), "Property not found: " + NAME_PROP);
+        assertEquals(name, props.get(NAME_PROP), "Unexpected value for property: " + NAME_PROP);
+        assertEquals(1, props.size(), "Unexpected number of properties");
     }
 
     @Test
@@ -138,7 +138,7 @@
         String name = "myTopic";
         JmsTemporaryTopic topic = new JmsTemporaryTopic();
 
-        assertNull("Shouldnt have name yet", topic.getTopicName());
+        assertNull(topic.getTopicName(), "Shouldnt have name yet");
 
         Map<String, String> props = new HashMap<String, String>();
         if(addNameProp) {
@@ -151,10 +151,10 @@
 
         Map<String, String> unusedProps = topic.setProperties(props);
 
-        assertEquals("Unexpected value for name", name, topic.getTopicName());
+        assertEquals(name, topic.getTopicName(), "Unexpected value for name");
 
         // Verify the returned map was empty and unmodifiable
-        assertTrue("Map should be empty: " + unusedProps, unusedProps.isEmpty());
+        assertTrue(unusedProps.isEmpty(), "Map should be empty: " + unusedProps);
         try {
             unusedProps.put("a", "b");
             fail("Map should be unmodifiable");
@@ -176,12 +176,12 @@
         Map<String, String> unusedProps = topic.setProperties(props);
 
         // Verify the name property was applied.
-        assertEquals("Unexpected value for name", name, topic.getTopicName());
+        assertEquals(name, topic.getTopicName(), "Unexpected value for name");
 
         //Verify that the unused property was returned
-        assertEquals("Unexpected size of return map", 1, unusedProps.size());
-        assertTrue("Expected property not found in map: " + unusedProps, unusedProps.containsKey(unusedKey));
-        assertEquals("Unexpected property value", unusedValue, unusedProps.get(unusedKey));
+        assertEquals(1, unusedProps.size(), "Unexpected size of return map");
+        assertTrue(unusedProps.containsKey(unusedKey), "Expected property not found in map: " + unusedProps);
+        assertEquals(unusedValue, unusedProps.get(unusedKey), "Unexpected property value");
 
         // Verify the returned map was unmodifiable
         try {
@@ -199,12 +199,12 @@
 
         Object roundTripped = roundTripSerialize(topic);
 
-        assertNotNull("Null destination returned", roundTripped);
-        assertEquals("Unexpected type", JmsTemporaryTopic.class, roundTripped.getClass());
-        assertEquals("Unexpected name", name, ((JmsTemporaryTopic)roundTripped).getTopicName());
+        assertNotNull(roundTripped, "Null destination returned");
+        assertEquals(JmsTemporaryTopic.class, roundTripped.getClass(), "Unexpected type");
+        assertEquals(name, ((JmsTemporaryTopic)roundTripped).getTopicName(), "Unexpected name");
 
-        assertEquals("Objects were not equal", topic, roundTripped);
-        assertEquals("Object hashCodes were not equal", topic.hashCode(), roundTripped.hashCode());
+        assertEquals(topic, roundTripped, "Objects were not equal");
+        assertEquals(topic.hashCode(), roundTripped.hashCode(), "Object hashCodes were not equal");
     }
 
     @Test
@@ -212,12 +212,12 @@
         JmsTemporaryTopic topic1 = new JmsTemporaryTopic("myTopic");
         JmsTemporaryTopic topic2 = new JmsTemporaryTopic("myTopic");
 
-        assertEquals("Destinations were not equal", topic1, topic2);
+        assertEquals(topic1, topic2, "Destinations were not equal");
 
         byte[] bytes1 = serialize(topic1);
         byte[] bytes2 = serialize(topic2);
 
-        assertArrayEquals("Serialized bytes were not equal", bytes1, bytes2);
+        assertArrayEquals(bytes1, bytes2, "Serialized bytes were not equal");
     }
 
     @Test
@@ -225,7 +225,7 @@
         JmsTemporaryTopic topic1 = new JmsTemporaryTopic("myTopic1");
         JmsTemporaryTopic topic2 = new JmsTemporaryTopic("myTopic2");
 
-        assertNotEquals("Destinations were not expected to be equal", topic1, topic2);
+        assertNotEquals(topic1, topic2, "Destinations were not expected to be equal");
 
         byte[] bytes1 = serialize(topic1);
         byte[] bytes2 = serialize(topic2);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTopicConnectionTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTopicConnectionTest.java
index 9155630..85652f5 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTopicConnectionTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTopicConnectionTest.java
@@ -16,13 +16,17 @@
  */
 package org.apache.qpid.jms;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.IllegalStateException;
 import jakarta.jms.JMSException;
 import jakarta.jms.ServerSessionPool;
 import jakarta.jms.Session;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test various contract aspects of the TopicConnection implementation
@@ -30,21 +34,27 @@
 public class JmsTopicConnectionTest extends JmsConnectionTestSupport {
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         topicConnection = createTopicConnectionToMockProvider();
         topicConnection.start();
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
-    public void testCreateConnectionConsumerOnTopicConnection() throws JMSException{
-        topicConnection.createConnectionConsumer(new JmsQueue(), "subscriptionName", (ServerSessionPool)null, 1);
+    @Test
+    @Timeout(30)
+    public void testCreateConnectionConsumerOnTopicConnection() throws JMSException {
+        assertThrows(IllegalStateException.class, () -> {
+            topicConnection.createConnectionConsumer(new JmsQueue(), "subscriptionName", (ServerSessionPool) null, 1);
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
-    public void testCreateQueueSessionOnTopicConnection() throws JMSException{
-        topicConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
+    @Test
+    @Timeout(30)
+    public void testCreateQueueSessionOnTopicConnection() throws JMSException {
+        assertThrows(IllegalStateException.class, () -> {
+            topicConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
+        });
     }
 }
\ No newline at end of file
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTopicTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTopicTest.java
index f43e828..19c65e5 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTopicTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/JmsTopicTest.java
@@ -18,20 +18,20 @@
 
 import static org.apache.qpid.jms.SerializationTestSupport.roundTripSerialize;
 import static org.apache.qpid.jms.SerializationTestSupport.serialize;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class JmsTopicTest extends QpidJmsTestCase {
 
@@ -41,61 +41,61 @@
     @Test
     public void testIsQueue() {
         JmsTopic topic = new JmsTopic("myTopic");
-        assertFalse("should not be a queue", topic.isQueue());
+        assertFalse(topic.isQueue(), "should not be a queue");
     }
 
     @Test
     public void testIsTopic() {
         JmsTopic topic = new JmsTopic("myTopic");
-        assertTrue("should be a topic", topic.isTopic());
+        assertTrue(topic.isTopic(), "should be a topic");
     }
 
     @Test
     public void testIsTemporary() {
         JmsTopic topic = new JmsTopic("myTopic");
-        assertFalse("should not be temporary", topic.isTemporary());
+        assertFalse(topic.isTemporary(), "should not be temporary");
     }
 
     @Test
     public void testEqualsWithNull() {
         JmsTopic topic = new JmsTopic("myTopic");
-        assertFalse("should not be equal", topic.equals(null));
+        assertFalse(topic.equals(null), "should not be equal");
     }
 
     @Test
     public void testEqualsWithDifferentObjectType() {
         JmsTopic topic = new JmsTopic("name");
         JmsQueue otherObject = new JmsQueue("name");
-        assertFalse("should not be equal", topic.equals(otherObject));
+        assertFalse(topic.equals(otherObject), "should not be equal");
     }
 
     @Test
     public void testEqualsWithSameObject() {
         JmsTopic topic = new JmsTopic("name");
-        assertTrue("should be equal to itself", topic.equals(topic));
+        assertTrue(topic.equals(topic), "should be equal to itself");
     }
 
     @Test
     public void testEqualsWithDifferentObject() {
         JmsTopic topic1 = new JmsTopic("name");
         JmsTopic topic2 = new JmsTopic("name");
-        assertTrue("should be equal", topic1.equals(topic2));
-        assertTrue("should still be equal", topic2.equals(topic1));
+        assertTrue(topic1.equals(topic2), "should be equal");
+        assertTrue(topic2.equals(topic1), "should still be equal");
     }
 
     @Test
     public void testEqualsWithTemporaryTopic() {
         JmsTopic topic1 = new JmsTopic("name");
         JmsTemporaryTopic topic2 = new JmsTemporaryTopic("name");
-        assertFalse("should be unequal", topic1.equals(topic2));
-        assertFalse("should still be unequal", topic2.equals(topic1));
+        assertFalse(topic1.equals(topic2), "should be unequal");
+        assertFalse(topic2.equals(topic1), "should still be unequal");
     }
 
     @Test
     public void testHashcodeWithEqualNamedObjects() {
         JmsTopic topic1 = new JmsTopic("name");
         JmsTopic topic2 = new JmsTopic("name");
-        assertEquals("should have same hashcode", topic1.hashCode(), topic2.hashCode());
+        assertEquals(topic1.hashCode(), topic2.hashCode(), "should have same hashcode");
     }
 
     @Test
@@ -104,7 +104,7 @@
         JmsTopic topic2 = new JmsTopic("name2");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("should not have same hashcode", topic1.hashCode(), topic2.hashCode());
+        assertNotEquals(topic1.hashCode(), topic2.hashCode(), "should not have same hashcode");
     }
 
     @Test
@@ -114,9 +114,9 @@
 
         Map<String, String> props = topic.getProperties();
 
-        assertTrue("Property not found: " + NAME_PROP, props.containsKey(NAME_PROP));
-        assertEquals("Unexpected value for property: " + NAME_PROP, name, props.get(NAME_PROP));
-        assertEquals("Unexpected number of properties", 1, props.size());
+        assertTrue(props.containsKey(NAME_PROP), "Property not found: " + NAME_PROP);
+        assertEquals(name, props.get(NAME_PROP), "Unexpected value for property: " + NAME_PROP);
+        assertEquals(1, props.size(), "Unexpected number of properties");
     }
 
     @Test
@@ -138,7 +138,7 @@
         String name = "myTopic";
         JmsTopic topic = new JmsTopic();
 
-        assertNull("Shouldnt have name yet", topic.getTopicName());
+        assertNull(topic.getTopicName(), "Shouldnt have name yet");
 
         Map<String, String> props = new HashMap<String, String>();
         if(addNameProp) {
@@ -151,10 +151,10 @@
 
         Map<String, String> unusedProps = topic.setProperties(props);
 
-        assertEquals("Unexpected value for name", name, topic.getTopicName());
+        assertEquals(name, topic.getTopicName(), "Unexpected value for name");
 
         // Verify the returned map was empty and unmodifiable
-        assertTrue("Map should be empty: " + unusedProps, unusedProps.isEmpty());
+        assertTrue(unusedProps.isEmpty(), "Map should be empty: " + unusedProps);
         try {
             unusedProps.put("a", "b");
             fail("Map should be unmodifiable");
@@ -177,12 +177,12 @@
         Map<String, String> unusedProps = topic.setProperties(props);
 
         // Verify the name property was applied.
-        assertEquals("Unexpected value for name", name, topic.getTopicName());
+        assertEquals(name, topic.getTopicName(), "Unexpected value for name");
 
         //Verify that the unused property was returned
-        assertEquals("Unexpected size of return map", 1, unusedProps.size());
-        assertTrue("Expected property not found in map: " + unusedProps, unusedProps.containsKey(unusedKey));
-        assertEquals("Unexpected property value", unusedValue, unusedProps.get(unusedKey));
+        assertEquals(1, unusedProps.size(), "Unexpected size of return map");
+        assertTrue(unusedProps.containsKey(unusedKey), "Expected property not found in map: " + unusedProps);
+        assertEquals(unusedValue, unusedProps.get(unusedKey), "Unexpected property value");
 
         // Verify the returned map was unmodifiable
         try {
@@ -200,12 +200,12 @@
 
         Object roundTripped = roundTripSerialize(topic);
 
-        assertNotNull("Null destination returned", roundTripped);
-        assertEquals("Unexpected type", JmsTopic.class, roundTripped.getClass());
-        assertEquals("Unexpected name", name, ((JmsTopic)roundTripped).getTopicName());
+        assertNotNull(roundTripped, "Null destination returned");
+        assertEquals(JmsTopic.class, roundTripped.getClass(), "Unexpected type");
+        assertEquals(name, ((JmsTopic)roundTripped).getTopicName(), "Unexpected name");
 
-        assertEquals("Objects were not equal", topic, roundTripped);
-        assertEquals("Object hashCodes were not equal", topic.hashCode(), roundTripped.hashCode());
+        assertEquals(topic, roundTripped, "Objects were not equal");
+        assertEquals(topic.hashCode(), roundTripped.hashCode(), "Object hashCodes were not equal");
     }
 
     @Test
@@ -213,12 +213,12 @@
         JmsTopic topic1 = new JmsTopic("myTopic");
         JmsTopic topic2 = new JmsTopic("myTopic");
 
-        assertEquals("Destinations were not equal", topic1, topic2);
+        assertEquals(topic1, topic2, "Destinations were not equal");
 
         byte[] bytes1 = serialize(topic1);
         byte[] bytes2 = serialize(topic2);
 
-        assertArrayEquals("Serialized bytes were not equal", bytes1, bytes2);
+        assertArrayEquals(bytes1, bytes2, "Serialized bytes were not equal");
     }
 
     @Test
@@ -226,7 +226,7 @@
         JmsTopic topic1 = new JmsTopic("myTopic1");
         JmsTopic topic2 = new JmsTopic("myTopic2");
 
-        assertNotEquals("Destinations were not expected to be equal", topic1, topic2);
+        assertNotEquals(topic1, topic2, "Destinations were not expected to be equal");
 
         byte[] bytes1 = serialize(topic1);
         byte[] bytes2 = serialize(topic2);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsConsumerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsConsumerTest.java
index fcac92f..0d4e1ea 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsConsumerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsConsumerTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.qpid.jms.consumer;
 
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.ArgumentMatchers.anyLong;
 
 import java.util.Map;
@@ -29,7 +29,7 @@
 import org.apache.qpid.jms.JmsConsumer;
 import org.apache.qpid.jms.JmsMessageConsumer;
 import org.apache.qpid.jms.JmsSession;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 /**
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerClosedTest.java
index 81f508b..df268ae 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerClosedTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.qpid.jms.consumer;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.JMSException;
 import jakarta.jms.Message;
 import jakarta.jms.MessageConsumer;
@@ -24,8 +26,10 @@
 import jakarta.jms.Session;
 
 import org.apache.qpid.jms.JmsConnectionTestSupport;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Tests MessageConsumer method contracts after the MessageConsumer is closed.
@@ -37,54 +41,73 @@
     protected MessageConsumer createConsumer() throws Exception {
         connection = createConnectionToMockProvider();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue destination = session.createQueue(_testName.getMethodName());
+        Queue destination = session.createQueue(_testMethodName);
         MessageConsumer consumer = session.createConsumer(destination);
         consumer.close();
         return consumer;
     }
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         consumer = createConsumer();
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetMessageSelectorFails() throws Exception {
-        consumer.getMessageSelector();
-    }
-
-    @Test(timeout=30000, expected=JMSException.class)
-    public void testGetMessageListenerFails() throws Exception {
-        consumer.getMessageListener();
-    }
-
-    @Test(timeout=30000, expected=JMSException.class)
-    public void testSetMessageListenerFails() throws Exception {
-        consumer.setMessageListener(new MessageListener() {
-            @Override
-            public void onMessage(Message message) {
-            }
+        assertThrows(JMSException.class, () -> {
+            consumer.getMessageSelector();
         });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
+    public void testGetMessageListenerFails() throws Exception {
+        assertThrows(JMSException.class, () -> {
+            consumer.getMessageListener();
+        });
+    }
+
+    @Test
+    @Timeout(30)
+    public void testSetMessageListenerFails() throws Exception {
+        assertThrows(JMSException.class, () -> {
+            consumer.setMessageListener(new MessageListener() {
+                @Override
+                public void onMessage(Message message) {
+                }
+            });
+        });
+    }
+
+    @Test
+    @Timeout(30)
     public void testRreceiveFails() throws Exception {
-        consumer.receive();
+        assertThrows(JMSException.class, () -> {
+            consumer.receive();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testRreceiveTimedFails() throws Exception {
-        consumer.receive(11);
+        assertThrows(JMSException.class, () -> {
+            consumer.receive(11);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testRreceiveNoWaitFails() throws Exception {
-        consumer.receiveNoWait();
+        assertThrows(JMSException.class, () -> {
+            consumer.receiveNoWait();
+        });
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testClose() throws Exception {
         consumer.close();
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerFailedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerFailedTest.java
index 0faf528..fe2b27a 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerFailedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerFailedTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.qpid.jms.consumer;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.concurrent.TimeUnit;
 
@@ -39,7 +39,7 @@
     protected MessageConsumer createConsumer() throws Exception {
         connection = createConnectionToMockProvider();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue destination = session.createQueue(_testName.getMethodName());
+        Queue destination = session.createQueue(_testMethodName);
         MessageConsumer consumer = session.createConsumer(destination);
         connection.setExceptionListener(new ExceptionListener() {
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java
index b5dd80b..a80ac14 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.consumer;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Enumeration;
 
@@ -30,8 +30,10 @@
 import jakarta.jms.Session;
 
 import org.apache.qpid.jms.JmsConnectionTestSupport;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test basic contract of QueueBroser implementation.
@@ -43,30 +45,33 @@
     protected QueueBrowser browser;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         connection = createConnectionToMockProvider();
         session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        queue = session.createQueue(_testName.getMethodName());
+        queue = session.createQueue(_testMethodName);
         browser = session.createBrowser(queue);
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateBrowser() throws Exception {
         QueueBrowser browser = session.createBrowser(queue);
         assertEquals(queue, browser.getQueue());
         assertNull(browser.getMessageSelector());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateBrowserAndCloseTwice() throws Exception {
         browser = session.createBrowser(queue);
         browser.close();
         browser.close();  // Should not throw on multiple close.
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testHasMoreElementsOnClosedBrowser() throws Exception {
         browser = session.createBrowser(queue);
 
@@ -78,7 +83,8 @@
         assertFalse(browse.hasMoreElements());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testGetEnumerationClosedBrowser() throws Exception {
         browser = session.createBrowser(queue);
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueReceiverClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueReceiverClosedTest.java
index bf03666..956c1c3 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueReceiverClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueReceiverClosedTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.qpid.jms.consumer;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.Queue;
 import jakarta.jms.QueueConnection;
 import jakarta.jms.QueueReceiver;
@@ -23,8 +25,10 @@
 import jakarta.jms.Session;
 
 import org.apache.qpid.jms.JmsConnectionTestSupport;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Tests QueueReceiver method contracts after the QueueReceiver is closed.
@@ -36,30 +40,39 @@
     protected void createTestResources() throws Exception {
         connection = createQueueConnectionToMockProvider();
         QueueSession session = ((QueueConnection) connection).createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue destination = session.createQueue(_testName.getMethodName());
+        Queue destination = session.createQueue(_testMethodName);
         receiver = session.createReceiver(destination);
         receiver.close();
     }
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         createTestResources();
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetMessageListenerFails() throws Exception {
-        receiver.getMessageListener();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            receiver.getMessageListener();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetMessageSelectorFails() throws Exception {
-        receiver.getMessageSelector();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            receiver.getMessageSelector();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetTopicFails() throws Exception {
-        receiver.getQueue();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            receiver.getQueue();
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueReceiverTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueReceiverTest.java
index 6993f9f..22bb76d 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueReceiverTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsQueueReceiverTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.consumer;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import jakarta.jms.Message;
 import jakarta.jms.MessageListener;
@@ -28,8 +28,10 @@
 import jakarta.jms.Session;
 
 import org.apache.qpid.jms.JmsConnectionTestSupport;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test the basic contract of the QueueReceiver
@@ -41,27 +43,30 @@
     protected QueueReceiver receiver;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         queueConnection = createQueueConnectionToMockProvider();
         session = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
-        queue = session.createQueue(_testName.getMethodName());
+        queue = session.createQueue(_testMethodName);
         receiver = session.createReceiver(queue);
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testMultipleCloseCalls() throws Exception {
         receiver.close();
         receiver.close();
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testGetQueue() throws Exception {
         assertEquals(queue, receiver.getQueue());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testGetMessageListener() throws Exception {
         assertNull(receiver.getMessageListener());
         receiver.setMessageListener(new MessageListener() {
@@ -73,7 +78,8 @@
         assertNotNull(receiver.getMessageListener());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testGetMessageSelector() throws Exception {
         assertNull(receiver.getMessageSelector());
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsTopicSubscriberClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsTopicSubscriberClosedTest.java
index 5d8c2cc..85df2f8 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsTopicSubscriberClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsTopicSubscriberClosedTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.qpid.jms.consumer;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.Session;
 import jakarta.jms.Topic;
 import jakarta.jms.TopicConnection;
@@ -23,8 +25,10 @@
 import jakarta.jms.TopicSubscriber;
 
 import org.apache.qpid.jms.JmsConnectionTestSupport;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Tests TopicSubscriber method contracts after the TopicSubscriber is closed.
@@ -36,35 +40,47 @@
     protected void createTestResources() throws Exception {
         connection = createTopicConnectionToMockProvider();
         TopicSession session = ((TopicConnection) connection).createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
-        Topic destination = session.createTopic(_testName.getMethodName());
+        Topic destination = session.createTopic(_testMethodName);
         subscriber = session.createSubscriber(destination);
         subscriber.close();
     }
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         createTestResources();
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetNoLocalFails() throws Exception {
-        subscriber.getNoLocal();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            subscriber.getNoLocal();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetMessageListenerFails() throws Exception {
-        subscriber.getMessageListener();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            subscriber.getMessageListener();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetMessageSelectorFails() throws Exception {
-        subscriber.getMessageSelector();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            subscriber.getMessageSelector();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetTopicFails() throws Exception {
-        subscriber.getTopic();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            subscriber.getTopic();
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsTopicSubscriberTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsTopicSubscriberTest.java
index 7b26de2..9909685 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsTopicSubscriberTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/consumer/JmsTopicSubscriberTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.consumer;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import jakarta.jms.Message;
 import jakarta.jms.MessageListener;
@@ -28,8 +28,10 @@
 import jakarta.jms.TopicSubscriber;
 
 import org.apache.qpid.jms.JmsConnectionTestSupport;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test the basic contract of the TopicSubscriber
@@ -41,27 +43,30 @@
     protected TopicSubscriber subscriber;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         topicConnection = createTopicConnectionToMockProvider();
         session = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
-        topic = session.createTopic(_testName.getMethodName());
+        topic = session.createTopic(_testMethodName);
         subscriber = session.createSubscriber(topic);
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testMultipleCloseCalls() throws Exception {
         subscriber.close();
         subscriber.close();
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testGetQueue() throws Exception {
         assertEquals(topic, subscriber.getTopic());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testGetMessageListener() throws Exception {
         assertNull(subscriber.getMessageListener());
         subscriber.setMessageListener(new MessageListener() {
@@ -73,7 +78,8 @@
         assertNotNull(subscriber.getMessageListener());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testGetMessageSelector() throws Exception {
         assertNull(subscriber.getMessageSelector());
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/exceptions/JmsExceptionSupportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/exceptions/JmsExceptionSupportTest.java
index d2afb5c..cfe2cc6 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/exceptions/JmsExceptionSupportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/exceptions/JmsExceptionSupportTest.java
@@ -16,9 +16,10 @@
  */
 package org.apache.qpid.jms.exceptions;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.io.IOException;
 
@@ -45,7 +46,7 @@
 import jakarta.jms.TransactionRolledBackException;
 import jakarta.jms.TransactionRolledBackRuntimeException;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests for various utility methods in the Exception support class.
@@ -154,63 +155,87 @@
         assertNull(result.getLinkedException());
     }
 
-    @Test(expected = JMSRuntimeException.class)
+    @Test
     public void testConvertsJMSExceptionToJMSRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new JMSException("error"));
+        assertThrows(JMSRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new JMSException("error"));
+        });
     }
 
-    @Test(expected = IllegalStateRuntimeException.class)
+    @Test
     public void testConvertsIllegalStateExceptionToIlleglStateRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new IllegalStateException("error"));
+        assertThrows(IllegalStateRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new IllegalStateException("error"));
+        });
     }
 
-    @Test(expected = InvalidClientIDRuntimeException.class)
+    @Test
     public void testConvertsInvalidClientIDExceptionToInvalidClientIDRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new InvalidClientIDException("error"));
+        assertThrows(InvalidClientIDRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new InvalidClientIDException("error"));
+        });
     }
 
-    @Test(expected = InvalidDestinationRuntimeException.class)
+    @Test
     public void testConvertsInvalidDestinationExceptionToInvalidDestinationRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new InvalidDestinationException("error"));
+        assertThrows(InvalidDestinationRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new InvalidDestinationException("error"));
+        });
     }
 
-    @Test(expected = InvalidSelectorRuntimeException.class)
+    @Test
     public void testConvertsInvalidSelectorExceptionToInvalidSelectorRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new InvalidSelectorException("error"));
+        assertThrows(InvalidSelectorRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new InvalidSelectorException("error"));
+        });
     }
 
-    @Test(expected = JMSSecurityRuntimeException.class)
+    @Test
     public void testConvertsJMSSecurityExceptionToJMSSecurityRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new JMSSecurityException("error"));
+        assertThrows(JMSSecurityRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new JMSSecurityException("error"));
+        });
     }
 
-    @Test(expected = MessageFormatRuntimeException.class)
+    @Test
     public void testConvertsMessageFormatExceptionToMessageFormatRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new MessageFormatException("error"));
+        assertThrows(MessageFormatRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new MessageFormatException("error"));
+        });
     }
 
-    @Test(expected = MessageNotWriteableRuntimeException.class)
+    @Test
     public void testConvertsMessageNotWriteableExceptionToMessageNotWriteableRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new MessageNotWriteableException("error"));
+        assertThrows(MessageNotWriteableRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new MessageNotWriteableException("error"));
+        });
     }
 
-    @Test(expected = ResourceAllocationRuntimeException.class)
+    @Test
     public void testConvertsResourceAllocationExceptionToResourceAllocationRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new ResourceAllocationException("error"));
+        assertThrows(ResourceAllocationRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new ResourceAllocationException("error"));
+        });
     }
 
-    @Test(expected = TransactionInProgressRuntimeException.class)
+    @Test
     public void testConvertsTransactionInProgressExceptionToTransactionInProgressRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new TransactionInProgressException("error"));
+        assertThrows(TransactionInProgressRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new TransactionInProgressException("error"));
+        });
     }
 
-    @Test(expected = TransactionRolledBackRuntimeException.class)
+    @Test
     public void testConvertsTransactionRolledBackExceptionToTransactionRolledBackRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new TransactionRolledBackException("error"));
+        assertThrows(TransactionRolledBackRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new TransactionRolledBackException("error"));
+        });
     }
 
-    @Test(expected = JMSRuntimeException.class)
+    @Test
     public void testConvertsNonJMSExceptionToJMSRuntimeException() {
-        throw JmsExceptionSupport.createRuntimeException(new IOException());
+        assertThrows(JMSRuntimeException.class, () -> {
+            throw JmsExceptionSupport.createRuntimeException(new IOException());
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/AmqpAcknowledgementsIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/AmqpAcknowledgementsIntegrationTest.java
index 1782f56..fa3037a 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/AmqpAcknowledgementsIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/AmqpAcknowledgementsIntegrationTest.java
@@ -19,10 +19,10 @@
 package org.apache.qpid.jms.integration;
 
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -50,7 +50,8 @@
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 import org.hamcrest.Matcher;
 import org.hamcrest.Matchers;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class AmqpAcknowledgementsIntegrationTest extends QpidJmsTestCase {
 
@@ -60,7 +61,8 @@
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAcknowledgeFailsAfterSessionIsClosed() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -77,7 +79,7 @@
             MessageConsumer messageConsumer = session.createConsumer(queue);
 
             Message receivedMessage = messageConsumer.receive(6000);
-            assertNotNull("Message was not recieved", receivedMessage);
+            assertNotNull(receivedMessage, "Message was not recieved");
 
             testPeer.expectDisposition(true, new ModifiedMatcher().withDeliveryFailed(equalTo(true)), 1, 1);
             testPeer.expectEnd();
@@ -96,42 +98,50 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDefaultAcceptMessages() throws Exception {
         doTestAmqpAcknowledgementTestImpl(SKIP, new AcceptedMatcher(), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestAcceptMessages() throws Exception {
         doTestAmqpAcknowledgementTestImpl(JmsMessageSupport.ACCEPTED, new AcceptedMatcher(), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestRejectMessages() throws Exception {
         doTestAmqpAcknowledgementTestImpl(JmsMessageSupport.REJECTED, new RejectedMatcher(), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestReleaseMessages() throws Exception {
         doTestAmqpAcknowledgementTestImpl(JmsMessageSupport.RELEASED, new ReleasedMatcher(), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestReleaseMessagesClearPropsFirst() throws Exception {
         doTestAmqpAcknowledgementTestImpl(JmsMessageSupport.RELEASED, new ReleasedMatcher(), true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestModifiedFailedMessages() throws Exception {
         doTestAmqpAcknowledgementTestImpl(JmsMessageSupport.MODIFIED_FAILED, new ModifiedMatcher().withDeliveryFailed(equalTo(true)), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestModifiedFailedUndeliverableHereMessages() throws Exception {
         doTestAmqpAcknowledgementTestImpl(JmsMessageSupport.MODIFIED_FAILED_UNDELIVERABLE, new ModifiedMatcher().withDeliveryFailed(equalTo(true)).withUndeliverableHere(equalTo(true)), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestAcknowledgeMessagesWithInvalidDisposition() throws Exception {
         doTestAmqpAcknowledgementTestImpl(INVALID, new AcceptedMatcher(), false);
     }
@@ -158,7 +168,7 @@
             Message lastReceivedMessage = null;
             for (int i = 1; i <= msgCount; i++) {
                 lastReceivedMessage = messageConsumer.receive(6000);
-                assertNotNull("Message " + i + " was not recieved", lastReceivedMessage);
+                assertNotNull(lastReceivedMessage, "Message " + i + " was not recieved");
             }
 
             if (disposition != SKIP) {
@@ -188,42 +198,50 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDefaultAcceptMessagesWithMessageListener() throws Exception {
         doTestAmqpAcknowledgementAsyncTestImpl(SKIP, new AcceptedMatcher(), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestAcceptMessagesWithMessageListener() throws Exception {
         doTestAmqpAcknowledgementAsyncTestImpl(JmsMessageSupport.ACCEPTED, new AcceptedMatcher(), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestRejectMessagesWithMessageListener() throws Exception {
         doTestAmqpAcknowledgementAsyncTestImpl(JmsMessageSupport.REJECTED, new RejectedMatcher(), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestReleaseMessagesWithMessageListener() throws Exception {
         doTestAmqpAcknowledgementAsyncTestImpl(JmsMessageSupport.RELEASED, new ReleasedMatcher(), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestReleaseMessagesClearPropsFirstWithMessageListener() throws Exception {
         doTestAmqpAcknowledgementAsyncTestImpl(JmsMessageSupport.RELEASED, new ReleasedMatcher(), true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestModifiedFailedMessagesWithMessageListener() throws Exception {
         doTestAmqpAcknowledgementAsyncTestImpl(JmsMessageSupport.MODIFIED_FAILED, new ModifiedMatcher().withDeliveryFailed(equalTo(true)), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestModifiedFailedUndeliverableHereMessagesWithMessageListener() throws Exception {
         doTestAmqpAcknowledgementAsyncTestImpl(JmsMessageSupport.MODIFIED_FAILED_UNDELIVERABLE, new ModifiedMatcher().withDeliveryFailed(equalTo(true)).withUndeliverableHere(equalTo(true)), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRequestAcknowledgeMessagesWithInvalidDispositionWithMessageListener() throws Exception {
         doTestAmqpAcknowledgementAsyncTestImpl(INVALID, new AcceptedMatcher(), false);
     }
@@ -258,8 +276,8 @@
                 }
             });
 
-            assertTrue("Did not get all messages", receiveCountDown.await(10, TimeUnit.SECONDS));
-            assertNotNull("Message was not received", lastReceivedMessage.get());
+            assertTrue(receiveCountDown.await(10, TimeUnit.SECONDS), "Did not get all messages");
+            assertNotNull(lastReceivedMessage.get(), "Message was not received");
 
             if (disposition != SKIP) {
                 if (clearPropsFirst) {
@@ -287,7 +305,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAcknowledgeIndividualMessages()  throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -309,10 +328,10 @@
             Message lastReceivedMessage = null;
             for (int i = 0; i < msgCount; i++) {
                 lastReceivedMessage = messageConsumer.receive(3000);
-                assertNotNull("Message " + i + " was not received", lastReceivedMessage);
+                assertNotNull(lastReceivedMessage, "Message " + i + " was not received");
                 messages.add(lastReceivedMessage);
 
-                assertEquals("unexpected message number property", i, lastReceivedMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER));
+                assertEquals(i, lastReceivedMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER), "unexpected message number property");
             }
 
             List<Integer> ackTypes = new ArrayList<>();
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/AnonymousFallbackProducerIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/AnonymousFallbackProducerIntegrationTest.java
index 072727a..27bae34 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/AnonymousFallbackProducerIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/AnonymousFallbackProducerIntegrationTest.java
@@ -18,12 +18,12 @@
 
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
@@ -56,10 +56,8 @@
 import org.apache.qpid.jms.test.testpeer.matchers.sections.MessagePropertiesSectionMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.sections.TransferPayloadCompositeMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.types.EncodedAmqpValueMatcher;
-import org.apache.qpid.jms.util.QpidJMSTestRunner;
-import org.apache.qpid.jms.util.Repeat;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -68,14 +66,14 @@
  *
  * DO NOT add capability to indicate server support for ANONYMOUS-RELAY for any of these tests
  */
-@RunWith(QpidJMSTestRunner.class)
 public class AnonymousFallbackProducerIntegrationTest extends QpidJmsTestCase {
 
     private static final Logger LOG = LoggerFactory.getLogger(AnonymousFallbackProducerIntegrationTest.class);
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSenderWithNoActiveFallbackProducers() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -93,14 +91,14 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseProducerDuringSyncSendNoCache() throws Exception {
         doTestRemotelyCloseProducerDuringSyncSend(0);
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseProducerDuringSyncSendOneCached() throws Exception {
         doTestRemotelyCloseProducerDuringSyncSend(1);
     }
@@ -148,8 +146,8 @@
                 LOG.trace("JMSException thrown from send: ", jmse);
                 // Expected but requires some context to be correct.
                 assertTrue(jmse instanceof ResourceAllocationException);
-                assertNotNull("Expected exception to have a message", jmse.getMessage());
-                assertTrue("Expected breadcrumb to be present in message", jmse.getMessage().contains(BREAD_CRUMB));
+                assertNotNull(jmse.getMessage(), "Expected exception to have a message");
+                assertTrue(jmse.getMessage().contains(BREAD_CRUMB), "Expected breadcrumb to be present in message");
             }
 
             connection.close();
@@ -158,14 +156,14 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseProducerWithSendWaitingForCreditNoCache() throws Exception {
         doTestRemotelyCloseProducerWithSendWaitingForCredit(0);
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseProducerWithSendWaitingForCreditOneCached() throws Exception {
         doTestRemotelyCloseProducerWithSendWaitingForCredit(1);
     }
@@ -206,14 +204,14 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseConnectionDuringSyncSendNoCache() throws Exception {
         doTestRemotelyCloseConnectionDuringSyncSend(0);
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseConnectionDuringSyncSendOneCached() throws Exception {
         doTestRemotelyCloseConnectionDuringSyncSend(1);
     }
@@ -258,8 +256,8 @@
             } catch (JMSException jmse) {
                 // Expected exception with specific context
                 assertTrue(jmse instanceof ResourceAllocationException);
-                assertNotNull("Expected exception to have a message", jmse.getMessage());
-                assertTrue("Expected breadcrumb to be present in message", jmse.getMessage().contains(BREAD_CRUMB));
+                assertNotNull(jmse.getMessage(), "Expected exception to have a message");
+                assertTrue(jmse.getMessage().contains(BREAD_CRUMB), "Expected breadcrumb to be present in message");
             }
 
             testPeer.waitForAllHandlersToComplete(3000);
@@ -268,14 +266,14 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendWhenLinkCreditIsZeroAndTimeoutNoCache() throws Exception {
         doTestSendWhenLinkCreditIsZeroAndTimeout(0);
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendWhenLinkCreditIsZeroAndTimeoutCacheOne() throws Exception {
         doTestSendWhenLinkCreditIsZeroAndTimeout(1);
     }
@@ -320,8 +318,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSyncSendFailureHandled() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -341,7 +339,7 @@
 
             // Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             // Expect a new message sent by the above producer to cause creation of a new
             // sender link to the given destination, then closing the link after the message is sent.
@@ -382,8 +380,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendFailureHandled() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -411,7 +409,7 @@
 
             //Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             // Expect a new message sent by the above producer to cause creation of a new
             // sender link to the given destination, then closing the link after the message is sent.
@@ -450,7 +448,7 @@
             testPeer.expectTransfer(messageMatcher);
             testPeer.expectDetach(true, true, true);
 
-            assertTrue("Send failure not reported to exception handler", sendFailureReportedToListener.await(5, TimeUnit.SECONDS));
+            assertTrue(sendFailureReportedToListener.await(5, TimeUnit.SECONDS), "Send failure not reported to exception handler");
             assertNotNull(sendFailureError.get());
             assertTrue(sendFailureError.get() instanceof ResourceAllocationException);
             assertTrue(sendFailureError.get().getMessage().contains(BREAD_CRUMB));
@@ -467,8 +465,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionListenerSendFailureHandled() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer,
@@ -487,7 +485,7 @@
 
             //Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             // Expect a new message sent by the above producer to cause creation of a new
             // sender link to the given destination, then closing the link after the message is sent.
@@ -530,7 +528,7 @@
             testPeer.expectTransfer(messageMatcher);
             testPeer.expectDetach(true, true, true);
 
-            assertTrue("Send failure not reported to exception handler", completionListener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(completionListener.awaitCompletion(5, TimeUnit.SECONDS), "Send failure not reported to exception handler");
             assertNotNull(completionListener.exception);
             assertTrue(completionListener.exception instanceof ResourceAllocationException);
             assertTrue(completionListener.exception.getMessage().contains(BREAD_CRUMB));
@@ -539,7 +537,7 @@
 
             producer.send(dest, message, completionListener2);
 
-            assertTrue("Did not get completion callback", completionListener2.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(completionListener2.awaitCompletion(5, TimeUnit.SECONDS), "Did not get completion callback");
             assertNull(completionListener2.exception);
             Message receivedMessage2 = completionListener2.message;
             assertNotNull(receivedMessage2);
@@ -556,8 +554,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionListenerSendWhenNoCacheConfigured() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer,
@@ -576,7 +574,7 @@
 
             //Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             // Expect a new message sent by the above producer to cause creation of a new
             // sender link to the given destination, then closing the link after the message is sent.
@@ -601,7 +599,7 @@
 
             producer.send(dest, message, completionListener);
 
-            assertTrue("Did not get completion callback", completionListener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(completionListener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get completion callback");
             assertNull(completionListener.exception);
             Message receivedMessage = completionListener.message;
             assertNotNull(receivedMessage);
@@ -617,7 +615,7 @@
 
             producer.send(dest, message, completionListener2);
 
-            assertTrue("Did not get completion callback", completionListener2.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(completionListener2.awaitCompletion(5, TimeUnit.SECONDS), "Did not get completion callback");
             assertNull(completionListener2.exception);
             Message receivedMessage2 = completionListener2.message;
             assertNotNull(receivedMessage2);
@@ -631,8 +629,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndFallbackProducerCompletesAsyncSends() throws Exception {
         final String BREAD_CRUMB = "ErrorMessage";
 
@@ -682,7 +680,7 @@
             assertEquals(MSG_COUNT, listener.errorCount);
 
             // Verify the producer gets marked closed
-            assertTrue("Producer closed callback didn't trigger", producerClosed.await(5, TimeUnit.SECONDS));
+            assertTrue(producerClosed.await(5, TimeUnit.SECONDS), "Producer closed callback didn't trigger");
             try {
                 producer.getDeliveryMode();
                 fail("Expected ISE to be thrown due to being closed");
@@ -703,8 +701,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseSessionAndAttemptAsyncCompletionSendThrowsAndLeavesMessageReadable() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer,
@@ -748,13 +746,13 @@
 
             Message message1 = session.createTextMessage(content);
             Message message2 = session.createTextMessage(content);
-            assertNull("Should not yet have a JMSDestination", message1.getJMSDestination());
-            assertNull("Should not yet have a JMSDestination", message2.getJMSDestination());
+            assertNull(message1.getJMSDestination(), "Should not yet have a JMSDestination");
+            assertNull(message2.getJMSDestination(), "Should not yet have a JMSDestination");
             producer.send(queue, message1);
 
             testPeer.waitForAllHandlersToComplete(2000);
 
-            assertTrue("Session should have been closed", sessionClosed.await(2, TimeUnit.SECONDS));
+            assertTrue(sessionClosed.await(2, TimeUnit.SECONDS), "Session should have been closed");
 
             TestJmsCompletionListener listener = new TestJmsCompletionListener();
             try {
@@ -764,11 +762,11 @@
                 LOG.trace("Caught expected exception: {}", e.getMessage());
             }
 
-            assertFalse("Should not get async callback", listener.awaitCompletion(5, TimeUnit.MILLISECONDS));
+            assertFalse(listener.awaitCompletion(5, TimeUnit.MILLISECONDS), "Should not get async callback");
 
             // Message should be readable but not carry a destination as it wasn't actually sent anywhere
-            assertNull("Should not have a readable JMSDestination", message2.getJMSDestination());
-            assertEquals("Message body not as expected", content, ((TextMessage) message2).getText());
+            assertNull(message2.getJMSDestination(), "Should not have a readable JMSDestination");
+            assertEquals(content, ((TextMessage) message2).getText(), "Message body not as expected");
 
             testPeer.expectClose();
             connection.close();
@@ -777,8 +775,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFallbackProducerRecoversFromRefusalOfSenderOpenOnNextSend() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -797,7 +795,7 @@
 
             // Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             // Expect a new message sent by the above producer to cause creation of a new
             // sender link to the given destination.
@@ -842,8 +840,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testRepeatedSendToSameAddressWhenCacheSizeOfOneKeepsFallbackProducerInCache() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -864,7 +862,7 @@
 
             // Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             // Expect a new message sent by the above producer to cause creation of a new
             // sender link to the given destination.
@@ -910,8 +908,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendToMultipleDestinationsOpensNewSendersWhenCaching() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -932,7 +930,7 @@
 
             // Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true);
             MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new MessageAnnotationsSectionMatcher(true);
@@ -989,8 +987,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCachedFallbackProducersAreTimedOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1011,7 +1009,7 @@
 
             // Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             // First round of sends should open and cache sender links
             for (int i = 1; i <= CACHE_SIZE; ++i) {
@@ -1055,8 +1053,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCachedFallbackProducerEvictedBySendToUncachedAddress() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1077,7 +1075,7 @@
 
             // Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true);
             MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new MessageAnnotationsSectionMatcher(true);
@@ -1138,8 +1136,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCachedFallbackProducerEvictedBySendToUncachedAddressHandlesDelayedResponse() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1158,7 +1156,7 @@
 
             // Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true);
             MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new MessageAnnotationsSectionMatcher(true);
@@ -1210,8 +1208,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseCachedFallbackProducerFreesSlotInCache() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1232,7 +1230,7 @@
 
             // Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true);
             MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new MessageAnnotationsSectionMatcher(true);
@@ -1311,8 +1309,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailureOfOneCacheProducerCloseOnPropagatedToMainProducerClose() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1333,7 +1331,7 @@
 
             // Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true);
             MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new MessageAnnotationsSectionMatcher(true);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/BytesMessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/BytesMessageIntegrationTest.java
index ff75519..9fabb11 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/BytesMessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/BytesMessageIntegrationTest.java
@@ -19,10 +19,10 @@
 package org.apache.qpid.jms.integration;
 
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayOutputStream;
 import java.io.DataOutputStream;
@@ -59,12 +59,14 @@
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
 import org.apache.qpid.proton.amqp.Symbol;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class BytesMessageIntegrationTest extends QpidJmsTestCase {
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendBasicBytesMessageWithContent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -102,27 +104,32 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBytesMessageUsingDataSectionWithContentTypeOctectStream() throws Exception {
         doReceiveBasicBytesMessageUsingDataSectionTestImpl(AmqpMessageSupport.OCTET_STREAM_CONTENT_TYPE, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBytesMessageUsingDataSectionWithContentTypeOctectStreamNoTypeAnnotation() throws Exception {
         doReceiveBasicBytesMessageUsingDataSectionTestImpl(AmqpMessageSupport.OCTET_STREAM_CONTENT_TYPE, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBasicBytesMessageUsingDataSectionWithContentTypeEmptyNoTypeAnnotation() throws Exception {
         doReceiveBasicBytesMessageUsingDataSectionTestImpl(Symbol.valueOf(""), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBasicBytesMessageUsingDataSectionWithContentTypeUnknownNoTypeAnnotation() throws Exception {
         doReceiveBasicBytesMessageUsingDataSectionTestImpl(Symbol.valueOf("type/unknown"), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBasicBytesMessageUsingDataSectionWithContentTypeNotSetNoTypeAnnotation() throws Exception {
         doReceiveBasicBytesMessageUsingDataSectionTestImpl(null, false);
     }
@@ -182,7 +189,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBytesMessageAndResendAfterResetAndPartialRead() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -241,26 +249,26 @@
             testPeer.waitForAllHandlersToComplete(3000);
 
             // verify the content is as expected
-            assertNotNull("Message was not received", receivedMessage);
-            assertTrue("Message was not a BytesMessage", receivedMessage instanceof BytesMessage);
+            assertNotNull(receivedMessage, "Message was not received");
+            assertTrue(receivedMessage instanceof BytesMessage, "Message was not a BytesMessage");
             BytesMessage receivedBytesMessage = (BytesMessage) receivedMessage;
 
-            assertEquals("Unexpected boolean value", myBool, receivedBytesMessage.readBoolean());
-            assertEquals("Unexpected byte value", myByte, receivedBytesMessage.readByte());
+            assertEquals(myBool, receivedBytesMessage.readBoolean(), "Unexpected boolean value");
+            assertEquals(myByte, receivedBytesMessage.readByte(), "Unexpected byte value");
             byte[] readBytes = new byte[myBytes.length];
-            assertEquals("Did not read the expected number of bytes", myBytes.length, receivedBytesMessage.readBytes(readBytes));
-            assertTrue("Read bytes were not as expected: " + Arrays.toString(readBytes), Arrays.equals(myBytes, readBytes));
-            assertEquals("Unexpected char value", myChar, receivedBytesMessage.readChar());
-            assertEquals("Unexpected double value", myDouble, receivedBytesMessage.readDouble(), 0.0);
-            assertEquals("Unexpected float value", myFloat, receivedBytesMessage.readFloat(), 0.0);
-            assertEquals("Unexpected int value", myInt, receivedBytesMessage.readInt());
-            assertEquals("Unexpected long value", myLong, receivedBytesMessage.readLong());
-            assertEquals("Unexpected short value", myShort, receivedBytesMessage.readShort());
-            assertEquals("Unexpected UTF value", myUTF, receivedBytesMessage.readUTF());
+            assertEquals(myBytes.length, receivedBytesMessage.readBytes(readBytes), "Did not read the expected number of bytes");
+            assertTrue(Arrays.equals(myBytes, readBytes), "Read bytes were not as expected: " + Arrays.toString(readBytes));
+            assertEquals(myChar, receivedBytesMessage.readChar(), "Unexpected char value");
+            assertEquals(myDouble, receivedBytesMessage.readDouble(), 0.0, "Unexpected double value");
+            assertEquals(myFloat, receivedBytesMessage.readFloat(), 0.0, "Unexpected float value");
+            assertEquals(myInt, receivedBytesMessage.readInt(), "Unexpected int value");
+            assertEquals(myLong, receivedBytesMessage.readLong(), "Unexpected long value");
+            assertEquals(myShort, receivedBytesMessage.readShort(), "Unexpected short value");
+            assertEquals(myUTF, receivedBytesMessage.readUTF(), "Unexpected UTF value");
 
             // reset and read the first item, leaving message marker in the middle of its content
             receivedBytesMessage.reset();
-            assertEquals("Unexpected boolean value after reset", myBool, receivedBytesMessage.readBoolean());
+            assertEquals(myBool, receivedBytesMessage.readBoolean(), "Unexpected boolean value after reset");
 
             // Send the received message back to the test peer and have it check the result is as expected
             testPeer.expectSenderAttach();
@@ -286,7 +294,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testGetBodyBytesMessageFailsWhenWrongTypeRequested() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -357,7 +366,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBytesMessageWithAmqpValueAndResendResultsInData() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -412,26 +422,26 @@
             testPeer.waitForAllHandlersToComplete(3000);
 
             // verify the content is as expected
-            assertNotNull("Message was not received", receivedMessage);
-            assertTrue("Message was not a BytesMessage", receivedMessage instanceof BytesMessage);
+            assertNotNull(receivedMessage, "Message was not received");
+            assertTrue(receivedMessage instanceof BytesMessage, "Message was not a BytesMessage");
             BytesMessage receivedBytesMessage = (BytesMessage) receivedMessage;
 
-            assertEquals("Unexpected boolean value", myBool, receivedBytesMessage.readBoolean());
-            assertEquals("Unexpected byte value", myByte, receivedBytesMessage.readByte());
+            assertEquals(myBool, receivedBytesMessage.readBoolean(), "Unexpected boolean value");
+            assertEquals(myByte, receivedBytesMessage.readByte(), "Unexpected byte value");
             byte[] readBytes = new byte[myBytes.length];
-            assertEquals("Did not read the expected number of bytes", myBytes.length, receivedBytesMessage.readBytes(readBytes));
-            assertTrue("Read bytes were not as expected: " + Arrays.toString(readBytes), Arrays.equals(myBytes, readBytes));
-            assertEquals("Unexpected char value", myChar, receivedBytesMessage.readChar());
-            assertEquals("Unexpected double value", myDouble, receivedBytesMessage.readDouble(), 0.0);
-            assertEquals("Unexpected float value", myFloat, receivedBytesMessage.readFloat(), 0.0);
-            assertEquals("Unexpected int value", myInt, receivedBytesMessage.readInt());
-            assertEquals("Unexpected long value", myLong, receivedBytesMessage.readLong());
-            assertEquals("Unexpected short value", myShort, receivedBytesMessage.readShort());
-            assertEquals("Unexpected UTF value", myUTF, receivedBytesMessage.readUTF());
+            assertEquals(myBytes.length, receivedBytesMessage.readBytes(readBytes), "Did not read the expected number of bytes");
+            assertTrue(Arrays.equals(myBytes, readBytes), "Read bytes were not as expected: " + Arrays.toString(readBytes));
+            assertEquals(myChar, receivedBytesMessage.readChar(), "Unexpected char value");
+            assertEquals(myDouble, receivedBytesMessage.readDouble(), 0.0, "Unexpected double value");
+            assertEquals(myFloat, receivedBytesMessage.readFloat(), 0.0, "Unexpected float value");
+            assertEquals(myInt, receivedBytesMessage.readInt(), "Unexpected int value");
+            assertEquals(myLong, receivedBytesMessage.readLong(), "Unexpected long value");
+            assertEquals(myShort, receivedBytesMessage.readShort(), "Unexpected short value");
+            assertEquals(myUTF, receivedBytesMessage.readUTF(), "Unexpected UTF value");
 
             // reset and read the first item, leaving message marker in the middle of its content
             receivedBytesMessage.reset();
-            assertEquals("Unexpected boolean value after reset", myBool, receivedBytesMessage.readBoolean());
+            assertEquals(myBool, receivedBytesMessage.readBoolean(), "Unexpected boolean value after reset");
 
             // Send the received message back to the test peer and have it check the result is as expected
             testPeer.expectSenderAttach();
@@ -458,7 +468,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendDoesNotMarksBytesMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -566,7 +577,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMarksBytesMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionConsumerIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionConsumerIntegrationTest.java
index de4a2fe..acf6b63 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionConsumerIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionConsumerIntegrationTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.integration;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
@@ -47,7 +47,8 @@
 import org.apache.qpid.jms.test.testpeer.basictypes.AmqpError;
 import org.apache.qpid.jms.test.testpeer.describedtypes.sections.AmqpValueDescribedType;
 import org.apache.qpid.proton.amqp.DescribedType;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,7 +61,8 @@
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsServerSessionPool sessionPool = new JmsServerSessionPool();
@@ -83,12 +85,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionConsumerDispatchesToSessionConnectionStartedBeforeCreate() throws Exception {
         doTestConnectionConsumerDispatchesToSession(true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionConsumerDispatchesToSessionConnectionStartedAfterCreate() throws Exception {
         doTestConnectionConsumerDispatchesToSession(false);
     }
@@ -132,7 +136,7 @@
                 connection.start();
             }
 
-            assertTrue("Message didn't arrive in time", messageArrived.await(10, TimeUnit.SECONDS));
+            assertTrue(messageArrived.await(10, TimeUnit.SECONDS), "Message didn't arrive in time");
 
             testPeer.expectDetach(true, true, true);
             consumer.close();
@@ -144,7 +148,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPauseInOnMessageAndConsumerClosed() throws Exception {
         final CountDownLatch messageArrived = new CountDownLatch(1);
 
@@ -189,7 +194,7 @@
 
             connection.start();
 
-            assertTrue("Message didn't arrive in time", messageArrived.await(10, TimeUnit.SECONDS));
+            assertTrue(messageArrived.await(10, TimeUnit.SECONDS), "Message didn't arrive in time");
 
             testPeer.expectDetach(true, true, true);
             consumer.close();
@@ -201,7 +206,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testNonStartedConnectionConsumerDoesNotDispatch() throws Exception {
         final CountDownLatch messageArrived = new CountDownLatch(1);
 
@@ -232,7 +238,7 @@
             Queue queue = new JmsQueue("myQueue");
             ConnectionConsumer consumer = connection.createConnectionConsumer(queue, null, sessionPool, 100);
 
-            assertFalse("Message Arrived unexpectedly", messageArrived.await(500, TimeUnit.MILLISECONDS));
+            assertFalse(messageArrived.await(500, TimeUnit.MILLISECONDS), "Message Arrived unexpectedly");
 
             testPeer.expectDetach(true, true, true);
             testPeer.expectDispositionThatIsReleasedAndSettled();
@@ -245,7 +251,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testQueuedMessagesAreDrainedToServerSession() throws Exception {
         final int MESSAGE_COUNT = 10;
         final CountDownLatch messagesDispatched = new CountDownLatch(MESSAGE_COUNT);
@@ -290,12 +297,12 @@
             Queue queue = new JmsQueue("myQueue");
             ConnectionConsumer consumer = connection.createConnectionConsumer(queue, null, sessionPool, 100);
 
-            assertTrue("Message didn't arrive in time", messagesDispatched.await(10, TimeUnit.SECONDS));
+            assertTrue(messagesDispatched.await(10, TimeUnit.SECONDS), "Message didn't arrive in time");
             assertEquals(MESSAGE_COUNT, messagesArrived.getCount());
 
             connection.start();
 
-            assertTrue("Message didn't arrive in time", messagesArrived.await(10, TimeUnit.SECONDS));
+            assertTrue(messagesArrived.await(10, TimeUnit.SECONDS), "Message didn't arrive in time");
 
             testPeer.expectDetach(true, true, true);
             consumer.close();
@@ -307,7 +314,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConsumerRecoversAfterSessionPoolReturnsNullSession() throws Exception {
         final int MESSAGE_COUNT = 10;
         final CountDownLatch messagesDispatched = new CountDownLatch(MESSAGE_COUNT);
@@ -352,12 +360,12 @@
             Queue queue = new JmsQueue("myQueue");
             ConnectionConsumer consumer = connection.createConnectionConsumer(queue, null, sessionPool, 100);
 
-            assertTrue("Message didn't arrive in time", messagesDispatched.await(10, TimeUnit.SECONDS));
+            assertTrue(messagesDispatched.await(10, TimeUnit.SECONDS), "Message didn't arrive in time");
             assertEquals(MESSAGE_COUNT, messagesArrived.getCount());
 
             connection.start();
 
-            assertTrue("Message didn't arrive in time", messagesArrived.await(10, TimeUnit.SECONDS));
+            assertTrue(messagesArrived.await(10, TimeUnit.SECONDS), "Message didn't arrive in time");
 
             testPeer.expectDetach(true, true, true);
             consumer.close();
@@ -369,7 +377,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseConnectionConsumer() throws Exception {
         final String BREAD_CRUMB = "ErrorMessage";
 
@@ -395,7 +404,7 @@
 
             // Verify the consumer gets marked closed
             testPeer.waitForAllHandlersToComplete(1000);
-            assertTrue("consumer never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -412,9 +421,9 @@
                     }
                     return false;
                 }
-            }, 10000, 10));
+            }, 10000, 10), "consumer never closed.");
 
-            assertTrue("Consumer closed callback didn't trigger", connectionError.await(5, TimeUnit.SECONDS));
+            assertTrue(connectionError.await(5, TimeUnit.SECONDS), "Consumer closed callback didn't trigger");
 
             // Try closing it explicitly, should effectively no-op in client.
             // The test peer will throw during close if it sends anything.
@@ -425,7 +434,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testOnExceptionFiredOnSessionPoolFailure() throws Exception {
         final CountDownLatch exceptionFired = new CountDownLatch(1);
 
@@ -453,7 +463,7 @@
             Queue queue = new JmsQueue("myQueue");
             ConnectionConsumer consumer = connection.createConnectionConsumer(queue, null, sessionPool, 100);
 
-            assertTrue("Exception should have been fired", exceptionFired.await(5, TimeUnit.SECONDS));
+            assertTrue(exceptionFired.await(5, TimeUnit.SECONDS), "Exception should have been fired");
 
             testPeer.expectDetach(true, true, true);
             testPeer.expectDispositionThatIsReleasedAndSettled();
@@ -466,7 +476,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testOnExceptionFiredOnServerSessionFailure() throws Exception {
         final CountDownLatch exceptionFired = new CountDownLatch(1);
 
@@ -494,7 +505,7 @@
             Queue queue = new JmsQueue("myQueue");
             ConnectionConsumer consumer = connection.createConnectionConsumer(queue, null, sessionPool, 100);
 
-            assertTrue("Exception should have been fired", exceptionFired.await(5, TimeUnit.SECONDS));
+            assertTrue(exceptionFired.await(5, TimeUnit.SECONDS), "Exception should have been fired");
 
             testPeer.expectDetach(true, true, true);
             testPeer.expectDispositionThatIsReleasedAndSettled();
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionFactoryIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionFactoryIntegrationTest.java
index 30f0aa9..f8ac737 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionFactoryIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionFactoryIntegrationTest.java
@@ -20,12 +20,12 @@
  */
 package org.apache.qpid.jms.integration;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.URI;
 import java.util.UUID;
@@ -51,7 +51,8 @@
 import org.apache.qpid.jms.policy.JmsRedeliveryPolicy;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.jms.test.testpeer.TestAmqpPeer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,7 +60,8 @@
 
     private static final Logger LOG = LoggerFactory.getLogger(ConnectionFactoryIntegrationTest.class);
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionGoodProviderURI() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Ignore errors from peer close due to not sending any Open / Close frames
@@ -83,7 +85,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionGoodProviderString() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Ignore errors from peer close due to not sending any Open / Close frames
@@ -107,7 +110,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTopicCreateConnectionGoodProviderString() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Ignore errors from peer close due to not sending any Open / Close frames
@@ -131,7 +135,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCreateQueueConnectionGoodProviderString() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Ignore errors from peer close due to not sending any Open / Close frames
@@ -155,7 +160,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testUriOptionsAppliedToConnection() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Ignore errors from peer close due to not sending any Open / Close frames
@@ -185,7 +191,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCreateAmqpConnectionFactoryWithUserInfoThrowsIAE() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // DONT create a test fixture, we will drive everything directly.
@@ -200,11 +207,12 @@
             }
 
             testPeer.close();
-            assertNull("Peer should not have accepted any connection", testPeer.getClientSocket());
+            assertNull(testPeer.getClientSocket(), "Peer should not have accepted any connection");
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCreateFailoverConnectionFactoryWithComponentUriHavingUserInfoThrowsIAE() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // DONT create a test fixture, we will drive everything directly.
@@ -231,7 +239,7 @@
             doCreateFailoverConnectionFactoryWithComponentUriHavingUserInfoThrowsIAETestImpl(failoverURImultiple);
 
             testPeer.close();
-            assertNull("Peer should not have accepted any connection", testPeer.getClientSocket());
+            assertNull(testPeer.getClientSocket(), "Peer should not have accepted any connection");
         }
     }
 
@@ -246,7 +254,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSetInvalidMessageIDFormatOption() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // DONT create a test fixture, we will drive everything directly.
@@ -260,7 +269,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSetMessageIDFormatOptionAlteredCase() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // DONT create a test fixture, we will drive everything directly.
@@ -284,7 +294,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testMessageIDFormatOptionApplied() throws Exception {
         BUILTIN[] formatters = JmsMessageIDBuilder.BUILTIN.values();
 
@@ -316,7 +327,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSetCustomMessageIDBuilder() throws Exception {
         CustomJmsMessageIdBuilder custom = new CustomJmsMessageIdBuilder();
 
@@ -347,7 +359,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSetCustomMessageIDPolicy() throws Exception {
         CustomJmsMessageIDPolicy custom = new CustomJmsMessageIDPolicy();
 
@@ -378,7 +391,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSetCustomPrefetchPolicy() throws Exception {
         CustomJmsPrefetchPolicy custom = new CustomJmsPrefetchPolicy();
 
@@ -409,7 +423,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSetCustomPresettlePolicy() throws Exception {
         CustomJmsPresettlePolicy custom = new CustomJmsPresettlePolicy();
 
@@ -440,7 +455,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSetCustomRedeliveryPolicy() throws Exception {
         CustomJmsRedeliveryPolicy custom = new CustomJmsRedeliveryPolicy();
 
@@ -471,7 +487,8 @@
         }
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testMessageIDPolicyCannotBeNulled() throws Exception {
         CustomJmsMessageIDPolicy custom = new CustomJmsMessageIDPolicy();
 
@@ -485,7 +502,8 @@
         assertTrue(factory.getMessageIDPolicy() instanceof JmsDefaultMessageIDPolicy);
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testPrefetchPolicyCannotBeNulled() throws Exception {
         CustomJmsPrefetchPolicy custom = new CustomJmsPrefetchPolicy();
 
@@ -499,7 +517,8 @@
         assertTrue(factory.getPrefetchPolicy() instanceof JmsDefaultPrefetchPolicy);
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testPresettlePolicyCannotBeNulled() throws Exception {
         CustomJmsPresettlePolicy custom = new CustomJmsPresettlePolicy();
 
@@ -513,7 +532,8 @@
         assertTrue(factory.getPresettlePolicy() instanceof JmsDefaultPresettlePolicy);
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testRedeliveryPolicyCannotBeNulled() throws Exception {
         CustomJmsRedeliveryPolicy custom = new CustomJmsRedeliveryPolicy();
 
@@ -527,17 +547,20 @@
         assertTrue(factory.getRedeliveryPolicy() instanceof JmsDefaultRedeliveryPolicy);
     }
 
-    @Test(timeout = 20_000)
+    @Test
+    @Timeout(20)
     public void testConfigureFutureFactoryFromURITypeOfProgressive() throws Exception {
         doTestCreateConnectionWithConfiguredFutureFactory("progressive");
     }
 
-    @Test(timeout = 20_000)
+    @Test
+    @Timeout(20)
     public void testConfigureFutureFactoryFromURITypeOfBalanced() throws Exception {
         doTestCreateConnectionWithConfiguredFutureFactory("balanced");
     }
 
-    @Test(timeout = 20_000)
+    @Test
+    @Timeout(20)
     public void testConfigureFutureFactoryFromURITypeOfConservative() throws Exception {
         doTestCreateConnectionWithConfiguredFutureFactory("conservative");
     }
@@ -568,7 +591,8 @@
         }
     }
 
-    @Test(timeout = 20_000)
+    @Test
+    @Timeout(20)
     public void testConfigureFutureFactoryFromURITypeUnknown() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Ignore errors from peer close due to not sending any Open / Close frames
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
index bed30a6..cc5573b 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
@@ -31,12 +31,12 @@
 import static org.hamcrest.Matchers.hasEntry;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.net.URI;
@@ -77,23 +77,21 @@
 import org.apache.qpid.jms.test.testpeer.matchers.CoordinatorMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.sections.TransferPayloadCompositeMatcher;
 import org.apache.qpid.jms.util.MetaDataSupport;
-import org.apache.qpid.jms.util.QpidJMSTestRunner;
-import org.apache.qpid.jms.util.Repeat;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 import org.apache.qpid.proton.amqp.transaction.TxnCapability;
 import org.apache.qpid.proton.engine.impl.AmqpHeader;
 import org.hamcrest.Matcher;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
-@RunWith(QpidJMSTestRunner.class)
 public class ConnectionIntegrationTest extends QpidJmsTestCase {
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAndCloseConnection() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -102,12 +100,14 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateConnectionToNonSaslPeer() throws Exception {
         doConnectionWithUnexpectedHeaderTestImpl(AmqpHeader.HEADER);
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateConnectionToNonAmqpPeer() throws Exception {
         byte[] responseHeader = new byte[] { 'N', 'O', 'T', '-', 'A', 'M', 'Q', 'P' };
         doConnectionWithUnexpectedHeaderTestImpl(responseHeader);
@@ -128,7 +128,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConnectionTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -137,14 +138,15 @@
             testPeer.expectClose(false);
 
             connection.start();
-            assertNotNull("Connection should not be null", connection);
+            assertNotNull(connection, "Connection should not be null");
             connection.close();
 
             testPeer.waitForAllHandlersToComplete(1000);
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConnectionCompletesWhenConnectionDropsBeforeResponse() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -153,14 +155,15 @@
             testPeer.dropAfterLastHandler();
 
             connection.start();
-            assertNotNull("Connection should not be null", connection);
+            assertNotNull(connection, "Connection should not be null");
             connection.close();
 
             testPeer.waitForAllHandlersToComplete(1000);
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionWithClientId() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer, false, null, null, null, true);
@@ -169,43 +172,47 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAutoAckSession() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
             testPeer.expectBegin();
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-            assertNotNull("Session should not be null", session);
+            assertNotNull(session, "Session should not be null");
             testPeer.expectClose();
             connection.close();
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAutoAckSessionByDefault() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
             testPeer.expectBegin();
             Session session = connection.createSession();
-            assertNotNull("Session should not be null", session);
+            assertNotNull(session, "Session should not be null");
             testPeer.expectClose();
             connection.close();
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAutoAckSessionUsingAckModeOnlyMethod() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
             testPeer.expectBegin();
             Session session = connection.createSession(Session.AUTO_ACKNOWLEDGE);
-            assertNotNull("Session should not be null", session);
+            assertNotNull(session, "Session should not be null");
             testPeer.expectClose();
             connection.close();
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTransactedSession() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -225,13 +232,14 @@
             testPeer.expectClose();
 
             Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-            assertNotNull("Session should not be null", session);
+            assertNotNull(session, "Session should not be null");
 
             connection.close();
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTransactedSessionUsingAckModeOnlyMethod() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -251,13 +259,14 @@
             testPeer.expectClose();
 
             Session session = connection.createSession(Session.SESSION_TRANSACTED);
-            assertNotNull("Session should not be null", session);
+            assertNotNull(session, "Session should not be null");
 
             connection.close();
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTransactedSessionFailsWhenNoDetachResponseSent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -287,7 +296,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseConnectionDuringSessionCreation() throws Exception {
         final String BREAD_CRUMB = "ErrorMessageBreadCrumb";
 
@@ -303,8 +313,8 @@
                 fail("Expected exception to be thrown");
             } catch (JMSException jmse) {
                 // Expected
-                assertNotNull("Expected exception to have a message", jmse.getMessage());
-                assertTrue("Expected breadcrumb to be present in message", jmse.getMessage().contains(BREAD_CRUMB));
+                assertNotNull(jmse.getMessage(), "Expected exception to have a message");
+                assertTrue(jmse.getMessage().contains(BREAD_CRUMB), "Expected breadcrumb to be present in message");
             }
 
             testPeer.waitForAllHandlersToComplete(3000);
@@ -313,7 +323,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyDropConnectionDuringSessionCreation() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -335,8 +346,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyDropConnectionDuringSessionCreationTransacted() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             testPeer.expectSaslAnonymous();
@@ -360,7 +371,7 @@
                 // Expected
             }
 
-            assertTrue("Exception listener did not fire", exceptionListenerFired.await(5, TimeUnit.SECONDS));
+            assertTrue(exceptionListenerFired.await(5, TimeUnit.SECONDS), "Exception listener did not fire");
 
             testPeer.waitForAllHandlersToComplete(3000);
 
@@ -368,7 +379,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionPropertiesContainExpectedMetaData() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -391,13 +403,15 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testMaxFrameSizeOptionCommunicatedInOpen() throws Exception {
         int frameSize = 39215;
         doMaxFrameSizeOptionTestImpl(frameSize, UnsignedInteger.valueOf(frameSize));
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testMaxFrameSizeOptionCommunicatedInOpenDefault() throws Exception {
         doMaxFrameSizeOptionTestImpl(-1, UnsignedInteger.MAX_VALUE);
     }
@@ -421,7 +435,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testMaxFrameSizeInfluencesOutgoingFrameSize() throws Exception {
         doMaxFrameSizeInfluencesOutgoingFrameSizeTestImpl(1000, 10001, 11);
         doMaxFrameSizeInfluencesOutgoingFrameSizeTestImpl(1500, 6001, 5);
@@ -476,18 +491,21 @@
         return payload;
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAmqpHostnameSetByDefault() throws Exception {
         doAmqpHostnameTestImpl("localhost", false, equalTo("localhost"));
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAmqpHostnameSetByVhostOption() throws Exception {
         String vhost = "myAmqpHost";
         doAmqpHostnameTestImpl(vhost, true, equalTo(vhost));
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAmqpHostnameNotSetWithEmptyVhostOption() throws Exception {
         doAmqpHostnameTestImpl("", true, nullValue());
     }
@@ -517,7 +535,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndConnectionListenerInvoked() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final CountDownLatch done = new CountDownLatch(1);
@@ -540,7 +559,7 @@
             // Trigger the underlying AMQP connection
             connection.start();
 
-            assertTrue("Connection should report failure", done.await(5, TimeUnit.SECONDS));
+            assertTrue(done.await(5, TimeUnit.SECONDS), "Connection should report failure");
 
             testPeer.waitForAllHandlersToComplete(1000);
 
@@ -548,7 +567,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndConnectionWithRedirect() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final CountDownLatch done = new CountDownLatch(1);
@@ -582,7 +602,7 @@
             // Trigger the underlying AMQP connection
             connection.start();
 
-            assertTrue("Connection should report failure", done.await(5, TimeUnit.SECONDS));
+            assertTrue(done.await(5, TimeUnit.SECONDS), "Connection should report failure");
 
             assertTrue(asyncError.get() instanceof JMSException);
             assertTrue(asyncError.get().getCause() instanceof ProviderConnectionRedirectedException);
@@ -591,7 +611,7 @@
             URI redirectionURI = redirect.getRedirectionURI();
 
             assertNotNull(redirectionURI);
-            assertTrue(redirectVhost, redirectionURI.getQuery().contains("amqp.vhost=" + redirectVhost));
+            assertTrue(redirectionURI.getQuery().contains("amqp.vhost=" + redirectVhost), "Unexpected query, got: " + redirectionURI.getQuery());
             assertEquals(redirectNetworkHost, redirectionURI.getHost());
             assertEquals(redirectPort, redirectionURI.getPort());
 
@@ -601,7 +621,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndConnectionWithSessionWithConsumer() throws Exception {
         final String BREAD_CRUMB = "ErrorMessage";
 
@@ -620,12 +641,12 @@
             MessageConsumer consumer = session.createConsumer(queue);
 
             testPeer.waitForAllHandlersToComplete(1000);
-            assertTrue("connection never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     return !((JmsConnection) connection).isConnected();
                 }
-            }, 10000, 10));
+            }, 10000, 10), "connection never closed.");
 
             try {
                 connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
@@ -664,8 +685,9 @@
         }
     }
 
-    @Test(timeout = 20000)
-    public void  testRemotelyEndConnectionWithSessionWithProducerWithSendWaitingOnCredit() throws Exception {
+    @Test
+    @Timeout(20)
+    public void testRemotelyEndConnectionWithSessionWithProducerWithSendWaitingOnCredit() throws Exception {
         final String BREAD_CRUMB = "ErrorMessageBreadCrumb";
 
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
@@ -690,8 +712,8 @@
                 fail("Expected exception to be thrown");
             } catch (ResourceAllocationException jmse) {
                 // Expected
-                assertNotNull("Expected exception to have a message", jmse.getMessage());
-                assertTrue("Expected breadcrumb to be present in message", jmse.getMessage().contains(BREAD_CRUMB));
+                assertNotNull(jmse.getMessage(), "Expected exception to have a message");
+                assertTrue(jmse.getMessage().contains(BREAD_CRUMB), "Expected breadcrumb to be present in message");
             } catch (Throwable t) {
                 fail("Caught unexpected exception: " + t);
             }
@@ -702,8 +724,9 @@
         }
     }
 
-    @Test(timeout = 20000)
-    public void  testRemotelyEndConnectionWithSessionWithProducerWithSendWaitingOnOutcome() throws Exception {
+    @Test
+    @Timeout(20)
+    public void testRemotelyEndConnectionWithSessionWithProducerWithSendWaitingOnOutcome() throws Exception {
         final String BREAD_CRUMB = "ErrorMessageBreadCrumb";
 
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
@@ -728,8 +751,8 @@
                 fail("Expected exception to be thrown");
             } catch (JmsConnectionRemotelyClosedException jmse) {
                 // Expected
-                assertNotNull("Expected exception to have a message", jmse.getMessage());
-                assertTrue("Expected breadcrumb to be present in message", jmse.getMessage().contains(BREAD_CRUMB));
+                assertNotNull(jmse.getMessage(), "Expected exception to have a message");
+                assertTrue(jmse.getMessage().contains(BREAD_CRUMB), "Expected breadcrumb to be present in message");
             } catch (Throwable t) {
                 fail("Caught unexpected exception: " + t);
             }
@@ -740,7 +763,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionWithServerSendingPreemptiveData() throws Exception {
         boolean sendServerSaslHeaderPreEmptively = true;
         try (TestAmqpPeer testPeer = new TestAmqpPeer(null, false, sendServerSaslHeaderPreEmptively);) {
@@ -758,7 +782,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDontAwaitClientIDBeforeOpen() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -783,12 +808,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testWaitForClientIDDoesNotOpenUntilPromptedWithSetClientID() throws Exception {
         doTestWaitForClientIDDoesNotOpenUntilPrompted(true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testWaitForClientIDDoesNotOpenUntilPromptedWithStart() throws Exception {
         doTestWaitForClientIDDoesNotOpenUntilPrompted(false);
     }
@@ -821,7 +848,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUseDaemonThreadURIOption() throws Exception {
         doUseDaemonThreadTestImpl(null);
         doUseDaemonThreadTestImpl(false);
@@ -858,7 +886,7 @@
 
             connection.start();
 
-            assertTrue("Connection established callback didn't trigger", connectionEstablished.await(5, TimeUnit.SECONDS));
+            assertTrue(connectionEstablished.await(5, TimeUnit.SECONDS), "Connection established callback didn't trigger");
 
             testPeer.expectClose();
             connection.close();
@@ -875,7 +903,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionWithPreemptiveServerOpen() throws Exception {
 
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
@@ -909,7 +938,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionPropertiesExtensionAddedValues() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final String property1 = "property1";
@@ -953,7 +983,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionPropertiesExtensionAddedValuesOfNonString() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final String property1 = "property1";
@@ -992,7 +1023,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionPropertiesExtensionProtectsClientProperties() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1028,7 +1060,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionFailsWhenUserSuppliesIllegalProperties() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1061,8 +1094,9 @@
         }
     }
 
-    @Ignore("Disabled due to requirement of hard coded port")
-    @Test(timeout = 20000)
+    @Disabled("Disabled due to requirement of hard coded port")
+    @Test
+    @Timeout(20)
     public void testLocalPortOption() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             testPeer.expectSaslAnonymous();
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConsumerIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConsumerIntegrationTest.java
index 210a7a0..9f91191 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConsumerIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConsumerIntegrationTest.java
@@ -20,12 +20,12 @@
 
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
@@ -71,8 +71,6 @@
 import org.apache.qpid.jms.test.testpeer.matchers.sections.MessageAnnotationsSectionMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.sections.MessageHeaderSectionMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.sections.TransferPayloadCompositeMatcher;
-import org.apache.qpid.jms.util.QpidJMSTestRunner;
-import org.apache.qpid.jms.util.Repeat;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
 import org.apache.qpid.proton.amqp.Symbol;
@@ -80,12 +78,11 @@
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 import org.hamcrest.Matcher;
 import org.hamcrest.Matchers;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@RunWith(QpidJMSTestRunner.class)
 public class ConsumerIntegrationTest extends QpidJmsTestCase {
 
     private static final Logger LOG = LoggerFactory.getLogger(ConsumerIntegrationTest.class);
@@ -94,7 +91,8 @@
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -116,7 +114,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConsumerTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -145,7 +144,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseConsumer() throws Exception {
         final String BREAD_CRUMB = "ErrorMessage";
 
@@ -180,7 +180,7 @@
 
             // Verify the consumer gets marked closed
             testPeer.waitForAllHandlersToComplete(1000);
-            assertTrue("consumer never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -196,10 +196,10 @@
                     }
                     return false;
                 }
-            }, 10000, 10));
+            }, 10000, 10), "consumer never closed.");
 
-            assertTrue("Consumer closed callback didn't trigger", consumerClosed.await(2000, TimeUnit.MILLISECONDS));
-            assertFalse("JMS Exception listener shouldn't fire with no MessageListener", exceptionFired.await(20, TimeUnit.MILLISECONDS));
+            assertTrue(consumerClosed.await(2000, TimeUnit.MILLISECONDS), "Consumer closed callback didn't trigger");
+            assertFalse(exceptionFired.await(20, TimeUnit.MILLISECONDS), "JMS Exception listener shouldn't fire with no MessageListener");
 
             // Try closing it explicitly, should effectively no-op in client.
             // The test peer will throw during close if it sends anything.
@@ -207,7 +207,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseConsumerWithMessageListenerFiresJMSExceptionListener() throws Exception {
         final String BREAD_CRUMB = "ErrorMessage";
 
@@ -252,7 +253,7 @@
 
             // Verify the consumer gets marked closed
             testPeer.waitForAllHandlersToComplete(1000);
-            assertTrue("consumer never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -268,10 +269,10 @@
                     }
                     return false;
                 }
-            }, 10000, 10));
+            }, 10000, 10), "consumer never closed.");
 
-            assertTrue("Consumer closed callback didn't trigger",  consumerClosed.await(2000, TimeUnit.MILLISECONDS));
-            assertTrue("JMS Exception listener should have fired with a MessageListener", exceptionFired.await(2000, TimeUnit.MILLISECONDS));
+            assertTrue(consumerClosed.await(2000, TimeUnit.MILLISECONDS),  "Consumer closed callback didn't trigger");
+            assertTrue(exceptionFired.await(2000, TimeUnit.MILLISECONDS), "JMS Exception listener should have fired with a MessageListener");
 
             // Try closing it explicitly, should effectively no-op in client.
             // The test peer will throw during close if it sends anything.
@@ -285,7 +286,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveMessageWithReceiveZeroTimeout() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -305,7 +307,7 @@
             MessageConsumer messageConsumer = session.createConsumer(queue);
             Message receivedMessage = messageConsumer.receive(0);
 
-            assertNotNull("A message should have been recieved", receivedMessage);
+            assertNotNull(receivedMessage, "A message should have been recieved");
 
             testPeer.expectClose();
             connection.close();
@@ -319,7 +321,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRuntimeExceptionInOnMessageReleasesInAutoAckMode() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -359,7 +362,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRuntimeExceptionInOnMessageReleasesInDupsOkAckMode() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -394,7 +398,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseDurableTopicSubscriberDetachesWithCloseFalse() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -422,7 +427,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCloseDurableSubscriberWithUnconsumedPrefetchedMessages() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -480,12 +486,14 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConsumerReceiveThrowsIfConnectionLost() throws Exception {
         doConsumerReceiveThrowsIfConnectionLostTestImpl(false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConsumerTimedReceiveThrowsIfConnectionLost() throws Exception {
         doConsumerReceiveThrowsIfConnectionLostTestImpl(true);
     }
@@ -535,7 +543,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConsumerReceiveNoWaitThrowsIfConnectionLost() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -563,7 +572,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSetMessageListenerAfterStartAndSend() throws Exception {
 
         final int messageCount = 4;
@@ -596,7 +606,7 @@
             });
 
             boolean await = latch.await(3000, TimeUnit.MILLISECONDS);
-            assertTrue("Messages not received within given timeout. Count remaining: " + latch.getCount(), await);
+            assertTrue(await, "Messages not received within given timeout. Count remaining: " + latch.getCount());
 
             testPeer.waitForAllHandlersToComplete(2000);
 
@@ -610,7 +620,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testNoReceivedMessagesWhenConnectionNotStarted() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final CountDownLatch incoming = new CountDownLatch(1);
@@ -647,7 +658,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testNoReceivedNoWaitMessagesWhenConnectionNotStarted() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final CountDownLatch incoming = new CountDownLatch(1);
@@ -684,7 +696,8 @@
         }
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testSyncReceiveFailsWhenListenerSet() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -732,7 +745,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerInOnMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -787,22 +801,26 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testReceiveWithTimoutDrainsOnNoMessage() throws IOException, Exception {
         doDrainOnNoMessageTestImpl(false, true);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testReceiveWithTimoutDoesntDrainOnNoMessageWithLocalOnlyOption() throws IOException, Exception {
         doDrainOnNoMessageTestImpl(true, true);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testReceiveNoWaitDrainsOnNoMessage() throws IOException, Exception {
         doDrainOnNoMessageTestImpl(false, false);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testReceiveNoWaitDoesntDrainOnNoMessageWithLocalOnlyOption() throws IOException, Exception {
         doDrainOnNoMessageTestImpl(true, false);
     }
@@ -859,22 +877,26 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testReceiveWithTimoutAndNoDrainResponseFailsAfterTimeout() throws IOException, Exception {
         doDrainWithNoResponseOnNoMessageTestImpl(false, false);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testReceiveNoWaitAndNoDrainResponseFailsAfterTimeout() throws IOException, Exception {
         doDrainWithNoResponseOnNoMessageTestImpl(true, false);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testDurableReceiveWithTimoutAndNoDrainResponseFailsAfterTimeout() throws IOException, Exception {
         doDrainWithNoResponseOnNoMessageTestImpl(false, true);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testDurableReceiveNoWaitAndNoDrainResponseFailsAfterTimeout() throws IOException, Exception {
         doDrainWithNoResponseOnNoMessageTestImpl(true, true);
     }
@@ -929,7 +951,7 @@
                 LOG.info("Receive failed after drain timeout as expected: {}", ex.getMessage());
             }
 
-            assertTrue("Consumer should close", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
 
                 @Override
                 public boolean isSatisfied() throws Exception {
@@ -940,7 +962,7 @@
                         return true;
                     }
                 }
-            }));
+            }), "Consumer should close");
 
             testPeer.expectClose();
             connection.close();
@@ -963,7 +985,8 @@
      * - Check when the consumer tops the credit back up to the initial value that the
      *   value of link-credit on the wire is actually as expected.
      */
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreditReplenishmentWhenSenderAdvancesDeliveryCountUnexpectedly() throws Exception {
         int prefetch = 4;
         int topUp = 2;
@@ -990,9 +1013,9 @@
             // delivery count advancement without trying to drain first.
             MessageConsumer consumer = session.createConsumer(queue);
             Message msg = consumer.receive(10000);
-            assertNotNull("Should have received message 1", msg);
+            assertNotNull(msg, "Should have received message 1");
             msg = consumer.receive(1);
-            assertNotNull("Should have received message 2", msg);
+            assertNotNull(msg, "Should have received message 2");
 
             // Then close the consumer
             testPeer.expectDetach(true, true, true);
@@ -1006,7 +1029,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerCallsConnectionCloseThrowsIllegalStateException() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
         final AtomicReference<Exception> asyncError = new AtomicReference<Exception>(null);
@@ -1043,7 +1067,7 @@
             });
 
             boolean await = latch.await(3000, TimeUnit.MILLISECONDS);
-            assertTrue("Messages not received within given timeout. Count remaining: " + latch.getCount(), await);
+            assertTrue(await, "Messages not received within given timeout. Count remaining: " + latch.getCount());
 
             assertNotNull(asyncError.get());
             assertTrue(asyncError.get() instanceof IllegalStateException);
@@ -1060,7 +1084,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerCallsConnectionStopThrowsIllegalStateException() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
         final AtomicReference<Exception> asyncError = new AtomicReference<Exception>(null);
@@ -1097,9 +1122,9 @@
             });
 
             boolean await = latch.await(3, TimeUnit.MINUTES);
-            assertTrue("Messages not received within given timeout. Count remaining: " + latch.getCount(), await);
+            assertTrue(await, "Messages not received within given timeout. Count remaining: " + latch.getCount());
 
-            assertNotNull("Expected IllegalStateException", asyncError.get());
+            assertNotNull(asyncError.get(), "Expected IllegalStateException");
             assertTrue(asyncError.get() instanceof IllegalStateException);
 
             testPeer.waitForAllHandlersToComplete(2000);
@@ -1114,7 +1139,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerCallsSessionCloseThrowsIllegalStateException() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
         final AtomicReference<Exception> asyncError = new AtomicReference<Exception>(null);
@@ -1151,17 +1177,17 @@
             });
 
             boolean await = latch.await(3000, TimeUnit.MILLISECONDS);
-            assertTrue("Messages not received within given timeout. Count remaining: " + latch.getCount(), await);
+            assertTrue(await, "Messages not received within given timeout. Count remaining: " + latch.getCount());
 
             Exception ex = asyncError.get();
 
-            assertNotNull("Expected an exception", ex);
+            assertNotNull(ex, "Expected an exception");
 
             boolean expectedType = ex instanceof IllegalStateException;
             if(!expectedType) {
                 LOG.error("Unexpected exception type", ex);
             }
-            assertTrue("Got unexpected exception type: " + ex, expectedType);
+            assertTrue(expectedType, "Got unexpected exception type: " + ex);
 
             testPeer.waitForAllHandlersToComplete(2000);
 
@@ -1175,53 +1201,62 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerClosesItsConsumer() throws Exception {
         doMessageListenerClosesItsConsumerTestImpl(false, false, Session.AUTO_ACKNOWLEDGE);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerClosesItsConsumerAfterRecoverAutoAck() throws Exception {
         doMessageListenerClosesItsConsumerTestImpl(true, false, Session.AUTO_ACKNOWLEDGE);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerClosesItsConsumerAfterRecoverClientAck() throws Exception {
         doMessageListenerClosesItsConsumerTestImpl(true, false, Session.CLIENT_ACKNOWLEDGE);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerClosesItsConsumerAfterRecoverDupsOk() throws Exception {
         doMessageListenerClosesItsConsumerTestImpl(true, false, Session.DUPS_OK_ACKNOWLEDGE);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerClosesItsConsumerAfterRecoverIndividualAck() throws Exception {
         doMessageListenerClosesItsConsumerTestImpl(true, false, INDIVIDUAL_ACKNOWLEDGE);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerClosesItsConsumerBeforeRecoverAutoAck() throws Exception {
         doMessageListenerClosesItsConsumerTestImpl(false, true, Session.AUTO_ACKNOWLEDGE);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerClosesItsConsumerBeforeRecoverClientAck() throws Exception {
         doMessageListenerClosesItsConsumerTestImpl(false, true, Session.CLIENT_ACKNOWLEDGE);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerClosesItsConsumerBeforeRecoverDupsOk() throws Exception {
         doMessageListenerClosesItsConsumerTestImpl(false, true, Session.DUPS_OK_ACKNOWLEDGE);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testMessageListenerClosesItsConsumerBeforeRecoverIndividualAck() throws Exception {
         doMessageListenerClosesItsConsumerTestImpl(false, true, INDIVIDUAL_ACKNOWLEDGE);
     }
 
     private void doMessageListenerClosesItsConsumerTestImpl(boolean recoverAfterClose, boolean recoverBeforeClose, int ackMode) throws Exception {
-        assertFalse("Cant recover a transacted session", ackMode == Session.SESSION_TRANSACTED);
+        assertFalse(ackMode == Session.SESSION_TRANSACTED, "Cant recover a transacted session");
 
         final CountDownLatch latch = new CountDownLatch(1);
         final CountDownLatch exceptionListenerFired = new CountDownLatch(1);
@@ -1284,21 +1319,21 @@
                 }
             });
 
-            assertTrue("Process not completed within given timeout", latch.await(3000, TimeUnit.MILLISECONDS));
-            assertNull("No error expected during close", error.get());
+            assertTrue(latch.await(3000, TimeUnit.MILLISECONDS), "Process not completed within given timeout");
+            assertNull(error.get(), "No error expected during close");
 
             testPeer.waitForAllHandlersToComplete(2000);
 
             testPeer.expectClose();
             connection.close();
 
-            assertFalse("JMS Exception listener shouldn't have fired", exceptionListenerFired.await(20, TimeUnit.MILLISECONDS));
+            assertFalse(exceptionListenerFired.await(20, TimeUnit.MILLISECONDS), "JMS Exception listener shouldn't have fired");
             testPeer.waitForAllHandlersToComplete(2000);
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRecoverOrderingWithAsyncConsumer() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
         final AtomicReference<Throwable> asyncError = new AtomicReference<Throwable>(null);
@@ -1339,7 +1374,7 @@
                     try {
                         int actualIndex = message.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER);
                         LOG.debug("Got message {}", actualIndex);
-                        assertEquals("Received Message Out Of Order", expectedIndex, actualIndex);
+                        assertEquals(expectedIndex, actualIndex, "Received Message Out Of Order");
 
                         // don't ack the message until we receive it X times
                         if (messageSeen < recoverCount) {
@@ -1372,10 +1407,10 @@
             });
 
             boolean await = latch.await(15, TimeUnit.SECONDS);
-            assertTrue("Messages not received within given timeout." + latch.getCount(), await);
+            assertTrue(await, "Messages not received within given timeout." + latch.getCount());
 
             Throwable ex = asyncError.get();
-            assertNull("Unexpected exception", ex);
+            assertNull(ex, "Unexpected exception");
 
             testPeer.waitForAllHandlersToComplete(2000);
 
@@ -1386,7 +1421,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConsumerCloseWaitsForAsyncDeliveryToComplete() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
 
@@ -1421,7 +1457,7 @@
             });
 
             boolean await = latch.await(3000, TimeUnit.MILLISECONDS);
-            assertTrue("Messages not received within given timeout. Count remaining: " + latch.getCount(), await);
+            assertTrue(await, "Messages not received within given timeout. Count remaining: " + latch.getCount());
 
             testPeer.expectDetach(true, true, true);
             consumer.close();
@@ -1435,7 +1471,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSessionCloseWaitsForAsyncDeliveryToComplete() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
 
@@ -1470,7 +1507,7 @@
             });
 
             boolean await = latch.await(3000, TimeUnit.MILLISECONDS);
-            assertTrue("Messages not received within given timeout. Count remaining: " + latch.getCount(), await);
+            assertTrue(await, "Messages not received within given timeout. Count remaining: " + latch.getCount());
 
             testPeer.expectEnd();
             session.close();
@@ -1484,7 +1521,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConnectionCloseWaitsForAsyncDeliveryToComplete() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
 
@@ -1519,7 +1557,7 @@
             });
 
             boolean await = latch.await(3000, TimeUnit.MILLISECONDS);
-            assertTrue("Messages not received within given timeout. Count remaining: " + latch.getCount(), await);
+            assertTrue(await, "Messages not received within given timeout. Count remaining: " + latch.getCount());
 
             testPeer.expectClose();
             connection.close();
@@ -1528,7 +1566,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCloseClientAckAsyncConsumerCanStillAckMessages() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int DEFAULT_PREFETCH = 100;
@@ -1560,7 +1599,7 @@
                 }
             });
 
-            assertTrue("Did not consume all messages", consumedLatch.await(10, TimeUnit.SECONDS));
+            assertTrue(consumedLatch.await(10, TimeUnit.SECONDS), "Did not consume all messages");
 
             // Expect the client to then drain off all credit from the link.
             testPeer.expectLinkFlow(true, true, equalTo(UnsignedInteger.valueOf(DEFAULT_PREFETCH - messageCount)));
@@ -1588,7 +1627,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCloseClientAckSyncConsumerCanStillAckMessages() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int DEFAULT_PREFETCH = 100;
@@ -1627,7 +1667,7 @@
             }
 
             // Ensure all the messages arrived so that the matching below is deterministic
-            assertTrue("Expected transfers didnt occur: " + expected.getCount(), expected.await(5, TimeUnit.SECONDS));
+            assertTrue(expected.await(5, TimeUnit.SECONDS), "Expected transfers didnt occur: " + expected.getCount());
 
             // Expect the client to then drain off all credit from the link.
             testPeer.expectLinkFlow(true, true, equalTo(UnsignedInteger.valueOf(DEFAULT_PREFETCH - messageCount)));
@@ -1660,7 +1700,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCloseConsumersWithDeferredAckHandledLaterWhenlastConsumedMessageIsAcked() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int DEFAULT_PREFETCH = 10;
@@ -1699,7 +1740,7 @@
             Message receivedMessage2 = null;
 
             // Ensure all the messages arrived so that the matching below is deterministic
-            assertTrue("Expected transfers didnt occur: " + expected.getCount(), expected.await(5, TimeUnit.SECONDS));
+            assertTrue(expected.await(5, TimeUnit.SECONDS), "Expected transfers didnt occur: " + expected.getCount());
 
             // Take our two messages from the queue leaving them in a delivered state.
             receivedMessage1 = consumer1.receive(3000);
@@ -1738,7 +1779,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConsumerWithDeferredCloseAcksAsClosed() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int DEFAULT_PREFETCH = 100;
@@ -1778,7 +1820,7 @@
             }
 
             // Ensure all the messages arrived so that the matching below is deterministic
-            assertTrue("Expected transfers didnt occur: " + expected.getCount(), expected.await(5, TimeUnit.SECONDS));
+            assertTrue(expected.await(5, TimeUnit.SECONDS), "Expected transfers didnt occur: " + expected.getCount());
 
             // Expect the client to then drain off all credit from the link.
             testPeer.expectLinkFlow(true, true, equalTo(UnsignedInteger.valueOf(DEFAULT_PREFETCH - messageCount)));
@@ -1826,7 +1868,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConsumerWithDeferredCloseAcksDeliveryFailedAsSessionClosed() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int DEFAULT_PREFETCH = 100;
@@ -1866,7 +1909,7 @@
             }
 
             // Ensure all the messages arrived so that the matching below is deterministic
-            assertTrue("Expected transfers didnt occur: " + expected.getCount(), expected.await(5, TimeUnit.SECONDS));
+            assertTrue(expected.await(5, TimeUnit.SECONDS), "Expected transfers didnt occur: " + expected.getCount());
 
             // Expect the client to then drain off all credit from the link.
             testPeer.expectLinkFlow(true, true, equalTo(UnsignedInteger.valueOf(DEFAULT_PREFETCH - messageCount)));
@@ -1909,7 +1952,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testDeferredCloseTimeoutAlertsExceptionListener() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final CountDownLatch errorLatch = new CountDownLatch(1);
@@ -1959,7 +2003,7 @@
             // Ack the read message, which should accept all previous messages as well.
             receivedMessage.acknowledge();
 
-            assertTrue("Did not get timed out error", errorLatch.await(10, TimeUnit.SECONDS));
+            assertTrue(errorLatch.await(10, TimeUnit.SECONDS), "Did not get timed out error");
 
             testPeer.expectClose();
             connection.close();
@@ -1968,7 +2012,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSessionCloseDoesNotDeferConsumerClose() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -2008,52 +2053,62 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRedeliveryPolicyOutcomeAppliedAccepted() throws Exception {
         doTestRedeliveryPolicyOutcomeApplied(1, false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRedeliveryPolicyOutcomeAppliedRejected() throws Exception {
         doTestRedeliveryPolicyOutcomeApplied(2, false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRedeliveryPolicyOutcomeAppliedReleased() throws Exception {
         doTestRedeliveryPolicyOutcomeApplied(3, false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRedeliveryPolicyOutcomeAppliedModifiedFailed() throws Exception {
         doTestRedeliveryPolicyOutcomeApplied(4, false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRedeliveryPolicyOutcomeAppliedModifiedFailedUndeliverable() throws Exception {
         doTestRedeliveryPolicyOutcomeApplied(5, false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRedeliveryPolicyOutcomeAppliedAcceptedString() throws Exception {
         doTestRedeliveryPolicyOutcomeApplied(1, true);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRedeliveryPolicyOutcomeAppliedRejectedString() throws Exception {
         doTestRedeliveryPolicyOutcomeApplied(2, true);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRedeliveryPolicyOutcomeAppliedReleasedString() throws Exception {
         doTestRedeliveryPolicyOutcomeApplied(3, true);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRedeliveryPolicyOutcomeAppliedModifiedFailedString() throws Exception {
         doTestRedeliveryPolicyOutcomeApplied(4, true);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRedeliveryPolicyOutcomeAppliedModifiedFailedUndeliverableString() throws Exception {
         doTestRedeliveryPolicyOutcomeApplied(5, true);
     }
@@ -2151,9 +2206,9 @@
             final MessageConsumer consumer = session.createConsumer(queue);
 
             Message m = consumer.receive(6000);
-            assertNotNull("Should have reiceved the final message", m);
-            assertTrue("Should have received the final message", m instanceof TextMessage);
-            assertEquals("Unexpected content", expectedContent, ((TextMessage)m).getText());
+            assertNotNull(m, "Should have reiceved the final message");
+            assertTrue(m instanceof TextMessage, "Should have received the final message");
+            assertEquals(expectedContent, ((TextMessage)m).getText(), "Unexpected content");
 
             testPeer.expectClose();
             connection.close();
@@ -2162,7 +2217,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testLinkCreditReplenishmentWithPrefetchFilled() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int prefetch = 10;
@@ -2195,7 +2251,7 @@
             MessageConsumer consumer = session.createConsumer(queue);
 
             // Ensure all the messages arrived so that the matching below is deterministic
-            assertTrue("Expected transfers didnt occur: " + expected.getCount(), expected.await(5, TimeUnit.SECONDS));
+            assertTrue(expected.await(5, TimeUnit.SECONDS), "Expected transfers didnt occur: " + expected.getCount());
 
             // Now consume the first 2 messages, expect the ack processing NOT to provoke flowing more credit, as over
             // 70% of the max potential prefetch (8 outstanding local messages) remains in play.
@@ -2203,7 +2259,7 @@
             for (consumed = 1; consumed <= 2; consumed ++) {
                 testPeer.expectDisposition(true, new AcceptedMatcher(), consumed, consumed);
                 Message message = consumer.receiveNoWait();
-                assertNotNull("Should have received a message " + consumed, message);
+                assertNotNull(message, "Should have received a message " + consumed);
             }
 
             // Now consume 3rd message, expect the ack processing to provoke flowing more credit as it hits the
@@ -2212,7 +2268,7 @@
             // Also have the peer send more messages using all the remaining credit granted.
             consumed = 3;
             int newOutstandingCredit = 3;
-            assertEquals("Peer cant send more messages than we will have credit for", newOutstandingCredit, prefetch - initialMessageCount + consumed);
+            assertEquals(newOutstandingCredit, prefetch - initialMessageCount + consumed, "Peer cant send more messages than we will have credit for");
 
             final CountDownLatch expected2 = new CountDownLatch(newOutstandingCredit);
             ((JmsConnection) connection).addConnectionListener(new JmsDefaultConnectionListener() {
@@ -2227,10 +2283,10 @@
             testPeer.expectDisposition(true, new AcceptedMatcher(), consumed, consumed);
 
             Message message = consumer.receiveNoWait();
-            assertNotNull("Should have received a 3rd message " + consumed, message);
+            assertNotNull(message, "Should have received a 3rd message " + consumed);
 
             // Ensure all the new messages arrived so that the matching below is deterministic
-            assertTrue("Expected transfers didnt occur: " + expected2.getCount(), expected2.await(5, TimeUnit.SECONDS));
+            assertTrue(expected2.await(5, TimeUnit.SECONDS), "Expected transfers didnt occur: " + expected2.getCount());
 
             // Consume the rest of the messages, 4-13. Expect only dispositions initially until the threshold, then
             // another flow expanding the window to the limit again, then more dispositions, then another flow as the
@@ -2244,7 +2300,7 @@
                 testPeer.expectDisposition(true, new AcceptedMatcher(), consumed, consumed);
 
                 message = consumer.receiveNoWait();
-                assertNotNull("Should have received a message " + consumed, message);
+                assertNotNull(message, "Should have received a message " + consumed);
             }
 
             testPeer.expectClose();
@@ -2254,7 +2310,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testLinkCreditReplenishmentWithPrefetchTrickleFeed() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int prefetch = 10;
@@ -2290,7 +2347,7 @@
                 }
 
                 Message message = consumer.receive(3000);
-                assertNotNull("Should have received a message " + consumed, message);
+                assertNotNull(message, "Should have received a message " + consumed);
             }
 
             testPeer.expectClose();
@@ -2300,7 +2357,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDispositionSentForDecodeErrorOnMessageCopyWithAsyncConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final AtomicReference<JMSException> decodeError = new AtomicReference<>();
@@ -2337,15 +2395,15 @@
             MessageConsumer messageConsumer = session.createConsumer(destination);
             messageConsumer.setMessageListener(m -> onMessage.set(true));
 
-            assertTrue("Should have gotten an onException call from failed message copy", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
 
                 @Override
                 public boolean isSatisfied() throws Exception {
                     return decodeError.get() != null;
                 }
-            }));
+            }), "Should have gotten an onException call from failed message copy");
 
-            assertFalse("onMessage should not be called due to failed message copy", onMessage.get());
+            assertFalse(onMessage.get(), "onMessage should not be called due to failed message copy");
 
             connection.close();
 
@@ -2353,11 +2411,11 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testLocalPriorityOrdering() throws Exception {
         final int messageCount = 10;
-        assertTrue("Max 10 message priorities", messageCount <= 10);
+        assertTrue(messageCount <= 10, "Max 10 message priorities");
 
         final AtomicReference<Throwable> asyncError = new AtomicReference<Throwable>(null);
         final CountDownLatch arrived = new CountDownLatch(messageCount);
@@ -2405,7 +2463,7 @@
             MessageConsumer consumer = session.createConsumer(destination);
 
             boolean awaitPrefetch = arrived.await(15, TimeUnit.SECONDS);
-            assertTrue("Messages not prefetched within given timeout, outstanding: " + arrived.getCount(), awaitPrefetch);
+            assertTrue(awaitPrefetch, "Messages not prefetched within given timeout, outstanding: " + arrived.getCount());
 
             consumer.setMessageListener(new MessageListener() {
                 @Override
@@ -2422,10 +2480,10 @@
             });
 
             boolean awaitDelivered = delivered.await(15, TimeUnit.SECONDS);
-            assertTrue("Messages not delivered within given timeout, outstanding: " + delivered.getCount(), awaitDelivered);
+            assertTrue(awaitDelivered, "Messages not delivered within given timeout, outstanding: " + delivered.getCount());
 
             Throwable ex = asyncError.get();
-            assertNull("Unexpected exception during delivery", ex);
+            assertNull(ex, "Unexpected exception during delivery");
 
             testPeer.waitForAllHandlersToComplete(2000);
 
@@ -2434,11 +2492,12 @@
 
             testPeer.waitForAllHandlersToComplete(2000);
 
-            assertEquals("Message payloads not as expected", expectedPayloads, receivedPayloads);
+            assertEquals(expectedPayloads, receivedPayloads, "Message payloads not as expected");
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testClosingSessionAndConnectionWithinExceptionListenerDueToAsyncConsumerDeliveryFailure() throws Exception {
         final CountDownLatch exceptionListenerCalled = new CountDownLatch(1);
         final CountDownLatch exceptionListenerCompleted = new CountDownLatch(1);
@@ -2492,14 +2551,14 @@
 
             consumer.setMessageListener(m -> messageListenerCalled.set(true));
 
-            assertTrue("Exception listener was not fired within given timeout",
-                    exceptionListenerCalled.await(4000, TimeUnit.MILLISECONDS));
+            assertTrue(exceptionListenerCalled.await(4000, TimeUnit.MILLISECONDS),
+                    "Exception listener was not fired within given timeout");
 
-            assertTrue("Exception listener didnt complete within given timeout",
-                    exceptionListenerCompleted.await(4000, TimeUnit.MILLISECONDS));
+            assertTrue(exceptionListenerCompleted.await(4000, TimeUnit.MILLISECONDS),
+                    "Exception listener didnt complete within given timeout");
 
-            assertNull("Unexpected failure during exception listener handling", asyncError.get());
-            assertFalse("Message listener should not have been called due to decoding error", messageListenerCalled.get());
+            assertNull(asyncError.get(), "Unexpected failure during exception listener handling");
+            assertFalse(messageListenerCalled.get(), "Message listener should not have been called due to decoding error");
 
             testPeer.waitForAllHandlersToComplete(2000);
         }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/FailedConnectionsIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/FailedConnectionsIntegrationTest.java
index 149091c..55e74db 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/FailedConnectionsIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/FailedConnectionsIntegrationTest.java
@@ -19,11 +19,11 @@
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.NETWORK_HOST;
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.OPEN_HOSTNAME;
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.PORT;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.URI;
 import java.util.HashMap;
@@ -44,7 +44,8 @@
 import org.apache.qpid.jms.test.testpeer.basictypes.AmqpError;
 import org.apache.qpid.jms.test.testpeer.basictypes.ConnectionError;
 import org.apache.qpid.proton.amqp.Symbol;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -56,7 +57,8 @@
 
     private static final Logger LOG = LoggerFactory.getLogger(FailedConnectionsIntegrationTest.class);
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectWithInvalidClientIdThrowsJMSEWhenInvalidContainerHintNotPresent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             testPeer.rejectConnect(AmqpError.INVALID_FIELD, "Client ID already in use", null);
@@ -73,7 +75,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectThrowsTimedOutExceptioWhenResponseNotSent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             testPeer.expectSaslAnonymous();
@@ -92,7 +95,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectWithNotFoundErrorThrowsJMSEWhenInvalidContainerHintNotPresent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             testPeer.rejectConnect(AmqpError.NOT_FOUND, "Virtual Host does not exist", null);
@@ -112,7 +116,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectWithInvalidClientIdThrowsICIDEWhenInvalidContainerHintPresent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final String remoteURI = "amqp://localhost:" + testPeer.getServerPort();
@@ -141,7 +146,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionFactoryCreateConnectionWithInvalidClientIdThrowsICIDEWhenInvalidContainerHintPresent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final String remoteURI = "amqp://localhost:" + testPeer.getServerPort();
@@ -174,7 +180,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectSecurityViolation() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             testPeer.rejectConnect(AmqpError.UNAUTHORIZED_ACCESS, "Anonymous connections not allowed", null);
@@ -190,7 +197,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectWithRedirect() throws Exception {
         Map<Symbol, Object> redirectInfo = new HashMap<Symbol, Object>();
 
@@ -210,7 +218,7 @@
                 URI redirectionURI = redirectEx.getRedirectionURI();
 
                 assertNotNull(redirectionURI);
-                assertTrue("vhost", redirectionURI.getQuery().contains("amqp.vhost=vhost"));
+                assertTrue(redirectionURI.getQuery().contains("amqp.vhost=vhost"), "Unexpected query, got: " + redirectionURI.getQuery());
                 assertEquals("127.0.0.1", redirectionURI.getHost());
                 assertEquals(5672, redirectionURI.getPort());
             } catch (Exception ex) {
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ForeignMessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ForeignMessageIntegrationTest.java
index 65611e9..2b0d94f 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ForeignMessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ForeignMessageIntegrationTest.java
@@ -19,15 +19,16 @@
 package org.apache.qpid.jms.integration;
 
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.DELAYED_DELIVERY;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.both;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import jakarta.jms.Connection;
 import jakarta.jms.MessageProducer;
@@ -49,13 +50,14 @@
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.Symbol;
 import org.hamcrest.Matcher;
-import org.hamcrest.MatcherAssert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class ForeignMessageIntegrationTest extends QpidJmsTestCase {
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendForeignBytesMessageWithContent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -92,7 +94,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentForeignMessageHasMessageId() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -118,7 +121,7 @@
 
             producer.send(foreign);
 
-            assertNotNull("JMSMessageID should not be null", foreign.getJMSMessageID());
+            assertNotNull(foreign.getJMSMessageID(), "JMSMessageID should not be null");
 
             testPeer.expectClose();
             connection.close();
@@ -134,7 +137,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendForeignMessageWithDisableMessageIDHintAndExistingMessageID() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -163,16 +167,16 @@
             ForeignJmsBytesMessage foreign = new ForeignJmsBytesMessage();
             foreign.writeBytes(content);
 
-            assertNull("JMSMessageID should not yet be set", foreign.getJMSMessageID());
+            assertNull(foreign.getJMSMessageID(), "JMSMessageID should not yet be set");
             String existingMessageId = "ID:this-should-be-overwritten-in-send";
             foreign.setJMSMessageID(existingMessageId);
-            assertEquals("JMSMessageID should now be set", existingMessageId, foreign.getJMSMessageID());
+            assertEquals(existingMessageId, foreign.getJMSMessageID(), "JMSMessageID should now be set");
 
             // Toggle the DisableMessageID hint, then send it
             producer.setDisableMessageID(true);
             producer.send(foreign);
 
-            assertNull("JMSMessageID should now be null", foreign.getJMSMessageID());
+            assertNull(foreign.getJMSMessageID(), "JMSMessageID should now be null");
 
             testPeer.expectClose();
             connection.close();
@@ -181,7 +185,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendForeignMessageWithDeliveryDelay() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -223,16 +228,16 @@
 
             // Create a foreign message, [erroneously] set a JMSDeliveryTime value, expect it to be overwritten
             ForeignJmsMessage foreign = new ForeignJmsMessage();
-            assertEquals("JMSDeliveryTime should not yet be set", 0, foreign.getJMSDeliveryTime());
+            assertEquals(0, foreign.getJMSDeliveryTime(), "JMSDeliveryTime should not yet be set");
             foreign.setJMSDeliveryTime(1234);
-            assertEquals("JMSDeliveryTime should now (erroneously) be set", 1234, foreign.getJMSDeliveryTime());
+            assertEquals(1234, foreign.getJMSDeliveryTime(), "JMSDeliveryTime should now (erroneously) be set");
 
             // Now send the message, peer will verify the actual delivery time was set as expected
             producer.send(foreign);
             testPeer.waitForAllHandlersToComplete(3000);
 
             // Now verify the local message also has the deliveryTime set as expected
-            MatcherAssert.assertThat("JMSDeliveryTime should now be set in expected range", foreign.getJMSDeliveryTime(), inRange);
+            assertThat("JMSDeliveryTime should now be set in expected range", foreign.getJMSDeliveryTime(), inRange);
 
             testPeer.expectClose();
             connection.close();
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IdleTimeoutIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IdleTimeoutIntegrationTest.java
index cd9778d..7ed195a 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IdleTimeoutIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IdleTimeoutIntegrationTest.java
@@ -22,9 +22,9 @@
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.greaterThan;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -40,7 +40,8 @@
 import org.apache.qpid.jms.test.testpeer.TestAmqpPeer;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 import org.hamcrest.Matchers;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,7 +49,8 @@
 
     public static final Logger LOGGER = LoggerFactory.getLogger(IdleTimeoutIntegrationTest.class);
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testIdleTimeoutIsAdvertisedByDefault() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             testPeer.expectSaslAnonymous();
@@ -69,7 +71,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAdvertisedIdleTimeoutIsHalfOfActualTimeoutValue() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             int configuredTimeout = 54320;
@@ -94,7 +97,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testClientSendsEmptyFramesWhenPeerAdvertisesIdleTimeout() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             int period = 20;
@@ -132,7 +136,8 @@
 
     //TODO: Could use JUnit categories to make this slowish test skipable?
     //      If so, make it slower still and more granular.
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testClientSendsEmptyFramesWithExpectedFrequency() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             int period = 250;
@@ -169,7 +174,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionSetFailedWhenPeerNeglectsToSendEmptyFrames() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             int configuredTimeout = 200;
@@ -198,14 +204,15 @@
                 }
             }, 10000, 10);
 
-            assertTrue("connection didnt fail in expected timeframe", failed);
+            assertTrue(failed, "connection didnt fail in expected timeframe");
             testPeer.waitForAllHandlersToComplete(1000);
 
             connection.close();
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionNotMarkedFailedWhenPeerSendsEmptyFrames() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             int configuredTimeout = 2000;
@@ -229,9 +236,9 @@
             connection.setClientID("clientName");
 
             boolean framesSent = latch.await(cycles * period * 2, TimeUnit.MILLISECONDS);
-            assertTrue("idle frames were not sent as expected", framesSent);
+            assertTrue(framesSent, "idle frames were not sent as expected");
 
-            assertFalse("connection shouldnt fail", connection.isFailed());
+            assertFalse(connection.isFailed(), "connection shouldnt fail");
             testPeer.expectClose();
             connection.close();
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
index 080be67..80f7a5a 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
@@ -18,7 +18,7 @@
  */
 package org.apache.qpid.jms.integration;
 
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import java.util.Map;
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSConsumerIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSConsumerIntegrationTest.java
index e951783..c41f0f4 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSConsumerIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSConsumerIntegrationTest.java
@@ -19,11 +19,11 @@
 package org.apache.qpid.jms.integration;
 
 import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayOutputStream;
 import java.io.ObjectOutputStream;
@@ -52,7 +52,8 @@
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -62,7 +63,8 @@
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -82,7 +84,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseJMSConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -99,7 +102,7 @@
 
             // Verify the consumer gets marked closed
             testPeer.waitForAllHandlersToComplete(1000);
-            assertTrue("JMSConsumer never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -109,7 +112,7 @@
                     }
                     return false;
                 }
-            }, 10000, 10));
+            }, 10000, 10), "JMSConsumer never closed.");
 
             // Try closing it explicitly, should effectively no-op in client.
             // The test peer will throw during close if it sends anything.
@@ -123,7 +126,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveMessageWithReceiveZeroTimeout() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -141,7 +145,7 @@
             JMSConsumer messageConsumer = context.createConsumer(queue);
             Message receivedMessage = messageConsumer.receive(0);
 
-            assertNotNull("A message should have been recieved", receivedMessage);
+            assertNotNull(receivedMessage, "A message should have been recieved");
 
             testPeer.expectEnd();
             testPeer.expectClose();
@@ -151,7 +155,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConsumerReceiveNoWaitThrowsIfConnectionLost() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -181,7 +186,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testNoReceivedMessagesWhenConnectionNotStarted() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -211,7 +217,8 @@
         }
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testSyncReceiveFailsWhenListenerSet() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -258,7 +265,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyMapMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -320,19 +328,19 @@
             Map<String, Object> receivedMap = messageConsumer.receiveBody(Map.class, 3000);
 
             // verify the content is as expected
-            assertNotNull("Map was not received", receivedMap);
+            assertNotNull(receivedMap, "Map was not received");
 
-            assertEquals("Unexpected boolean value", myBool, receivedMap.get(myBoolKey));
-            assertEquals("Unexpected byte value", myByte, receivedMap.get(myByteKey));
+            assertEquals(myBool, receivedMap.get(myBoolKey), "Unexpected boolean value");
+            assertEquals(myByte, receivedMap.get(myByteKey), "Unexpected byte value");
             byte[] readBytes = (byte[]) receivedMap.get(myBytesKey);
-            assertTrue("Read bytes were not as expected: " + Arrays.toString(readBytes), Arrays.equals(myBytes, readBytes));
-            assertEquals("Unexpected char value", myChar, receivedMap.get(myCharKey));
-            assertEquals("Unexpected double value", myDouble, (double) receivedMap.get(myDoubleKey), 0.0);
-            assertEquals("Unexpected float value", myFloat, (float) receivedMap.get(myFloatKey), 0.0);
-            assertEquals("Unexpected int value", myInt, receivedMap.get(myIntKey));
-            assertEquals("Unexpected long value", myLong, receivedMap.get(myLongKey));
-            assertEquals("Unexpected short value", myShort, receivedMap.get(myShortKey));
-            assertEquals("Unexpected UTF value", myString, receivedMap.get(myStringKey));
+            assertTrue(Arrays.equals(myBytes, readBytes), "Read bytes were not as expected: " + Arrays.toString(readBytes));
+            assertEquals(myChar, receivedMap.get(myCharKey), "Unexpected char value");
+            assertEquals(myDouble, (double) receivedMap.get(myDoubleKey), 0.0, "Unexpected double value");
+            assertEquals(myFloat, (float) receivedMap.get(myFloatKey), 0.0, "Unexpected float value");
+            assertEquals(myInt, receivedMap.get(myIntKey), "Unexpected int value");
+            assertEquals(myLong, receivedMap.get(myLongKey), "Unexpected long value");
+            assertEquals(myShort, receivedMap.get(myShortKey), "Unexpected short value");
+            assertEquals(myString, receivedMap.get(myStringKey), "Unexpected UTF value");
 
             context.close();
 
@@ -340,7 +348,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyTextMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -370,7 +379,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyObjectMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -414,7 +424,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyBytesMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -453,17 +464,20 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyFailsDoesNotAcceptMessageAutoAck() throws Exception {
         doTestReceiveBodyFailsDoesNotAcceptMessage(JMSContext.AUTO_ACKNOWLEDGE);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyFailsDoesNotAcceptMessageDupsOk() throws Exception {
         doTestReceiveBodyFailsDoesNotAcceptMessage(JMSContext.DUPS_OK_ACKNOWLEDGE);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyFailsDoesNotAcceptMessageClientAck() throws Exception {
         doTestReceiveBodyFailsDoesNotAcceptMessage(JMSContext.CLIENT_ACKNOWLEDGE);
     }
@@ -497,17 +511,20 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyFailsThenAcceptsOnSuccessfullyNextCallAutoAck() throws Exception {
         doTestReceiveBodyFailsDoesNotAcceptMessage(JMSContext.AUTO_ACKNOWLEDGE);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyFailsThenAcceptsOnSuccessfullyNextCallDupsOk() throws Exception {
         doTestReceiveBodyFailsDoesNotAcceptMessage(JMSContext.DUPS_OK_ACKNOWLEDGE);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyFailsThenGetNullOnNextAttemptClientAck() throws Exception {
         doTestReceiveBodyFailsDoesNotAcceptMessage(JMSContext.CLIENT_ACKNOWLEDGE);
     }
@@ -561,7 +578,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBodyBytesMessageFailsWhenWrongTypeRequested() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSContextIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSContextIntegrationTest.java
index cc90ab4..bfe2246 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSContextIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSContextIntegrationTest.java
@@ -19,8 +19,8 @@
 package org.apache.qpid.jms.integration;
 
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.ANONYMOUS_RELAY;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.util.UUID;
 
@@ -31,7 +31,8 @@
 import org.apache.qpid.jms.test.testpeer.TestAmqpPeer;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.Symbol;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class JMSContextIntegrationTest extends QpidJmsTestCase {
 
@@ -39,7 +40,8 @@
 
     private Symbol[] SERVER_ANONYMOUS_RELAY = new Symbol[]{ANONYMOUS_RELAY};
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAndCloseContext() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -50,7 +52,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateContextWithClientId() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer, false, null, null, null, true);
@@ -61,7 +64,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateContextAndSetClientID() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer, false, null, null, null, false);
@@ -73,7 +77,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAutoAckSessionByDefault() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -88,7 +93,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateContextWithTransactedSessionMode() throws Exception {
         Binary txnId = new Binary(new byte[]{ (byte) 5, (byte) 6, (byte) 7, (byte) 8});
 
@@ -114,7 +120,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateContextFromContextWithSessionsActive() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer);
@@ -142,7 +149,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testOnlyOneProducerCreatedInSingleContext() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer, SERVER_ANONYMOUS_RELAY);
@@ -166,7 +174,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testEachContextGetsItsOwnProducer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer, SERVER_ANONYMOUS_RELAY);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSProducerIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSProducerIntegrationTest.java
index 819271d..16172ee 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSProducerIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/JMSProducerIntegrationTest.java
@@ -21,8 +21,8 @@
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.ANONYMOUS_RELAY;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import jakarta.jms.JMSContext;
 import jakarta.jms.JMSProducer;
@@ -40,7 +40,8 @@
 import org.apache.qpid.jms.test.testpeer.matchers.sections.MessagePropertiesSectionMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.sections.TransferPayloadCompositeMatcher;
 import org.apache.qpid.proton.amqp.Symbol;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class JMSProducerIntegrationTest extends QpidJmsTestCase {
 
@@ -67,7 +68,8 @@
     private static final String DOUBLE_PROP = "doubleProperty";
     private static final double DOUBLE_PROP_VALUE = Double.MAX_VALUE;
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerAndSend() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer, SERVER_ANONYMOUS_RELAY);
@@ -111,7 +113,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJMSProducerHasDefaultConfiguration() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer, SERVER_ANONYMOUS_RELAY);
@@ -134,7 +137,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJMSProducerSetPropertySendsApplicationProperties() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer, SERVER_ANONYMOUS_RELAY);
@@ -188,7 +192,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJMSProducerPropertyOverridesMessageValue() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JMSContext context = testFixture.createJMSContext(testPeer, SERVER_ANONYMOUS_RELAY);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MapMessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MapMessageIntegrationTest.java
index 8300653..e67c9e9 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MapMessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MapMessageIntegrationTest.java
@@ -19,12 +19,12 @@
 package org.apache.qpid.jms.integration;
 
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Arrays;
 import java.util.LinkedHashMap;
@@ -55,7 +55,8 @@
 import org.apache.qpid.jms.test.testpeer.matchers.types.EncodedAmqpValueMatcher;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class MapMessageIntegrationTest extends QpidJmsTestCase {
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
@@ -67,7 +68,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBasicMapMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -132,23 +134,23 @@
             Message receivedMessage = messageConsumer.receive(3000);
 
             // verify the content is as expected
-            assertNotNull("Message was not received", receivedMessage);
-            assertTrue("Message was not a MapMessage", receivedMessage instanceof MapMessage);
+            assertNotNull(receivedMessage, "Message was not received");
+            assertTrue(receivedMessage instanceof MapMessage, "Message was not a MapMessage");
             MapMessage receivedMapMessage = (MapMessage) receivedMessage;
 
-            assertEquals("Unexpected boolean value", myBool, receivedMapMessage.getBoolean(myBoolKey));
-            assertEquals("Unexpected byte value", myByte, receivedMapMessage.getByte(myByteKey));
+            assertEquals(myBool, receivedMapMessage.getBoolean(myBoolKey), "Unexpected boolean value");
+            assertEquals(myByte, receivedMapMessage.getByte(myByteKey), "Unexpected byte value");
             byte[] readBytes = receivedMapMessage.getBytes(myBytesKey);
-            assertTrue("Read bytes were not as expected: " + Arrays.toString(readBytes), Arrays.equals(myBytes, readBytes));
-            assertEquals("Unexpected char value", myChar, receivedMapMessage.getChar(myCharKey));
-            assertEquals("Unexpected double value", myDouble, receivedMapMessage.getDouble(myDoubleKey), 0.0);
-            assertEquals("Unexpected float value", myFloat, receivedMapMessage.getFloat(myFloatKey), 0.0);
-            assertEquals("Unexpected int value", myInt, receivedMapMessage.getInt(myIntKey));
-            assertEquals("Unexpected long value", myLong, receivedMapMessage.getLong(myLongKey));
-            assertEquals("Unexpected short value", myShort, receivedMapMessage.getShort(myShortKey));
-            assertEquals("Unexpected UTF value", myString, receivedMapMessage.getString(myStringKey));
-            assertEquals("Unexpected value", "", receivedMapMessage.getString(myEmptyStringKey));
-            assertNull("Unexpected value", receivedMapMessage.getString(myNullStringKey));
+            assertTrue(Arrays.equals(myBytes, readBytes), "Read bytes were not as expected: " + Arrays.toString(readBytes));
+            assertEquals(myChar, receivedMapMessage.getChar(myCharKey), "Unexpected char value");
+            assertEquals(myDouble, receivedMapMessage.getDouble(myDoubleKey), 0.0, "Unexpected double value");
+            assertEquals(myFloat, receivedMapMessage.getFloat(myFloatKey), 0.0, "Unexpected float value");
+            assertEquals(myInt, receivedMapMessage.getInt(myIntKey), "Unexpected int value");
+            assertEquals(myLong, receivedMapMessage.getLong(myLongKey), "Unexpected long value");
+            assertEquals(myShort, receivedMapMessage.getShort(myShortKey), "Unexpected short value");
+            assertEquals(myString, receivedMapMessage.getString(myStringKey), "Unexpected UTF value");
+            assertEquals("", receivedMapMessage.getString(myEmptyStringKey), "Unexpected value");
+            assertNull(receivedMapMessage.getString(myNullStringKey), "Unexpected value");
 
             assertTrue(receivedMapMessage.isBodyAssignableTo(Map.class));
             assertTrue(receivedMapMessage.isBodyAssignableTo(Object.class));
@@ -179,7 +181,8 @@
      * This doesn't happen in the above test as the reversed roles mean it is protons DecoderImpl doing the decoding
      * and it does a similarly ugly cast on the integer value to char before output.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendBasicMapMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -274,7 +277,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMapMessageIsWritable() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -328,7 +332,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendDoesNotMarkMapMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -431,7 +436,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMarksMapMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageExpirationIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageExpirationIntegrationTest.java
index aaebea5..14aae52 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageExpirationIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageExpirationIntegrationTest.java
@@ -19,11 +19,11 @@
 package org.apache.qpid.jms.integration;
 
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Date;
 import java.util.concurrent.CountDownLatch;
@@ -46,7 +46,8 @@
 import org.apache.qpid.jms.test.testpeer.matchers.AcceptedMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.ModifiedMatcher;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,7 +56,8 @@
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testIncomingExpiredMessageGetsFiltered() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -89,9 +91,9 @@
             testPeer.expectDisposition(true, new AcceptedMatcher(), 2, 2);
 
             Message m = consumer.receive(3000);
-            assertNotNull("Message should have been received", m);
+            assertNotNull(m, "Message should have been received");
             assertTrue(m instanceof TextMessage);
-            assertEquals("Unexpected message content", liveMsgContent, ((TextMessage)m).getText());
+            assertEquals(liveMsgContent, ((TextMessage)m).getText(), "Unexpected message content");
 
             // Verify the other message is not there. Will drain to be sure there are no messages.
             testPeer.expectLinkFlow(true, true, equalTo(UnsignedInteger.valueOf(JmsDefaultPrefetchPolicy.DEFAULT_QUEUE_PREFETCH - 2)));
@@ -99,7 +101,7 @@
             testPeer.expectLinkFlow(false, false, equalTo(UnsignedInteger.valueOf(JmsDefaultPrefetchPolicy.DEFAULT_QUEUE_PREFETCH)));
 
             m = consumer.receive(10);
-            assertNull("Message should not have been received", m);
+            assertNull(m, "Message should not have been received");
 
             testPeer.expectClose();
             connection.close();
@@ -108,7 +110,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testIncomingExpiredMessageGetsConsumedWhenFilterDisabled() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer, "?jms.localMessageExpiry=false");
@@ -137,17 +140,17 @@
             testPeer.expectDisposition(true, new AcceptedMatcher(), 1, 1);
 
             Message m = consumer.receive(3000);
-            assertNotNull("Message should have been received", m);
+            assertNotNull(m, "Message should have been received");
             assertTrue(m instanceof TextMessage);
-            assertEquals("Unexpected message content", expiredMsgContent, ((TextMessage)m).getText());
+            assertEquals(expiredMsgContent, ((TextMessage)m).getText(), "Unexpected message content");
 
             // Verify the other message is there
             testPeer.expectDisposition(true, new AcceptedMatcher(), 2, 2);
 
             m = consumer.receive(3000);
-            assertNotNull("Message should have been received", m);
+            assertNotNull(m, "Message should have been received");
             assertTrue(m instanceof TextMessage);
-            assertEquals("Unexpected message content", liveMsgContent, ((TextMessage)m).getText());
+            assertEquals(liveMsgContent, ((TextMessage)m).getText(), "Unexpected message content");
 
             testPeer.expectClose();
             connection.close();
@@ -156,7 +159,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testIncomingExpiredMessageGetsFilteredAsync() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -211,8 +215,8 @@
                 }
             });
 
-            assertTrue("didn't get expected message", success.await(5, TimeUnit.SECONDS));
-            assertFalse("There was a failure in the listener, see logs", listenerFailure.get());
+            assertTrue(success.await(5, TimeUnit.SECONDS), "didn't get expected message");
+            assertFalse(listenerFailure.get(), "There was a failure in the listener, see logs");
 
             testPeer.waitForAllHandlersToComplete(3000);
 
@@ -223,7 +227,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testIncomingExpiredMessageGetsConsumedWhenFilterDisabledAsync() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer, "?jms.localMessageExpiry=false");
@@ -273,8 +278,8 @@
                 }
             });
 
-            assertTrue("didn't get expected messages", success.await(5, TimeUnit.SECONDS));
-            assertFalse("There was a failure in the listener, see logs", listenerFailure.get());
+            assertTrue(success.await(5, TimeUnit.SECONDS), "didn't get expected messages");
+            assertFalse(listenerFailure.get(), "There was a failure in the listener, see logs");
 
             testPeer.waitForAllHandlersToComplete(3000);
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
index 7c915ae..5698cf5 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MessageIntegrationTest.java
@@ -23,12 +23,12 @@
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -77,7 +77,8 @@
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 import org.apache.qpid.proton.amqp.UnsignedLong;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class MessageIntegrationTest extends QpidJmsTestCase
 {
@@ -102,7 +103,8 @@
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveMessageAndGetBody() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -144,7 +146,8 @@
     //==== Application Properties Section ====
     //========================================
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMessageWithApplicationProperties() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -202,7 +205,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveMessageWithApplicationProperties() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -263,12 +267,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveMessageWithInvalidPropertyName() throws Exception {
         doReceiveMessageWithInvalidPropertyNameTestImpl(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveMessageWithInvalidPropertyNameAndWithValidationDisabled() throws Exception {
         doReceiveMessageWithInvalidPropertyNameTestImpl(true);
     }
@@ -299,7 +305,7 @@
             testPeer.waitForAllHandlersToComplete(3000);
 
             if(!disableValidation) {
-                assertFalse("Expected property to be indicated as not existing", receivedMessage.propertyExists(invalidPropName));
+                assertFalse(receivedMessage.propertyExists(invalidPropName), "Expected property to be indicated as not existing");
 
                 try {
                     receivedMessage.getStringProperty(invalidPropName);
@@ -319,12 +325,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMessageWithInvalidPropertyName() throws Exception {
         doSendMessageWithInvalidPropertyNameTestImpl(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMessageWithInvalidPropertyNameAndWithValidationDisabled() throws Exception {
         doSendMessageWithInvalidPropertyNameTestImpl(true);
     }
@@ -392,7 +400,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageFromQueueWithoutToResultsInUseOfConsumerDestinationQueue() throws Exception {
         receivedMessageFromQueueWithoutToResultsInUseOfConsumerDestinationImpl(true);
     }
@@ -404,7 +413,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageFromQueueWithoutToResultsInUseOfConsumerDestinationTopic() throws Exception {
         receivedMessageFromQueueWithoutToResultsInUseOfConsumerDestinationImpl(false);
     }
@@ -448,12 +458,12 @@
 
             Destination dest = receivedMessage.getJMSDestination();
             if (useQueue) {
-                assertNotNull("expected Queue instance, got null", dest);
-                assertTrue("expected Queue instance. Actual type was: " + dest.getClass().getName(), dest instanceof Queue);
+                assertNotNull(dest, "expected Queue instance, got null");
+                assertTrue(dest instanceof Queue, "expected Queue instance. Actual type was: " + dest.getClass().getName());
                 assertEquals(queueName, ((Queue) dest).getQueueName());
             } else {
-                assertNotNull("expected Topic instance, got null", dest);
-                assertTrue("expected Topic instance. Actual type was: " + dest.getClass().getName(), dest instanceof Topic);
+                assertNotNull(dest, "expected Topic instance, got null");
+                assertTrue(dest instanceof Topic, "expected Topic instance. Actual type was: " + dest.getClass().getName());
                 assertEquals(topicName, ((Topic) dest).getTopicName());
             }
         }
@@ -465,7 +475,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageFromQueueWithNoReplyToReturnsNull() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -506,7 +517,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithTopicDestinationsOnConnectionWithTopicPrefix() throws Exception {
         Class<? extends Destination> destType = Topic.class;
         String destPrefix = "t12321-";
@@ -531,7 +543,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithNoTypeAnnotationAndTopicDestinationsOnConnectionWithTopicPrefix() throws Exception {
         Class<? extends Destination> destType = Topic.class;
         String destPrefix = "t12321-";
@@ -555,7 +568,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithQueueDestinationsOnConnectionWithQueuePrefix() throws Exception {
         Class<? extends Destination> destType = Queue.class;
         String destPrefix = "q12321-";
@@ -580,7 +594,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithNoTypeAnnotationAndQueueDestinationsOnConnectionWithQueuePrefix() throws Exception {
         Class<? extends Destination> destType = Queue.class;
         String destPrefix = "q12321-";
@@ -604,7 +619,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithTemporaryQueueDestinationsOnConnectionWithPrefixes() throws Exception {
         Class<? extends Destination> destType = TemporaryQueue.class;
         String destPrefix = "q12321-";
@@ -628,7 +644,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithTemporaryTopicDestinationsOnConnectionWithPrefixes() throws Exception {
         Class<? extends Destination> destType = TemporaryTopic.class;
         String destPrefix = "q12321-";
@@ -727,8 +744,8 @@
             Destination jmsDest = receivedMessage.getJMSDestination();
             Destination jmsReplyTo = receivedMessage.getJMSReplyTo();
 
-            assertNotNull("Expected JMSDestination but got null", jmsDest);
-            assertNotNull("Expected JMSReplyTo but got null", jmsReplyTo);
+            assertNotNull(jmsDest, "Expected JMSDestination but got null");
+            assertNotNull(jmsReplyTo, "Expected JMSReplyTo but got null");
 
             // Verify destination/replyto names on received message
             String recievedName = null;
@@ -741,12 +758,12 @@
                 recievedReplyName = ((Queue) jmsReplyTo).getQueueName();
             }
 
-            assertEquals("Unexpected name for JMSDestination", destName, recievedName);
-            assertEquals("Unexpected name for JMSReplyTo", replyName, recievedReplyName);
+            assertEquals(destName, recievedName, "Unexpected name for JMSDestination");
+            assertEquals(replyName, recievedReplyName, "Unexpected name for JMSReplyTo");
 
             if (destType == TemporaryQueue.class || destType == TemporaryTopic.class) {
-                assertEquals("Temporary destination name and address should be equal", destName, destAddress);
-                assertEquals("Temporary replyto name and address should be equal", replyName, replyAddress);
+                assertEquals(destName, destAddress, "Temporary destination name and address should be equal");
+                assertEquals(replyName, replyAddress, "Temporary replyto name and address should be equal");
             }
 
             testPeer.expectClose();
@@ -762,7 +779,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMessageWithTopicDestinationsOnConnectionWithTopicPrefix() throws Exception {
         Class<? extends Destination> destType = Topic.class;
         String destPrefix = "t12321-";
@@ -779,7 +797,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMessageWithQueueDestinationsOnConnectionWithQueuePrefix() throws Exception {
         Class<? extends Destination> destType = Queue.class;
         String destPrefix = "q12321-";
@@ -796,7 +815,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMessageWithTemporaryQueueDestinationsOnConnectionWithDestinationPrefixes() throws Exception {
         Class<? extends Destination> destType = TemporaryQueue.class;
         String destPrefix = "q12321-";
@@ -813,7 +833,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMessageWithTemporaryTopicDestinationsOnConnectionWithDestinationPrefixes() throws Exception {
         Class<? extends Destination> destType = TemporaryTopic.class;
         String destPrefix = "q12321-";
@@ -909,7 +930,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithTopicDestinationsOnConnectionWithBrokerDefinedPrefixProperties() throws Exception {
         Class<? extends Destination> destType = Topic.class;
         String destPrefix = "t-broker-provided-prefix-";
@@ -933,7 +955,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithQueueDestinationsOnConnectionWithBrokerDefinedPrefixProperties() throws Exception {
         Class<? extends Destination> destType = Queue.class;
         String destPrefix = "q-broker-provided-prefix-";
@@ -1017,8 +1040,8 @@
             Destination jmsDest = receivedMessage.getJMSDestination();
             Destination jmsReplyTo = receivedMessage.getJMSReplyTo();
 
-            assertNotNull("Expected JMSDestination but got null", jmsDest);
-            assertNotNull("Expected JMSReplyTo but got null", jmsReplyTo);
+            assertNotNull(jmsDest, "Expected JMSDestination but got null");
+            assertNotNull(jmsReplyTo, "Expected JMSReplyTo but got null");
 
             // Verify destination/replyto names on received message
             String recievedName = null;
@@ -1031,8 +1054,8 @@
                 recievedReplyName = ((Queue) jmsReplyTo).getQueueName();
             }
 
-            assertEquals("Unexpected name for JMSDestination", destName, recievedName);
-            assertEquals("Unexpected name for JMSReplyTo", replyName, recievedReplyName);
+            assertEquals(destName, recievedName, "Unexpected name for JMSDestination");
+            assertEquals(replyName, recievedReplyName, "Unexpected name for JMSReplyTo");
 
             testPeer.expectClose();
             connection.close();
@@ -1047,7 +1070,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMessageWithQueueDestinationsOnConnectionWithBrokerDefinedPrefixProperties() throws Exception {
         Class<? extends Destination> destType = Queue.class;
         String destPrefix = "q-broker-provided-prefix-";
@@ -1064,7 +1088,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMessageWithTopicDestinationsOnConnectionWithBrokerDefinedPrefixProperties() throws Exception {
         Class<? extends Destination> destType = Topic.class;
         String destPrefix = "t-broker-provided-prefix-";
@@ -1151,7 +1176,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageFromTopicWithReplyToWithoutTypeAnnotationResultsInUseOfConsumerDestinationType() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1180,8 +1206,8 @@
             assertNotNull(receivedMessage);
 
             Destination dest = receivedMessage.getJMSReplyTo();
-            assertNotNull("JMSReplyTo should not be null", dest);
-            assertTrue("Destination not of expected type: " + dest.getClass(), dest instanceof Topic);
+            assertNotNull(dest, "JMSReplyTo should not be null");
+            assertTrue(dest instanceof Topic, "Destination not of expected type: " + dest.getClass());
             assertEquals(myReplyTopicAddress, ((Topic)dest).getTopicName());
 
             testPeer.expectClose();
@@ -1199,7 +1225,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentMessageContainsToTypeAnnotationByte() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1241,7 +1268,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentMessageContainsReplyToTypeAnnotationByte() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1291,7 +1319,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageFromQueueWithToLegacyTypeAnnotationForTopic() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1322,8 +1351,8 @@
             assertNotNull(receivedMessage);
 
             Destination dest = receivedMessage.getJMSDestination();
-            assertNotNull("Expected Topic destination but got null", dest);
-            assertTrue("Expected Topic instance but did not get one. Actual type was: " + dest.getClass().getName(), dest instanceof Topic);
+            assertNotNull(dest, "Expected Topic destination but got null");
+            assertTrue(dest instanceof Topic, "Expected Topic instance but did not get one. Actual type was: " + dest.getClass().getName());
             assertEquals(myTopicAddress, ((Topic)dest).getTopicName());
 
             testPeer.expectClose();
@@ -1340,7 +1369,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageFromQueueWithLegacyReplyToTypeAnnotationForTopic() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1390,7 +1420,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageFromQueueWithNoAbsoluteExpiryOrTtlReturnsJMSExpirationZero() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1430,7 +1461,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageFromQueueWithAbsoluteExpiryReturnsJMSExpirationNonZero() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             //Disable local expiration checking in consumer
@@ -1471,7 +1503,8 @@
     //==== MessageID and CorrelationID Handling ====
     //==============================================
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveMessageWithoutMessageId() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1507,7 +1540,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithStringMessageIdReturnsExpectedJMSMessageID() throws Exception {
         String messageId = "ID:myTestMessageIdString";
         receivedMessageWithMessageIdTestImpl(messageId, messageId);
@@ -1519,7 +1553,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithStringMessageIdNoPrefixReturnsExpectedJMSMessageID() throws Exception {
         String messageIdNoPrefix = "myTestMessageIdString";
         String expected = "ID:AMQP_NO_PREFIX:" + messageIdNoPrefix;
@@ -1532,7 +1567,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithUUIDMessageIdReturnsExpectedJMSMessageID() throws Exception {
         UUID uuid = UUID.randomUUID();
         String expected = "ID:AMQP_UUID:" + uuid.toString();
@@ -1545,7 +1581,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithUnsignedLongMessageIdReturnsExpectedJMSMessageID() throws Exception {
         UnsignedLong ulong = UnsignedLong.valueOf(123456789L);
         String expected = "ID:AMQP_ULONG:123456789";
@@ -1558,7 +1595,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithBinaryMessageIdReturnsExpectedJMSMessageID() throws Exception {
         Binary binary = new Binary(new byte[]{(byte)0x02, (byte)0x20, (byte) 0xAE, (byte) 0x00});
         String expected = "ID:AMQP_BINARY:0220AE00";
@@ -1606,7 +1644,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithStringCorrelationIdReturnsExpectedJMSCorrelationID() throws Exception {
         String underlyingCorrelationId = "ID:myTestCorrelationIdString";
         String expected = underlyingCorrelationId;
@@ -1620,7 +1659,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithAppSpecificStringCorrelationIdReturnsExpectedJMSCorrelationID() throws Exception {
         String underlyingCorrelationId = "myTestCorrelationIdString";
         String expected = underlyingCorrelationId;
@@ -1633,7 +1673,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithUUIDCorrelationIdReturnsExpectedJMSCorrelationID() throws Exception {
         UUID underlyingCorrelationId = UUID.randomUUID();
         String expected = "ID:AMQP_UUID:" + underlyingCorrelationId.toString();
@@ -1646,7 +1687,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithLongCorrelationIdReturnsExpectedJMSCorrelationID() throws Exception {
         UnsignedLong underlyingCorrelationId = UnsignedLong.valueOf(123456789L);
         String expected = "ID:AMQP_ULONG:" + underlyingCorrelationId.toString();
@@ -1695,7 +1737,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentMessageWithUUIDCorrelationId() throws Exception {
         UUID uuid = UUID.randomUUID();
         String stringCorrelationId = AmqpMessageIdHelper.JMS_ID_PREFIX + AmqpMessageIdHelper.AMQP_UUID_PREFIX +  uuid.toString();
@@ -1709,7 +1752,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentMessageWithBinaryCorrelationId() throws Exception
     {
         Binary bin = new Binary(new byte[]{(byte)0x01, (byte)0x23, (byte) 0xAF, (byte) 0x00});
@@ -1724,7 +1768,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentMessageWithUlongCorrelationId() throws Exception {
         UnsignedLong ulong = UnsignedLong.valueOf(Long.MAX_VALUE);
         String stringCorrelationId = AmqpMessageIdHelper.JMS_ID_PREFIX + AmqpMessageIdHelper.AMQP_ULONG_PREFIX +  ulong.toString();
@@ -1738,7 +1783,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentMessageWithStringCorrelationId() throws Exception {
         String stringCorrelationId = "ID:myTestMessageIdString";
         sentMessageWithCorrelationIdTestImpl(stringCorrelationId, stringCorrelationId);
@@ -1752,7 +1798,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentMessageWithNoPrefixEncodedStringCorrelationId() throws Exception {
         String idSuffix = "myNoIdPrefixString";
         String stringCorrelationId = "ID:" + AmqpMessageIdHelper.AMQP_NO_PREFIX + idSuffix;
@@ -1765,7 +1812,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentMessageWithAppSpecificStringCorrelationId() throws Exception {
         String stringCorrelationId = "myTestAppSpecificString";
         sentMessageWithCorrelationIdTestImpl(stringCorrelationId, stringCorrelationId);
@@ -1815,7 +1863,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithStringMessageIdAndSendValueAsCorrelationId() throws Exception {
         String string = "ID:myStringMessageId";
         recieveMessageIdSendCorrelationIdTestImpl(string, string);
@@ -1828,7 +1877,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithStringNoPrefixMessageIdAndSendValueAsCorrelationId() throws Exception {
         String stringNoPrefix = "myStringMessageId";
         String expected = "ID:AMQP_NO_PREFIX:" + stringNoPrefix;
@@ -1842,7 +1892,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithUUIDMessageIdAndSendValueAsCorrelationId() throws Exception {
         UUID uuid = UUID.randomUUID();
         String expected = "ID:AMQP_UUID:" +  uuid.toString();
@@ -1856,7 +1907,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithUlongMessageIdAndSendValueAsCorrelationId() throws Exception {
         UnsignedLong ulong = UnsignedLong.valueOf(123456789L);
         String expected = "ID:AMQP_ULONG:123456789";
@@ -1870,7 +1922,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithBinaryMessageIdAndSendValueAsCorrelationId() throws Exception {
         Binary binary = new Binary(new byte[]{(byte)0x00, (byte)0xCD, (byte) 0xEF, (byte) 0x01});
         String expected = "ID:AMQP_BINARY:00CDEF01";
@@ -1902,7 +1955,7 @@
             assertNotNull(receivedMessage);
 
             String jmsMessageID = receivedMessage.getJMSMessageID();
-            assertEquals("Unexpected value for JMSMessageID", expectedMessageId, jmsMessageID);
+            assertEquals(expectedMessageId, jmsMessageID, "Unexpected value for JMSMessageID");
 
             //Now take the received JMSMessageID, and send a message with it set
             //as the JMSCorrelationID and verify we send the same AMQP id as we started with.
@@ -1946,7 +1999,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithGroupRelatedPropertiesSet() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1978,14 +2032,14 @@
             Message receivedMessage = messageConsumer.receive(3000);
             testPeer.waitForAllHandlersToComplete(3000);
 
-            assertNotNull("did not receive the message", receivedMessage);
+            assertNotNull(receivedMessage, "did not receive the message");
 
             boolean foundGroupId = false;
             boolean foundGroupSeq = false;
             boolean foundReplyToGroupId = false;
 
             Enumeration<?> names = receivedMessage.getPropertyNames();
-            assertTrue("Message had no property names", names.hasMoreElements());
+            assertTrue(names.hasMoreElements(), "Message had no property names");
             while (names.hasMoreElements()) {
                 Object element = names.nextElement();
 
@@ -2002,17 +2056,17 @@
                 }
             }
 
-            assertTrue("JMSXGroupID not in property names", foundGroupId);
-            assertTrue("JMSXGroupSeq  not in property names", foundGroupSeq);
-            assertTrue("JMS_AMQP_REPLY_TO_GROUP_ID not in property names", foundReplyToGroupId);
+            assertTrue(foundGroupId, "JMSXGroupID not in property names");
+            assertTrue(foundGroupSeq, "JMSXGroupSeq  not in property names");
+            assertTrue(foundReplyToGroupId, "JMS_AMQP_REPLY_TO_GROUP_ID not in property names");
 
-            assertTrue("JMSXGroupID does not exist", receivedMessage.propertyExists(JmsClientProperties.JMSXGROUPID));
-            assertTrue("JMSXGroupSeq does not exist", receivedMessage.propertyExists(JmsClientProperties.JMSXGROUPSEQ));
-            assertTrue("JMS_AMQP_REPLY_TO_GROUP_ID does not exist", receivedMessage.propertyExists(AmqpMessageSupport.JMS_AMQP_REPLY_TO_GROUP_ID));
+            assertTrue(receivedMessage.propertyExists(JmsClientProperties.JMSXGROUPID), "JMSXGroupID does not exist");
+            assertTrue(receivedMessage.propertyExists(JmsClientProperties.JMSXGROUPSEQ), "JMSXGroupSeq does not exist");
+            assertTrue(receivedMessage.propertyExists(AmqpMessageSupport.JMS_AMQP_REPLY_TO_GROUP_ID), "JMS_AMQP_REPLY_TO_GROUP_ID does not exist");
 
-            assertEquals("did not get the expected JMSXGroupID", expectedGroupId, receivedMessage.getStringProperty(JmsClientProperties.JMSXGROUPID));
-            assertEquals("did not get the expected JMSXGroupSeq", expectedGroupSeq, receivedMessage.getIntProperty(JmsClientProperties.JMSXGROUPSEQ));
-            assertEquals("did not get the expected JMS_AMQP_REPLY_TO_GROUP_ID", expectedReplyToGroupId, receivedMessage.getStringProperty(AmqpMessageSupport.JMS_AMQP_REPLY_TO_GROUP_ID));
+            assertEquals(expectedGroupId, receivedMessage.getStringProperty(JmsClientProperties.JMSXGROUPID), "did not get the expected JMSXGroupID");
+            assertEquals(expectedGroupSeq, receivedMessage.getIntProperty(JmsClientProperties.JMSXGROUPSEQ), "did not get the expected JMSXGroupSeq");
+            assertEquals(expectedReplyToGroupId, receivedMessage.getStringProperty(AmqpMessageSupport.JMS_AMQP_REPLY_TO_GROUP_ID), "did not get the expected JMS_AMQP_REPLY_TO_GROUP_ID");
 
             testPeer.expectClose();
             connection.close();
@@ -2028,7 +2082,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMessageWithGroupRelatedPropertiesSet() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -2073,7 +2128,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendDoesNotMarkMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -2171,7 +2227,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMarksMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -2271,25 +2328,29 @@
     //==== DeliveryTime Handling ====
     //===============================
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithDeliveryTimeAnnotation() throws Exception {
         long deliveryTime = System.currentTimeMillis() + 13526;
         doReceivedMessageDeliveryTimeTestImpl(true, deliveryTime);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithDeliveryTimeAnnotationTimestampValue() throws Exception {
         Date deliveryTime = new Date(System.currentTimeMillis() + 13526);
         doReceivedMessageDeliveryTimeTestImpl(true, deliveryTime);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithDeliveryTimeAnnotationUnsignedLongValue() throws Exception {
         UnsignedLong deliveryTime = new UnsignedLong(System.currentTimeMillis() + 13526);
         doReceivedMessageDeliveryTimeTestImpl(true, deliveryTime);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceivedMessageWithoutDeliveryTimeAnnotation() throws Exception {
         doReceivedMessageDeliveryTimeTestImpl(false, null);
     }
@@ -2344,9 +2405,9 @@
 
             testPeer.waitForAllHandlersToComplete(3000);
 
-            assertNotNull("should have recieved a message", receivedMessage);
+            assertNotNull(receivedMessage, "should have recieved a message");
 
-            assertEquals("Unexpected delivery time", expectedDeliveryTime, receivedMessage.getJMSDeliveryTime());
+            assertEquals(expectedDeliveryTime, receivedMessage.getJMSDeliveryTime(), "Unexpected delivery time");
         }
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MultiTransferFrameMessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MultiTransferFrameMessageIntegrationTest.java
index 7635149..7d6b215 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MultiTransferFrameMessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/MultiTransferFrameMessageIntegrationTest.java
@@ -18,9 +18,9 @@
  */
 package org.apache.qpid.jms.integration;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -44,17 +44,20 @@
 import org.apache.qpid.proton.amqp.DescribedType;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 import org.hamcrest.Matchers;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class MultiTransferFrameMessageIntegrationTest extends QpidJmsTestCase {
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveMultiFrameBytesMessage() throws Exception {
         doReceiveMultiFrameBytesMessageTestImpl(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveMultiFrameBytesMessageWithEmptyFinalTransfer() throws Exception {
         doReceiveMultiFrameBytesMessageTestImpl(true);
     }
@@ -99,13 +102,13 @@
             assertNotNull(receivedMessage);
             assertTrue(receivedMessage instanceof BytesMessage);
             BytesMessage bytesMessage = (BytesMessage) receivedMessage;
-            assertEquals("Unexpected message body length", expectedContent.length, bytesMessage.getBodyLength());
+            assertEquals(expectedContent.length, bytesMessage.getBodyLength(), "Unexpected message body length");
 
             byte[] receivedContent = new byte[expectedContent.length];
             int readBytes = bytesMessage.readBytes(receivedContent);
 
-            assertEquals("Unexpected content length read", receivedContent.length, readBytes);
-            assertTrue("Unexpected content", Arrays.equals(expectedContent, receivedContent));
+            assertEquals(receivedContent.length, readBytes, "Unexpected content length read");
+            assertTrue(Arrays.equals(expectedContent, receivedContent), "Unexpected content");
 
             testPeer.expectClose();
             connection.close();
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/NoAckSessionIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/NoAckSessionIntegrationTest.java
index c988415..ab71a33 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/NoAckSessionIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/NoAckSessionIntegrationTest.java
@@ -18,8 +18,8 @@
 
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import jakarta.jms.Connection;
 import jakarta.jms.Destination;
@@ -42,7 +42,8 @@
 import org.apache.qpid.jms.test.testpeer.matchers.sections.TransferPayloadCompositeMatcher;
 import org.apache.qpid.proton.amqp.DescribedType;
 import org.hamcrest.Matcher;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test for Session that has been created with a supported NoAck Session Mode
@@ -91,27 +92,32 @@
 
     //----- Test the NoAck Session Mode for consumers ------------------------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testNoAckSessionAppliedToTopic() throws Exception {
         doTestConsumerWithPresettleOptions(100, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testNoAckSessionAppliedToTopicAltMode() throws Exception {
         doTestConsumerWithPresettleOptions(257, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testNoAckSessionAppliedToQueue() throws Exception {
         doTestConsumerWithPresettleOptions(100, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testNoAckSessionAppliedToTempTopic() throws Exception {
         doTestConsumerWithPresettleOptions(100, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testNoAckSessionAppliedToTempQueue() throws Exception {
         doTestConsumerWithPresettleOptions(100, TemporaryQueue.class);
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ObjectMessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ObjectMessageIntegrationTest.java
index 4e8ac05..0585b87 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ObjectMessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ObjectMessageIntegrationTest.java
@@ -20,12 +20,12 @@
 
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -65,7 +65,8 @@
 import org.apache.qpid.jms.util.SimplePojo;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -77,17 +78,20 @@
 
     //==== Java serialization encoding ====
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendBasicObjectMessageWithSerializedContent() throws Exception {
         doSendBasicObjectMessageWithSerializedContentTestImpl("myObjectString", false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendBasicObjectMessageWithSerializedContentExplicitNull() throws Exception {
         doSendBasicObjectMessageWithSerializedContentTestImpl(null, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendBasicObjectMessageWithSerializedContentImplicitNull() throws Exception {
         doSendBasicObjectMessageWithSerializedContentTestImpl(null, false);
     }
@@ -166,7 +170,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBasicObjectMessageWithSerializedContent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -207,8 +212,8 @@
             ObjectMessage objectMessage = (ObjectMessage)receivedMessage;
 
             Object object = objectMessage.getObject();
-            assertNotNull("Expected object but got null", object);
-            assertEquals("Message body object was not as expected", expectedContent, object);
+            assertNotNull(object, "Expected object but got null");
+            assertEquals(expectedContent, object, "Message body object was not as expected");
 
             assertTrue(receivedMessage.isBodyAssignableTo(String.class));
             assertTrue(receivedMessage.isBodyAssignableTo(Serializable.class));
@@ -231,7 +236,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveAndThenResendBasicObjectMessageWithSerializedContent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -309,37 +315,43 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBlockedSerializedContentFailsOnGetObject() throws Exception {
         // We aren't allowing the test class
         doTestReceiveSerializedContentPolicyTest("java.lang,java.util", null, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBlockAllSerializedContentFailsOnGetObject() throws Exception {
         // We are blocking everything
         doTestReceiveSerializedContentPolicyTest(null, "*", false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBlockSomeSerializedContentFailsOnGetObject() throws Exception {
         // We aren't allowing the UUID
         doTestReceiveSerializedContentPolicyTest("org.apache.qpid.jms", null, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveWithWrongUnblockedSerializedContentFailsOnGetObject() throws Exception {
         // We aren't allowing the UUID a different way
         doTestReceiveSerializedContentPolicyTest("java.lang,org.apache.qpid.jms", null, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveWithFullyAllowedSerializedContentSucceeds() throws Exception {
         // We are allowing everything needed
         doTestReceiveSerializedContentPolicyTest("java.lang,java.util,org.apache.qpid.jms", null, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveWithFullyAllowedSerializedContentFailsDueToDenyList() throws Exception {
         // We are allowing everything needed, but then the deny list is overriding to block some
         doTestReceiveSerializedContentPolicyTest("java.lang,java.util,org.apache.qpid.jms", "java.util", false);
@@ -413,7 +425,7 @@
             }
 
             if (succeed) {
-                assertEquals("Content not as expected", expectedContent, received);
+                assertEquals(expectedContent, received, "Content not as expected");
             }
 
             testPeer.expectClose();
@@ -425,7 +437,8 @@
 
     //==== AMQP type system encoding ====
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendBasicObjectMessageWithAmqpTypedContent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -480,7 +493,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRecieveBasicObjectMessageWithAmqpTypedContentAndJMSMessageTypeAnnotation() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -508,12 +522,12 @@
             Message receivedMessage = messageConsumer.receive(3000);
 
             assertNotNull(receivedMessage);
-            assertTrue("Expected ObjectMessage instance, but got: " + receivedMessage.getClass().getName(), receivedMessage instanceof ObjectMessage);
+            assertTrue(receivedMessage instanceof ObjectMessage, "Expected ObjectMessage instance, but got: " + receivedMessage.getClass().getName());
             ObjectMessage objectMessage = (ObjectMessage)receivedMessage;
 
             Object object = objectMessage.getObject();
-            assertNotNull("Expected object but got null", object);
-            assertEquals("Message body object was not as expected", map, object);
+            assertNotNull(object, "Expected object but got null");
+            assertEquals(map, object, "Message body object was not as expected");
 
             assertTrue(receivedMessage.isBodyAssignableTo(Map.class));
             assertTrue(receivedMessage.isBodyAssignableTo(Serializable.class));
@@ -536,7 +550,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendDoesNotMarkObjectMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -639,7 +654,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMarksObjectMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/PresettledConsumerIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/PresettledConsumerIntegrationTest.java
index 8124eaf..4810baa 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/PresettledConsumerIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/PresettledConsumerIntegrationTest.java
@@ -18,8 +18,8 @@
 
 import static org.hamcrest.Matchers.arrayContaining;
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import jakarta.jms.Connection;
 import jakarta.jms.Destination;
@@ -39,7 +39,8 @@
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
 import org.apache.qpid.proton.amqp.transaction.TxnCapability;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test for Consumer state when various consumer presettle options are applied.
@@ -50,25 +51,29 @@
 
     //----- Test the jms.presettlePolicy.presettleAll option -----------------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettleAllConfigurationAppliedToTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledAllConfigurationAppliedToQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledAllConfigurationAppliedToTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, true, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledAllConfigurationAppliedToTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, true, TemporaryQueue.class);
@@ -76,25 +81,29 @@
 
     //----- Test the jms.presettlePolicy.presettleTopicConsumers option ------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettleTopicConsumersConfigurationAppliedToTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledTopicConsumersConfigurationAppliedToQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, false, false, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledTopicConsumersConfigurationAppliedToTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, true, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledTopicConsumersConfigurationAppliedToTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, false, false, TemporaryQueue.class);
@@ -102,25 +111,29 @@
 
     //----- Test the jms.presettlePolicy.presettleQueueConsumers option ----- //
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettleQueueConsumersConfigurationAppliedToTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, false, false, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledQueueConsumersConfigurationAppliedToQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledQueueConsumersConfigurationAppliedToTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, false, false, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledQueueConsumersConfigurationAppliedToTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, true, TemporaryQueue.class);
@@ -128,25 +141,29 @@
 
     //----- Test the presettled consumer still settles if needed -------------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledTopicConsumerSettlesWhenNeeded() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, false, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledQueueConsumerSettlesWhenNeeded() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, false, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledTempTopicConsumerSettlesWhenNeeded() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, false, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPresettledTempQueueConsumerSettlesWhenNeeded() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, false, true, false, TemporaryQueue.class);
@@ -154,49 +171,57 @@
 
     //----- Test that transacted consumers always send unsettled -------------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactedTopicConsumerNotSettledPresettleAll() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, true, false, false, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactedQueueConsumerNotSettledPresettleAll() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, true, false, false, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactedTempTopicConsumerNotSettledPresettleAll() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, true, false, false, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactedTempQueueConsumerNotSettledPresettleAll() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestConsumerWithPresettleOptions(presettleConfig, true, false, false, TemporaryQueue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactedTopicConsumerNotSettledPresettleTopicConsumers() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, true, false, false, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactedQueueConsumerNotSettledPresettleQueueConsumers() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, true, false, false, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactedTempTopicConsumerNotSettledPresettleTopicConsumers() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, true, false, false, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactedTempQueueConsumerNotSettledPresettleQueueConsumers() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueConsumers=true";
         doTestConsumerWithPresettleOptions(presettleConfig, true, false, false, TemporaryQueue.class);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/PresettledProducerIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/PresettledProducerIntegrationTest.java
index 960341f..ff3b4e6 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/PresettledProducerIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/PresettledProducerIntegrationTest.java
@@ -20,11 +20,11 @@
 import static org.hamcrest.Matchers.arrayContaining;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -55,7 +55,8 @@
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.transaction.TxnCapability;
 import org.hamcrest.Matcher;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -72,49 +73,57 @@
 
     //----- Test the jms.presettleAll option ---------------------------------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleAllSendToTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleAllSendToQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleAllSendToTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleAllSendToTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, TemporaryQueue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleAllAnonymousSendToTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleAllAnonymousSendToQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, true, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleAllAnonymousSendToTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, true, true, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleAllAnonymousSendToTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, true, true, TemporaryQueue.class);
@@ -122,49 +131,57 @@
 
     //----- Test the jms.presettleProducers option ---------------------------------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleProducersTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleProducersQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleProducersTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleProducersTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, TemporaryQueue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleProducersAnonymousTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleProducersAnonymousQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, true, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleProducersAnonymousTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, true, true, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleProducersAnonymousTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, true, true, TemporaryQueue.class);
@@ -172,49 +189,57 @@
 
     //----- Test the jms.presettleTopicProducers option ---------------------------------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTopicProducersTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTopicProducersQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, false, false, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTopicProducersTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTopicProducersTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, false, false, TemporaryQueue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTopicProducersAnonymousTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, false, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTopicProducersAnonymousQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, false, false, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTopicProducersAnonymousTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, false, true, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTopicProducersAnonymousTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTopicProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, false, false, TemporaryQueue.class);
@@ -222,49 +247,57 @@
 
     //----- Test the jms.presettleQueueProducers option ---------------------------------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleQueueProducersTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, false, false, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleQueueProducersQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleQueueProducersTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, false, false, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleQueueProducersTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, true, true, TemporaryQueue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleQueueProducersAnonymousTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, false, false, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleQueueProducersAnonymousQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, false, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleQueueProducersAnonymousTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, false, false, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleQueueProducersAnonymousTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleQueueProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, true, false, true, TemporaryQueue.class);
@@ -272,49 +305,57 @@
 
     //----- Test the jms.presettleTransactedProducers option ---------------------------------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTransactedProducersTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTransactedProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, true, false, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTransactedProducersQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTransactedProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, true, false, true, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTransactedProducersTempTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTransactedProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, true, false, true, true, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTransactedProducersTempQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTransactedProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, true, false, true, true, TemporaryQueue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTransactedProducersTopicNoTX() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTransactedProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, false, false, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTransactedProducersQueueNoTX() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTransactedProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, false, false, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTransactedProducersTempTopicNoTX() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTransactedProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, false, false, TemporaryTopic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testJmsPresettlePolicyPresettleTransactedProducersTempQueueNoTX() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleTransactedProducers=true";
         doTestProducerWithPresettleOptions(presettleConfig, false, false, false, false, TemporaryQueue.class);
@@ -435,25 +476,29 @@
 
     //----- Test the jms.presettleAll with asynchronous completion -----------//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionPresettleAllSendToTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestAsyncCompletionProducerWithPresettleOptions(presettleConfig, false, false, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionPresettleAllSendToQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestAsyncCompletionProducerWithPresettleOptions(presettleConfig, false, false, true, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testsyncCompletionPresettleAllAnonymousSendToTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestAsyncCompletionProducerWithPresettleOptions(presettleConfig, false, true, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testsyncCompletionPresettleAllAnonymousSendToQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleAll=true";
         doTestAsyncCompletionProducerWithPresettleOptions(presettleConfig, false, true, true, true, Queue.class);
@@ -461,25 +506,29 @@
 
     //----- Test the jms.presettleProducers with asynchronous completion -----//
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionPresettleProducersTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestAsyncCompletionProducerWithPresettleOptions(presettleConfig, false, false, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionPresettleProducersQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestAsyncCompletionProducerWithPresettleOptions(presettleConfig, false, false, true, true, Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionPresettleProducersAnonymousTopic() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestAsyncCompletionProducerWithPresettleOptions(presettleConfig, false, true, true, true, Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionPresettleProducersAnonymousQueue() throws Exception {
         String presettleConfig = "?jms.presettlePolicy.presettleProducers=true";
         doTestAsyncCompletionProducerWithPresettleOptions(presettleConfig, false, true, true, true, Queue.class);
@@ -593,7 +642,7 @@
 
             testPeer.expectClose();
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(2000, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(2000, TimeUnit.SECONDS), "Did not get async callback");
             assertNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java
index 22ae8ec..df9087c 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java
@@ -29,12 +29,12 @@
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.nio.charset.Charset;
@@ -92,28 +92,25 @@
 import org.apache.qpid.jms.test.testpeer.matchers.sections.MessagePropertiesSectionMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.sections.TransferPayloadCompositeMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.types.EncodedAmqpValueMatcher;
-import org.apache.qpid.jms.util.QpidJMSTestRunner;
-import org.apache.qpid.jms.util.Repeat;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.UnsignedByte;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 import org.hamcrest.Matcher;
-import org.hamcrest.MatcherAssert;
 import org.hamcrest.Matchers;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@RunWith(QpidJMSTestRunner.class)
 public class ProducerIntegrationTest extends QpidJmsTestCase {
 
     private static final Logger LOG = LoggerFactory.getLogger(ProducerIntegrationTest.class);
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSender() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -134,7 +131,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSenderTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -162,7 +160,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentTextMessageCanBeModified() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -199,7 +198,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDefaultDeliveryModeProducesDurableMessages() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -230,7 +230,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testProducerOverridesMessageDeliveryMode() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -273,14 +274,16 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageNonPersistentProducerSetDurableFalse() throws Exception {
         doSendingMessageNonPersistentTestImpl(false, true, true);
     }
 
 
     //As above but with an anonymous producer.
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageNonPersistentProducerSetDurableFalseAnonymousProducer() throws Exception {
         doSendingMessageNonPersistentTestImpl(true, true, true);
     }
@@ -292,13 +295,15 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageNonPersistentSendSetDurableFalse() throws Exception {
         doSendingMessageNonPersistentTestImpl(false, true, false);
     }
 
     //As above but with an anonymous producer.
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageNonPersistentSendSetDurableFalseAnonymousProducer() throws Exception {
         doSendingMessageNonPersistentTestImpl(true, true, false);
     }
@@ -310,13 +315,15 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageNonPersistentProducerOmitsHeader() throws Exception {
         doSendingMessageNonPersistentTestImpl(false, false, true);
     }
 
     //As above but with an anonymous producer.
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageNonPersistentProducerOmitsHeaderAnonymousProducer() throws Exception {
         doSendingMessageNonPersistentTestImpl(true, false, true);
     }
@@ -328,13 +335,15 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageNonPersistentSendOmitsHeader() throws Exception {
         doSendingMessageNonPersistentTestImpl(false, false, false);
     }
 
     //As above but with an anonymous producer.
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageNonPersistentSendOmitsHeaderAnonymousProducer() throws Exception {
         doSendingMessageNonPersistentTestImpl(true, false, false);
     }
@@ -386,7 +395,7 @@
 
             Message message = session.createTextMessage(text);
 
-            assertNull("Should not yet have a JMSDestination", message.getJMSDestination());
+            assertNull(message.getJMSDestination(), "Should not yet have a JMSDestination");
 
             if(setOnProducer) {
                 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
@@ -407,7 +416,7 @@
                 }
             }
 
-            assertEquals("Should have NON_PERSISTENT delivery mode set", DeliveryMode.NON_PERSISTENT, message.getJMSDeliveryMode());
+            assertEquals(DeliveryMode.NON_PERSISTENT, message.getJMSDeliveryMode(), "Should have NON_PERSISTENT delivery mode set");
 
             connection.close();
 
@@ -421,7 +430,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageSetsJMSDestination() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -447,11 +457,11 @@
 
             Message message = session.createTextMessage(text);
 
-            assertNull("Should not yet have a JMSDestination", message.getJMSDestination());
+            assertNull(message.getJMSDestination(), "Should not yet have a JMSDestination");
 
             producer.send(message);
 
-            assertEquals("Should have had JMSDestination set", queue, message.getJMSDestination());
+            assertEquals(queue, message.getJMSDestination(), "Should have had JMSDestination set");
 
             connection.close();
 
@@ -459,7 +469,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageSetsJMSTimestamp() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -506,7 +517,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageWithDisableMessageTimestampHint() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -533,7 +545,7 @@
 
             Message message = session.createTextMessage(text);
 
-            assertEquals("JMSTimestamp should not yet be set", 0, message.getJMSTimestamp());
+            assertEquals(0, message.getJMSTimestamp(), "JMSTimestamp should not yet be set");
 
             producer.setDisableMessageTimestamp(true);
             producer.send(message);
@@ -542,11 +554,12 @@
 
             testPeer.waitForAllHandlersToComplete(1000);
 
-            assertEquals("JMSTimestamp should still not be set", 0, message.getJMSTimestamp());
+            assertEquals(0, message.getJMSTimestamp(), "JMSTimestamp should still not be set");
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageSetsJMSExpirationRelatedAbsoluteExpiryAndTtlFields() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -592,12 +605,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageWithJMS_AMQP_TTLSetPositive() throws Exception {
         sendingMessageWithJMS_AMQP_TTLSetTestImpl(100_000, 20_000);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageWithJMS_AMQP_TTLSetZero() throws Exception {
         sendingMessageWithJMS_AMQP_TTLSetTestImpl(50_000, 0);
     }
@@ -657,7 +672,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDefaultPriorityProducesMessagesWithoutPriorityField() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -698,7 +714,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testNonDefaultPriorityProducesMessagesWithPriorityFieldAndSetsJMSPriority() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -741,7 +758,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageSetsJMSMessageID() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -767,13 +785,13 @@
 
             Message message = session.createTextMessage(text);
 
-            assertNull("JMSMessageID should not yet be set", message.getJMSMessageID());
+            assertNull(message.getJMSMessageID(), "JMSMessageID should not yet be set");
 
             producer.send(message);
 
             String jmsMessageID = message.getJMSMessageID();
-            assertNotNull("JMSMessageID should be set", jmsMessageID);
-            assertTrue("JMS 'ID:' prefix not found", jmsMessageID.startsWith("ID:"));
+            assertNotNull(jmsMessageID, "JMSMessageID should be set");
+            assertTrue(jmsMessageID.startsWith("ID:"), "JMS 'ID:' prefix not found");
 
             connection.close();
 
@@ -781,12 +799,13 @@
             testPeer.waitForAllHandlersToComplete(1000);
             Object receivedMessageId = propsMatcher.getReceivedMessageId();
 
-            assertTrue("Expected string message id to be sent", receivedMessageId instanceof String);
-            assertTrue("Expected JMSMessageId value to be present in AMQP message", jmsMessageID.equals(receivedMessageId));
+            assertTrue(receivedMessageId instanceof String, "Expected string message id to be sent");
+            assertTrue(jmsMessageID.equals(receivedMessageId), "Expected JMSMessageId value to be present in AMQP message");
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageWithUUIDStringMessageIdFormat() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // DONT create a test fixture, we will drive everything directly.
@@ -819,15 +838,15 @@
 
             Message message = session.createTextMessage(text);
 
-            assertNull("JMSMessageID should not yet be set", message.getJMSMessageID());
+            assertNull(message.getJMSMessageID(), "JMSMessageID should not yet be set");
 
             producer.send(message);
 
             String jmsMessageID = message.getJMSMessageID();
-            assertNotNull("JMSMessageID should be set", jmsMessageID);
-            assertTrue("JMS 'ID:' prefix not found", jmsMessageID.startsWith("ID:"));
+            assertNotNull(jmsMessageID, "JMSMessageID should be set");
+            assertTrue(jmsMessageID.startsWith("ID:"), "JMS 'ID:' prefix not found");
             String noIdPrefix = AmqpMessageIdHelper.JMS_ID_PREFIX + AmqpMessageIdHelper.AMQP_NO_PREFIX;
-            assertTrue("The 'No ID prefix' encoding hint was not found", jmsMessageID.startsWith(noIdPrefix));
+            assertTrue(jmsMessageID.startsWith(noIdPrefix), "The 'No ID prefix' encoding hint was not found");
 
             connection.close();
             testPeer.waitForAllHandlersToComplete(1000);
@@ -839,12 +858,13 @@
 
             String expected = jmsMessageID.substring(noIdPrefix.length());
             UUID.fromString(expected);
-            assertTrue("Expected String message id to be sent", receivedMessageId instanceof String);
-            assertEquals("Expected UUID toString value to be present in AMQP message", expected, receivedMessageId);
+            assertTrue(receivedMessageId instanceof String, "Expected String message id to be sent");
+            assertEquals(expected, receivedMessageId, "Expected UUID toString value to be present in AMQP message");
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageWithUUIDMessageIdFormat() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // DONT create a test fixture, we will drive everything directly.
@@ -877,15 +897,15 @@
 
             Message message = session.createTextMessage(text);
 
-            assertNull("JMSMessageID should not yet be set", message.getJMSMessageID());
+            assertNull(message.getJMSMessageID(), "JMSMessageID should not yet be set");
 
             producer.send(message);
 
             String jmsMessageID = message.getJMSMessageID();
-            assertNotNull("JMSMessageID should be set", jmsMessageID);
-            assertTrue("JMS 'ID:' prefix not found", jmsMessageID.startsWith("ID:"));
+            assertNotNull(jmsMessageID, "JMSMessageID should be set");
+            assertTrue(jmsMessageID.startsWith("ID:"), "JMS 'ID:' prefix not found");
             String uuidEncodingPrefix = AmqpMessageIdHelper.JMS_ID_PREFIX + AmqpMessageIdHelper.AMQP_UUID_PREFIX;
-            assertTrue("The 'UUID prefix' encoding hint was not found", jmsMessageID.startsWith(uuidEncodingPrefix));
+            assertTrue(jmsMessageID.startsWith(uuidEncodingPrefix), "The 'UUID prefix' encoding hint was not found");
 
             connection.close();
 
@@ -894,12 +914,13 @@
 
             Object receivedMessageId = propsMatcher.getReceivedMessageId();
 
-            assertTrue("Expected UUID message id to be sent", receivedMessageId instanceof UUID);
-            assertTrue("Expected JMSMessageId value to be present in AMQP message", jmsMessageID.endsWith(receivedMessageId.toString()));
+            assertTrue(receivedMessageId instanceof UUID, "Expected UUID message id to be sent");
+            assertTrue(jmsMessageID.endsWith(receivedMessageId.toString()), "Expected JMSMessageId value to be present in AMQP message");
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageWithPrefixedUUIDStringMessageIdFormat() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // DONT create a test fixture, we will drive everything directly.
@@ -932,13 +953,13 @@
 
             Message message = session.createTextMessage(text);
 
-            assertNull("JMSMessageID should not yet be set", message.getJMSMessageID());
+            assertNull(message.getJMSMessageID(), "JMSMessageID should not yet be set");
 
             producer.send(message);
 
             String jmsMessageID = message.getJMSMessageID();
-            assertNotNull("JMSMessageID should be set", jmsMessageID);
-            assertTrue("JMS 'ID:' prefix not found", jmsMessageID.startsWith("ID:"));
+            assertNotNull(jmsMessageID, "JMSMessageID should be set");
+            assertTrue(jmsMessageID.startsWith("ID:"), "JMS 'ID:' prefix not found");
 
             connection.close();
             testPeer.waitForAllHandlersToComplete(1000);
@@ -950,8 +971,8 @@
 
             String uuidToString = jmsMessageID.substring("ID:".length());
             UUID.fromString(uuidToString);
-            assertTrue("Expected String message id to be sent", receivedMessageId instanceof String);
-            assertEquals("Expected UUID toString value to be present in AMQP message", jmsMessageID, receivedMessageId);
+            assertTrue(receivedMessageId instanceof String, "Expected String message id to be sent");
+            assertEquals(jmsMessageID, receivedMessageId, "Expected UUID toString value to be present in AMQP message");
         }
     }
 
@@ -961,7 +982,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageWithDisableMessageIDHint() throws Exception {
         doSendingMessageWithDisableMessageIDHintTestImpl(false);
     }
@@ -973,7 +995,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageWithDisableMessageIDHintAndExistingMessageID() throws Exception {
         doSendingMessageWithDisableMessageIDHintTestImpl(true);
     }
@@ -1004,19 +1027,19 @@
 
             Message message = session.createTextMessage(text);
 
-            assertNull("JMSMessageID should not yet be set", message.getJMSMessageID());
+            assertNull(message.getJMSMessageID(), "JMSMessageID should not yet be set");
 
             if (existingId) {
                 // [erroneously] set a JMSMessageID value
                 String existingMessageId = "ID:this-should-be-overwritten-in-send";
                 message.setJMSMessageID(existingMessageId);
-                assertEquals("JMSMessageID should now be set", existingMessageId, message.getJMSMessageID());
+                assertEquals(existingMessageId, message.getJMSMessageID(), "JMSMessageID should now be set");
             }
 
             producer.setDisableMessageID(true);
             producer.send(message);
 
-            assertNull("JMSMessageID should be null", message.getJMSMessageID());
+            assertNull(message.getJMSMessageID(), "JMSMessageID should be null");
 
             connection.close();
 
@@ -1024,7 +1047,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseProducer() throws Exception {
         final String BREAD_CRUMB = "ErrorMessageBreadCrumb";
 
@@ -1050,7 +1074,7 @@
 
             // Verify the producer gets marked closed
             testPeer.waitForAllHandlersToComplete(1000);
-            assertTrue("producer never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -1069,9 +1093,9 @@
 
                     return false;
                 }
-            }, 10000, 10));
+            }, 10000, 10), "producer never closed.");
 
-            assertTrue("Producer closed callback didn't trigger", producerClosed.await(10, TimeUnit.SECONDS));
+            assertTrue(producerClosed.await(10, TimeUnit.SECONDS), "Producer closed callback didn't trigger");
 
             // Try closing it explicitly, should effectively no-op in client.
             // The test peer will throw during close if it sends anything.
@@ -1079,7 +1103,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseProducerDuringSyncSend() throws Exception {
         final String BREAD_CRUMB = "ErrorMessageBreadCrumb";
 
@@ -1118,8 +1143,8 @@
                 fail("Expected exception to be thrown");
             } catch (JMSException jmse) {
                 // Expected
-                assertNotNull("Expected exception to have a message", jmse.getMessage());
-                assertTrue("Expected breadcrumb to be present in message", jmse.getMessage().contains(BREAD_CRUMB));
+                assertNotNull(jmse.getMessage(), "Expected exception to have a message");
+                assertTrue(jmse.getMessage().contains(BREAD_CRUMB), "Expected breadcrumb to be present in message");
             }
 
             connection.close();
@@ -1128,8 +1153,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseProducerWithSendWaitingForCredit() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1164,7 +1189,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndProducerCompletesAsyncSends() throws Exception {
         final String BREAD_CRUMB = "ErrorMessage";
 
@@ -1213,7 +1239,7 @@
             assertEquals(MSG_COUNT, listener.errorCount);
 
             // Verify the producer gets marked closed
-            assertTrue("Producer closed callback didn't trigger", producerClosed.await(5, TimeUnit.SECONDS));
+            assertTrue(producerClosed.await(5, TimeUnit.SECONDS), "Producer closed callback didn't trigger");
             try {
                 producer.getDeliveryMode();
                 fail("Expected ISE to be thrown due to being closed");
@@ -1234,8 +1260,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseConnectionDuringSyncSend() throws Exception {
         final String BREAD_CRUMB = "ErrorMessageBreadCrumb";
 
@@ -1273,8 +1299,8 @@
                 fail("Expected exception to be thrown");
             } catch (JMSException jmse) {
                 // Expected
-                assertNotNull("Expected exception to have a message", jmse.getMessage());
-                assertTrue("Expected breadcrumb to be present in message", jmse.getMessage().contains(BREAD_CRUMB));
+                assertNotNull(jmse.getMessage(), "Expected exception to have a message");
+                assertTrue(jmse.getMessage().contains(BREAD_CRUMB), "Expected breadcrumb to be present in message");
             }
 
             testPeer.waitForAllHandlersToComplete(3000);
@@ -1283,8 +1309,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseConnectionAndDropDuringSyncSend() throws Exception {
         final String BREAD_CRUMB = "ErrorMessageBreadCrumb";
 
@@ -1323,8 +1349,8 @@
                 fail("Expected exception to be thrown");
             } catch (JMSException jmse) {
                 // Expected
-                assertNotNull("Expected exception to have a message", jmse.getMessage());
-                assertTrue("Expected breadcrumb to be present in message", jmse.getMessage().contains(BREAD_CRUMB));
+                assertNotNull(jmse.getMessage(), "Expected exception to have a message");
+                assertTrue(jmse.getMessage().contains(BREAD_CRUMB), "Expected breadcrumb to be present in message");
             }
 
             testPeer.waitForAllHandlersToComplete(3000);
@@ -1333,7 +1359,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendWhenLinkCreditIsDelayed() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer, "?amqp.traceFrames=true&amqp.traceBytes=true");
@@ -1362,7 +1389,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendWhenLinkCreditIsZeroAndTimeout() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -1398,7 +1426,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendTimesOutWhenNoDispostionArrives() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -1437,7 +1466,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionGetsTimedOutErrorWhenNoDispostionArrives() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -1469,7 +1499,7 @@
                 fail("Send should not fail for async.");
             }
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNotNull(listener.exception);
             assertTrue(listener.exception instanceof JmsSendTimedOutException);
             assertNotNull(listener.message);
@@ -1480,17 +1510,20 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSyncSendMessageRejected() throws Exception {
         doSyncSendMessageNotAcceptedTestImpl(new Rejected());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSyncSendMessageReleased() throws Exception {
         doSyncSendMessageNotAcceptedTestImpl(new Released());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSyncSendMessageModifiedDeliveryFailed() throws Exception {
         Modified modified = new Modified();
         modified.setDeliveryFailed(true);
@@ -1498,7 +1531,8 @@
         doSyncSendMessageNotAcceptedTestImpl(modified);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSyncSendMessageModifiedUndeliverable() throws Exception {
         Modified modified = new Modified();
         modified.setUndeliverableHere(true);
@@ -1506,7 +1540,8 @@
         doSyncSendMessageNotAcceptedTestImpl(modified);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSyncSendMessageModifiedDeliveryFailedUndeliverable() throws Exception {
         Modified modified = new Modified();
         modified.setDeliveryFailed(true);
@@ -1529,7 +1564,7 @@
             testPeer.expectTransfer(new TransferPayloadCompositeMatcher(), nullValue(), responseState, true);
             testPeer.expectClose();
 
-            assertNull("Should not yet have a JMSDestination", message.getJMSDestination());
+            assertNull(message.getJMSDestination(), "Should not yet have a JMSDestination");
 
             try {
                 producer.send(message);
@@ -1545,17 +1580,20 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendMessageRejected() throws Exception {
         doAsyncSendMessageNotAcceptedTestImpl(new Rejected());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendMessageReleased() throws Exception {
         doAsyncSendMessageNotAcceptedTestImpl(new Released());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendMessageModifiedDeliveryFailed() throws Exception {
         Modified modified = new Modified();
         modified.setDeliveryFailed(true);
@@ -1563,7 +1601,8 @@
         doAsyncSendMessageNotAcceptedTestImpl(modified);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendMessageModifiedUndeliverable() throws Exception {
         Modified modified = new Modified();
         modified.setUndeliverableHere(true);
@@ -1571,7 +1610,8 @@
         doAsyncSendMessageNotAcceptedTestImpl(modified);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendMessageModifiedDeliveryFailedUndeliverable() throws Exception {
         Modified modified = new Modified();
         modified.setDeliveryFailed(true);
@@ -1613,7 +1653,7 @@
 
             testPeer.expectTransfer(new TransferPayloadCompositeMatcher(), nullValue(), responseState, true);
 
-            assertNull("Should not yet have a JMSDestination", message.getJMSDestination());
+            assertNull(message.getJMSDestination(), "Should not yet have a JMSDestination");
 
             try {
                 producer.send(message);
@@ -1622,7 +1662,7 @@
                 fail("No expected exception for this send.");
             }
 
-            assertTrue("Should get a non-fatal error", asyncError.await(10, TimeUnit.SECONDS));
+            assertTrue(asyncError.await(10, TimeUnit.SECONDS), "Should get a non-fatal error");
 
             testPeer.expectTransfer(new TransferPayloadCompositeMatcher());
             testPeer.expectClose();
@@ -1640,7 +1680,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendWorksWhenConnectionNotStarted() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1669,7 +1710,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendWorksAfterConnectionStopped() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1704,7 +1746,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreditDrainedAfterSend() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -1748,7 +1791,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUserIdSetWhenConfiguredForInclusion() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1792,7 +1836,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUserIdNotSetWhenNotConfiguredForInclusion() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1835,7 +1880,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUserIdNotSpoofedWhenConfiguredForInclusion() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1882,7 +1928,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUserIdNotSpoofedWhenNotConfiguredForInclusion() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1954,7 +2001,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUserIdNotSpoofedWhenConfiguredForInclusionWithForgeinMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -2001,7 +2049,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUserIdNotSpoofedWhenNotConfiguredForInclusionWithForeignMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -2045,7 +2094,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendFailsWhenDelayedDeliveryIsNotSupported() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -2086,7 +2136,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendWorksWhenDelayedDeliveryIsSupported() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -2128,9 +2179,9 @@
 
             // Create a message, [erroneously] set a JMSDeliveryTime value, expect it to be overwritten
             Message message = session.createMessage();
-            assertEquals("JMSDeliveryTime should not yet be set", 0, message.getJMSDeliveryTime());
+            assertEquals(0, message.getJMSDeliveryTime(), "JMSDeliveryTime should not yet be set");
             message.setJMSDeliveryTime(1234);
-            assertEquals("JMSDeliveryTime should now (erroneously) be set", 1234, message.getJMSDeliveryTime());
+            assertEquals(1234, message.getJMSDeliveryTime(), "JMSDeliveryTime should now (erroneously) be set");
 
             MessageProducer producer = session.createProducer(dest);
             producer.setDeliveryDelay(deliveryDelay);
@@ -2141,7 +2192,7 @@
             testPeer.waitForAllHandlersToComplete(3000);
 
             // Now verify the local message also has the deliveryTime set as expected
-            MatcherAssert.assertThat("JMSDeliveryTime should now be set in expected range", message.getJMSDeliveryTime(), inRange);
+            assertThat("JMSDeliveryTime should now be set in expected range", message.getJMSDeliveryTime(), inRange);
 
             testPeer.expectClose();
             connection.close();
@@ -2150,7 +2201,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendWorksWhenDelayedDeliveryIsSupportedOnlyLinkCapability() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -2192,7 +2244,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionAfterSendMessageGetDispoation() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -2214,7 +2267,7 @@
 
             producer.send(message, listener);
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
@@ -2225,7 +2278,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionGetsNotifiedWhenProducerClosed() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -2253,7 +2307,7 @@
             producer.send(message, listener);
             producer.close();
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNotNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
@@ -2264,7 +2318,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionGetsNotifiedWhenSessionClosed() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -2290,7 +2345,7 @@
 
             session.close();
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNotNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
@@ -2301,7 +2356,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionGetsNotifiedWhenConnectionClosed() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -2326,7 +2382,7 @@
 
             connection.close();
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNotNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
@@ -2335,7 +2391,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionResetsBytesMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -2359,7 +2416,7 @@
 
             producer.send(message, listener);
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof BytesMessage);
@@ -2375,17 +2432,20 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMessageRejected() throws Exception {
         doAsyncCompletionSendMessageNotAcceptedTestImpl(new Rejected());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMessageReleased() throws Exception {
         doAsyncCompletionSendMessageNotAcceptedTestImpl(new Released());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMessageModifiedDeliveryFailed() throws Exception {
         Modified modified = new Modified();
         modified.setDeliveryFailed(true);
@@ -2393,7 +2453,8 @@
         doAsyncCompletionSendMessageNotAcceptedTestImpl(modified);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMessageModifiedUndeliverable() throws Exception {
         Modified modified = new Modified();
         modified.setUndeliverableHere(true);
@@ -2401,7 +2462,8 @@
         doAsyncCompletionSendMessageNotAcceptedTestImpl(modified);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMessageModifiedDeliveryFailedUndeliverable() throws Exception {
         Modified modified = new Modified();
         modified.setDeliveryFailed(true);
@@ -2443,7 +2505,7 @@
 
             testPeer.expectTransfer(new TransferPayloadCompositeMatcher(), nullValue(), responseState, true);
 
-            assertNull("Should not yet have a JMSDestination", message.getJMSDestination());
+            assertNull(message.getJMSDestination(), "Should not yet have a JMSDestination");
 
             TestJmsCompletionListener listener = new TestJmsCompletionListener();
             try {
@@ -2453,7 +2515,7 @@
                 fail("No expected exception for this send.");
             }
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNotNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
@@ -2469,7 +2531,7 @@
                 fail("No expected exception for this send.");
             }
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
@@ -2480,7 +2542,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSessionCloseThrowsIllegalStateException() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -2515,7 +2578,7 @@
 
             producer.send(message, listener);
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
@@ -2528,7 +2591,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionConnectionCloseThrowsIllegalStateException() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final Connection connection = testFixture.establishConnecton(testPeer);
@@ -2564,7 +2628,7 @@
 
             producer.send(message, listener);
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNull(listener.exception);
             assertNotNull(listener.message);
             assertNotNull(closeError.get());
@@ -2576,7 +2640,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSessionCommitThrowsIllegalStateException() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final Connection connection = testFixture.establishConnecton(testPeer);
@@ -2635,7 +2700,7 @@
 
             producer.send(message, listener);
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNull(listener.exception);
             assertNotNull(listener.message);
             assertNotNull(commitError.get());
@@ -2647,7 +2712,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSessionRollbackThrowsIllegalStateException() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final Connection connection = testFixture.establishConnecton(testPeer);
@@ -2706,7 +2772,7 @@
 
             producer.send(message, listener);
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNull(listener.exception);
             assertNotNull(listener.message);
             assertNotNull(rollback.get());
@@ -2718,12 +2784,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageSetsJMSDeliveryTimeWithDelay() throws Exception {
         doSendingMessageSetsJMSDeliveryTimeTestImpl(true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendingMessageSetsJMSDeliveryTimeWithoutDelay() throws Exception {
         doSendingMessageSetsJMSDeliveryTimeTestImpl(false);
     }
@@ -2776,15 +2844,16 @@
             testPeer.waitForAllHandlersToComplete(1000);
 
             if (!deliveryDelay) {
-                assertFalse("Message should not have delivery time annotation",
-                        msgAnnotationsMatcher.keyExistsInReceivedAnnotations(DELIVERY_TIME));
+                assertFalse(msgAnnotationsMatcher.keyExistsInReceivedAnnotations(DELIVERY_TIME),
+                        "Message should not have delivery time annotation");
             }
 
             assertThat(message.getJMSDeliveryTime(), inRange);
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseOneProducerDoesNotCompleteAsyncSendFromAnotherProducer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -2812,7 +2881,7 @@
             // will use to send a message.
             testPeer.remotelyDetachLastOpenedLinkOnLastOpenedSession(true, true);
 
-            assertNull("Should not yet have a JMSDestination", message.getJMSDestination());
+            assertNull(message.getJMSDestination(), "Should not yet have a JMSDestination");
 
             TestJmsCompletionListener listener = new TestJmsCompletionListener();
             try {
@@ -2824,21 +2893,21 @@
 
             testPeer.waitForAllHandlersToComplete(2000);
 
-            assertFalse("Should not get async callback", listener.awaitCompletion(10, TimeUnit.MILLISECONDS));
+            assertFalse(listener.awaitCompletion(10, TimeUnit.MILLISECONDS), "Should not get async callback");
 
             // Closing the session should complete the send with an exception
             testPeer.expectEnd();
             session.close();
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
             assertNotNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
 
             // Message should be readable
-            assertNotNull("Should have a readable JMSDestination", message.getJMSDestination());
-            assertEquals("Message body not as expected", "content", ((TextMessage) message).getText());
-            assertEquals("Message property not as expected", 1, message.getIntProperty("test"));
+            assertNotNull(message.getJMSDestination(), "Should have a readable JMSDestination");
+            assertEquals("content", ((TextMessage) message).getText(), "Message body not as expected");
+            assertEquals(1, message.getIntProperty("test"), "Message property not as expected");
 
             testPeer.expectClose();
             connection.close();
@@ -2847,7 +2916,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseProducerAndAttemptAsyncCompletionSendThrowsAndLeavesMessageReadable() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -2872,12 +2942,12 @@
             Message message = session.createTextMessage("content");
             message.setIntProperty("test", 1);
 
-            assertNull("Should not yet have a JMSDestination", message.getJMSDestination());
+            assertNull(message.getJMSDestination(), "Should not yet have a JMSDestination");
 
             MessageProducer producer = session.createProducer(queue);
             testPeer.waitForAllHandlersToComplete(2000);
 
-            assertTrue("Producer should have been closed", producerClosed.await(2, TimeUnit.SECONDS));
+            assertTrue(producerClosed.await(2, TimeUnit.SECONDS), "Producer should have been closed");
 
             TestJmsCompletionListener listener = new TestJmsCompletionListener();
             try {
@@ -2887,12 +2957,12 @@
                 LOG.trace("Caught expected exception: {}", e.getMessage());
             }
 
-            assertFalse("Should not get async callback", listener.awaitCompletion(5, TimeUnit.MILLISECONDS));
+            assertFalse(listener.awaitCompletion(5, TimeUnit.MILLISECONDS), "Should not get async callback");
 
             // Message should be readable but not carry a destination as it wasn't actually sent anywhere
-            assertNull("Should not have a readable JMSDestination", message.getJMSDestination());
-            assertEquals("Message body not as expected", "content", ((TextMessage) message).getText());
-            assertEquals("Message property not as expected", 1, message.getIntProperty("test"));
+            assertNull(message.getJMSDestination(), "Should not have a readable JMSDestination");
+            assertEquals("content", ((TextMessage) message).getText(), "Message body not as expected");
+            assertEquals(1, message.getIntProperty("test"), "Message property not as expected");
 
             testPeer.expectClose();
             connection.close();
@@ -2901,7 +2971,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseSessionAndAttemptAsyncCompletionSendThrowsAndLeavesMessageReadable() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -2926,12 +2997,12 @@
             Message message = session.createTextMessage("content");
             message.setIntProperty("test", 1);
 
-            assertNull("Should not yet have a JMSDestination", message.getJMSDestination());
+            assertNull(message.getJMSDestination(), "Should not yet have a JMSDestination");
 
             MessageProducer producer = session.createProducer(queue);
             testPeer.waitForAllHandlersToComplete(2000);
 
-            assertTrue("Session should have been closed", sessionClosed.await(2, TimeUnit.SECONDS));
+            assertTrue(sessionClosed.await(2, TimeUnit.SECONDS), "Session should have been closed");
 
             TestJmsCompletionListener listener = new TestJmsCompletionListener();
             try {
@@ -2941,12 +3012,12 @@
                 LOG.trace("Caught expected exception: {}", e.getMessage());
             }
 
-            assertFalse("Should not get async callback", listener.awaitCompletion(5, TimeUnit.MILLISECONDS));
+            assertFalse(listener.awaitCompletion(5, TimeUnit.MILLISECONDS), "Should not get async callback");
 
             // Message should be readable but not carry a destination as it wasn't actually sent anywhere
-            assertNull("Should not have a readable JMSDestination", message.getJMSDestination());
-            assertEquals("Message body not as expected", "content", ((TextMessage) message).getText());
-            assertEquals("Message property not as expected", 1, message.getIntProperty("test"));
+            assertNull(message.getJMSDestination(), "Should not have a readable JMSDestination");
+            assertEquals("content", ((TextMessage) message).getText(), "Message body not as expected");
+            assertEquals(1, message.getIntProperty("test"), "Message property not as expected");
 
             testPeer.expectClose();
             connection.close();
@@ -2998,7 +3069,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailedSendToOfflineConnectionMessageCanBeResentToNewConnection() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -3027,7 +3099,7 @@
             // initial producer which will be sent to after connection fails
             MessageProducer producer = session.createProducer(queue);
 
-            assertTrue("Connection should have been remotely closed", connectionFailed.await(10, TimeUnit.SECONDS));
+            assertTrue(connectionFailed.await(10, TimeUnit.SECONDS), "Connection should have been remotely closed");
 
             try {
                 producer.send(message);
@@ -3056,7 +3128,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendTimeoutDoesNotRecycleDeliveryTag() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -3106,8 +3179,8 @@
      *
      * @throws Exception
      */
-    @Repeat(repetitions = 1)
-    @Test(timeout = 35000)
+    @Test
+    @Timeout(35)
     public void testSendToRemotelyClosedProducerFailsIfSendAfterDetached() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -3154,7 +3227,7 @@
             });
 
             executor.shutdown();
-            assertTrue("send + close didnt complete in given time", executor.awaitTermination(20, TimeUnit.SECONDS));
+            assertTrue(executor.awaitTermination(20, TimeUnit.SECONDS), "send + close didnt complete in given time");
 
             session.close();
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProxyIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProxyIntegrationTest.java
index eaad151..e072da4 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProxyIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProxyIntegrationTest.java
@@ -19,10 +19,10 @@
 package org.apache.qpid.jms.integration;
 
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.net.InetSocketAddress;
 import java.net.Socket;
@@ -54,11 +54,9 @@
 import org.apache.qpid.jms.transports.TransportOptions;
 import org.apache.qpid.jms.transports.TransportSupport;
 import org.apache.qpid.jms.transports.netty.NettySimpleAmqpServer;
-import org.apache.qpid.jms.util.QpidJMSTestRunner;
-import org.apache.qpid.jms.util.Repeat;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -66,14 +64,14 @@
 import io.netty.handler.proxy.ProxyHandler;
 import io.netty.handler.proxy.Socks5ProxyHandler;
 
-@RunWith(QpidJMSTestRunner.class)
 public class ProxyIntegrationTest extends QpidJmsTestCase {
     private static final Logger LOG = LoggerFactory.getLogger(ProxyIntegrationTest.class);
     private static final String BROKER_PKCS12_KEYSTORE = "src/test/resources/broker-pkcs12.keystore";
     private static final String CLIENT_JKS_TRUSTSTORE = "src/test/resources/client-jks.truststore";
     private static final String PASSWORD = "password";
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionViaSocksProxy() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();
              TestProxy testProxy = new TestProxy(ProxyType.SOCKS5)) {
@@ -91,11 +89,12 @@
             connection.close();
 
             assertEquals(1, testProxy.getSuccessCount());
-            assertEquals("Unexpected handler supplier usage count", 1, supplierUsageCount.get());
+            assertEquals(1, supplierUsageCount.get(), "Unexpected handler supplier usage count");
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateSecureConnectionViaSocksProxy() throws Exception {
         TransportOptions sslOptions = new TransportOptions();
         sslOptions.setKeyStoreLocation(BROKER_PKCS12_KEYSTORE);
@@ -124,12 +123,12 @@
             connection.close();
 
             assertEquals(1, testProxy.getSuccessCount());
-            assertEquals("Unexpected handler supplier usage count", 1, supplierUsageCount.get());
+            assertEquals(1, supplierUsageCount.get(), "Unexpected handler supplier usage count");
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCreateConsumerAfterConnectionDropsViaSocksProxy() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();
@@ -182,8 +181,8 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
-            assertEquals("Unexpected handler supplier usage count", 1, supplierUsageCount.get());
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
+            assertEquals(1, supplierUsageCount.get(), "Unexpected handler supplier usage count");
 
             // --- Post Failover Expectations of FinalPeer --- //
 
@@ -204,7 +203,7 @@
             assertNull(consumer.receive(500));
             LOG.info("Receive returned");
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             LOG.info("Closing consumer");
             consumer.close();
@@ -216,16 +215,18 @@
 
             // connection to originalPeer and finalPeer
             assertEquals(2, testProxy.getSuccessCount());
-            assertEquals("Unexpected handler supplier usage count", 2, supplierUsageCount.get());
+            assertEquals(2, supplierUsageCount.get(), "Unexpected handler supplier usage count");
         }
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateWebSocketConnectionViaHttpProxyAndStart() throws Exception {
         doTestCreateWebSocketConnectionViaHttpProxyAndStart(false);
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateSecureWebSocketConnectionViaHttpProxyAndStart() throws Exception {
         doTestCreateWebSocketConnectionViaHttpProxyAndStart(true);
     }
@@ -274,16 +275,18 @@
             connection.close();
 
             assertEquals(1, testProxy.getSuccessCount());
-            assertTrue("Client did not connect to test server through the proxy.", connectedThroughProxy.get());
+            assertTrue(connectedThroughProxy.get(), "Client did not connect to test server through the proxy.");
         }
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateWebSocketConnectionViaSocksProxyAndStart() throws Exception {
         doTestCreateWebSocketConnectionViaSocksProxyAndStart(false);
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateSecureWebSocketConnectionViaSocksProxyAndStart() throws Exception {
         doTestCreateWebSocketConnectionViaSocksProxyAndStart(true);
     }
@@ -332,7 +335,7 @@
             connection.close();
 
             assertEquals(1, testProxy.getSuccessCount());
-            assertTrue("Client did not connect to test server through the proxy.", connectedThroughProxy.get());
+            assertTrue(connectedThroughProxy.get(), "Client did not connect to test server through the proxy.");
         }
     }
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/QueueBrowserIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/QueueBrowserIntegrationTest.java
index 6cc90a3..0b079cb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/QueueBrowserIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/QueueBrowserIntegrationTest.java
@@ -18,10 +18,10 @@
 
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.util.Enumeration;
@@ -45,7 +45,8 @@
 import org.apache.qpid.proton.amqp.DescribedType;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 import org.hamcrest.Matchers;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class QueueBrowserIntegrationTest extends QpidJmsTestCase {
 
@@ -53,7 +54,8 @@
 
     //----- Test basic create and destroy mechanisms -------------------------//
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateQueueBrowserWithoutEnumeration() throws IOException, Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -77,7 +79,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateQueueBrowserAndEnumeration() throws IOException, Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -108,7 +111,8 @@
 
     //----- Tests for expected behaviors of a QueueBrowser implementation ----//
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testQueueBrowserNextElementWithNoMessage() throws IOException, Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -148,7 +152,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testQueueBrowserPrefetchOne() throws IOException, Exception {
         final DescribedType amqpValueNullContent = new AmqpValueDescribedType(null);
 
@@ -188,7 +193,8 @@
 
     //----- Tests that cover QueueBrowser and Session Ack mode interaction ---//
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateQueueBrowserAutoAckSession() throws IOException, Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -226,7 +232,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateQueueBrowserClientAckSession() throws IOException, Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -267,7 +274,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateQueueBrowserTransactedSession() throws IOException, Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -315,7 +323,8 @@
 
     //----- Tests that cover QueueBrowser when prefetch is zero --------------//
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateQueueBrowserAndEnumerationZeroPrefetch() throws IOException, Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer, "?jms.prefetchPolicy.all=0");
@@ -343,7 +352,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testQueueBrowserHasMoreElementsZeroPrefetchNoMessage() throws IOException, Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer, "?jms.prefetchPolicy.all=0");
@@ -373,7 +383,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testQueueBrowserHasMoreElementsZeroPrefetchDrainedMessage() throws IOException, Exception {
         DescribedType amqpValueNullContent = new AmqpValueDescribedType(null);
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslGssApiIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslGssApiIntegrationTest.java
index 01180be..6c94891 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslGssApiIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslGssApiIntegrationTest.java
@@ -20,9 +20,9 @@
  */
 package org.apache.qpid.jms.integration;
 
-import static junit.framework.TestCase.assertTrue;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -52,11 +52,13 @@
 import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.jms.test.testpeer.TestAmqpPeer;
 import org.apache.qpid.proton.amqp.Symbol;
-import org.junit.AfterClass;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -80,7 +82,7 @@
     private static MiniKdc kdc;
     private static final boolean DEBUG = false;
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpKerberos() throws Exception {
         servicePrincipal = prepareServiceName();
         LOG.info("Using service principal: " + servicePrincipal);
@@ -145,31 +147,33 @@
         return "amqp/localhost";
     }
 
-    @AfterClass
+    @AfterAll
     public static void cleanUpKerberos() {
         if (kdc != null) {
            kdc.stop();
         }
     }
 
-    @Before
+    @BeforeEach
     @Override
-    public void setUp() throws Exception {
-        super.setUp();
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
-        Assume.assumeFalse(System.getProperty("java.vendor").contains("IBM"));
+        Assumptions.assumeFalse(System.getProperty("java.vendor").contains("IBM"));
 
         // NOTE: we may need to isolate this test later if we use login.config in others
         setTestSystemProperty("java.security.auth.login.config",
                 SaslGssApiIntegrationTest.class.getClassLoader().getResource(LOGIN_CONFIG).getPath());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslGssApiKrbConnection() throws Exception {
         doSaslGssApiKrbConnectionTestImpl("KRB5-CLIENT", CLIENT_PRINCIPAL_LOGIN_CONFIG + "@EXAMPLE.COM");
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslGssApiKrbConnectionWithDefaultScope() throws Exception {
         doSaslGssApiKrbConnectionTestImpl(null, CLIENT_PRINCIPAL_DEFAULT_CONFIG_SCOPE + "@EXAMPLE.COM");
     }
@@ -200,7 +204,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslGssApiKrbConnectionWithPrincipalViaJmsUsernameUri() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             testPeer.expectSaslGSSAPI(servicePrincipal, KRB5_KEYTAB, CLIENT_PRINCIPAL_URI_USERNAME + "@EXAMPLE.COM");
@@ -228,7 +233,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslGssApiKrbConnectionWithPrincipalViaJmsUsernameConnFactory() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             testPeer.expectSaslGSSAPI(servicePrincipal, KRB5_KEYTAB, CLIENT_PRINCIPAL_FACTORY_USERNAME + "@EXAMPLE.COM");
@@ -254,7 +260,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslGssApiKrbConfigError() throws Exception {
         final String loginConfigScope = "KRB5-CLIENT-DOES-NOT-EXIST";
 
@@ -271,7 +278,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testGssapiOnlySelectedWhenPresentIfExplicitlyEnabled() throws Exception {
         doMechanismSelectedTestImpl("username", "password", PLAIN, new Symbol[] {Symbol.valueOf(GSSAPI), PLAIN, ANONYMOUS}, false);
         doMechanismSelectedTestImpl("username", "password", Symbol.valueOf(GSSAPI), new Symbol[] {Symbol.valueOf(GSSAPI), PLAIN, ANONYMOUS}, true);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java
index 33fe54d..4ca9441 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java
@@ -20,11 +20,11 @@
  */
 package org.apache.qpid.jms.integration;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.URI;
 import java.net.URLDecoder;
@@ -48,7 +48,8 @@
 import org.apache.qpid.jms.transports.TransportSupport;
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.UnsignedByte;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -76,7 +77,8 @@
     private static final String CLIENT_JKS_TRUSTSTORE = "src/test/resources/client-jks.truststore";
     private static final String PASSWORD = "password";
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslExternalConnection() throws Exception {
         TransportOptions sslOptions = new TransportOptions();
         sslOptions.setKeyStoreLocation(BROKER_PKCS12_KEYSTORE);
@@ -113,7 +115,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslPlainConnection() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -140,7 +143,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslXOauth2Connection() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -167,7 +171,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslPlainConnectionWithURIEncodedCredentials() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -210,7 +215,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslAnonymousConnection() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Expect an ANOYMOUS connection
@@ -232,7 +238,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslFailureCodes() throws Exception {
         doSaslFailureCodesTestImpl(SASL_FAIL_AUTH);
         doSaslFailureCodesTestImpl(SASL_SYS);
@@ -264,42 +271,50 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testWaitForUnexpectedFramesAfterSaslFailure() throws Exception {
         doMechanismSelectedTestImpl(null, null, ANONYMOUS, new Symbol[] {ANONYMOUS}, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAnonymousSelectedWhenNoCredentialsWereSupplied() throws Exception {
         doMechanismSelectedTestImpl(null, null, ANONYMOUS, new Symbol[] {CRAM_MD5, PLAIN, ANONYMOUS}, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAnonymousSelectedWhenNoPasswordWasSupplied() throws Exception {
         doMechanismSelectedTestImpl("username", null, ANONYMOUS, new Symbol[] {CRAM_MD5, PLAIN, ANONYMOUS}, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCramMd5SelectedWhenCredentialsPresent() throws Exception {
         doMechanismSelectedTestImpl("username", "password", CRAM_MD5, new Symbol[] {CRAM_MD5, PLAIN, ANONYMOUS}, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testScramSha1SelectedWhenCredentialsPresent() throws Exception {
         doMechanismSelectedTestImpl("username", "password", SCRAM_SHA_1, new Symbol[] {SCRAM_SHA_1, CRAM_MD5, PLAIN, ANONYMOUS}, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testScramSha256SelectedWhenCredentialsPresent() throws Exception {
         doMechanismSelectedTestImpl("username", "password", SCRAM_SHA_256, new Symbol[] {SCRAM_SHA_256, SCRAM_SHA_1, CRAM_MD5, PLAIN, ANONYMOUS}, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testScramSha512SelectedWhenCredentialsPresent() throws Exception {
         doMechanismSelectedTestImpl("username", "password", SCRAM_SHA_512, new Symbol[] {SCRAM_SHA_512, SCRAM_SHA_256, SCRAM_SHA_1, CRAM_MD5, PLAIN, ANONYMOUS}, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testXoauth2SelectedWhenCredentialsPresent() throws Exception {
         String token = Base64.getEncoder().encodeToString("token".getBytes(StandardCharsets.US_ASCII));
         doMechanismSelectedTestImpl("username", token, XOAUTH2, new Symbol[] {XOAUTH2, ANONYMOUS}, false);
@@ -330,12 +345,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testExternalSelectedWhenLocalPrincipalPresent() throws Exception {
         doMechanismSelectedExternalTestImpl(true, EXTERNAL, new Symbol[] {EXTERNAL, SCRAM_SHA_512, SCRAM_SHA_256, SCRAM_SHA_1, CRAM_MD5, PLAIN, ANONYMOUS});
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testExternalNotSelectedWhenLocalPrincipalMissing() throws Exception {
         doMechanismSelectedExternalTestImpl(false, ANONYMOUS, new Symbol[] {EXTERNAL, SCRAM_SHA_512, SCRAM_SHA_256, SCRAM_SHA_1, CRAM_MD5, PLAIN, ANONYMOUS});
     }
@@ -375,7 +392,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSaslLayerDisabledConnection() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Expect a connection with no SASL layer.
@@ -396,7 +414,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRestrictSaslMechanismsWithSingleMech() throws Exception {
         // Check PLAIN gets picked when we don't specify a restriction
         doMechanismSelectionRestrictedTestImpl("username", "password", PLAIN, new Symbol[] { PLAIN, ANONYMOUS}, null);
@@ -405,7 +424,8 @@
         doMechanismSelectionRestrictedTestImpl("username", "password", ANONYMOUS, new Symbol[] { PLAIN, ANONYMOUS}, "ANONYMOUS");
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRestrictSaslMechanismsWithMultipleMechs() throws Exception {
         // Check CRAM-MD5 gets picked when we dont specify a restriction
         doMechanismSelectionRestrictedTestImpl("username", "password", CRAM_MD5, new Symbol[] {CRAM_MD5, PLAIN, ANONYMOUS}, null);
@@ -414,7 +434,8 @@
         doMechanismSelectionRestrictedTestImpl("username", "password", PLAIN, new Symbol[] { CRAM_MD5, PLAIN, ANONYMOUS}, "PLAIN,ANONYMOUS");
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRestrictSaslMechanismsWithMultipleMechsNoPassword() throws Exception {
         // Check ANONYMOUS gets picked when we specify a restriction with multiple mechs but don't give a password
         doMechanismSelectionRestrictedTestImpl("username", null, ANONYMOUS, new Symbol[] { CRAM_MD5, PLAIN, ANONYMOUS}, "PLAIN,ANONYMOUS");
@@ -445,12 +466,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testMechanismNegotiationFailsToFindMatch() throws Exception {
         doMechanismNegotiationFailsToFindMatchTestImpl(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testMechanismNegotiationFailsToFindMatchWithJmsContext() throws Exception {
         doMechanismNegotiationFailsToFindMatchTestImpl(true);
     }
@@ -472,8 +495,8 @@
                     fail("Excepted exception to be thrown");
                 } catch (JMSSecurityRuntimeException jmssre) {
                     // Expected, we deliberately failed the mechanism negotiation process.
-                    assertNotNull("Expected an exception message", jmssre.getMessage());
-                    assertEquals("Unexpected message details", jmssre.getMessage(), failureMessageBreadcrumb);
+                    assertNotNull(jmssre.getMessage(), "Expected an exception message");
+                    assertEquals(jmssre.getMessage(), failureMessageBreadcrumb, "Unexpected message details");
                 }
             } else {
                 try {
@@ -481,8 +504,8 @@
                     fail("Excepted exception to be thrown");
                 } catch (JMSSecurityException jmsse) {
                     // Expected, we deliberately failed the mechanism negotiation process.
-                    assertNotNull("Expected an exception message", jmsse.getMessage());
-                    assertEquals("Unexpected message details", jmsse.getMessage(), failureMessageBreadcrumb);
+                    assertNotNull(jmsse.getMessage(), "Expected an exception message");
+                    assertEquals(jmsse.getMessage(), failureMessageBreadcrumb, "Unexpected message details");
                 }
             }
 
@@ -490,7 +513,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUserOnlyExtensionsApplied() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -533,7 +557,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPasswordOnlyExtensionsApplied() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -576,7 +601,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUserAndPasswordExtensionsApplied() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
index c57379f..c8c13df 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
@@ -24,13 +24,13 @@
 import static org.hamcrest.Matchers.hasEntry;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -88,8 +88,6 @@
 import org.apache.qpid.jms.test.testpeer.matchers.sections.MessageAnnotationsSectionMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.sections.MessageHeaderSectionMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.sections.TransferPayloadCompositeMatcher;
-import org.apache.qpid.jms.util.QpidJMSTestRunner;
-import org.apache.qpid.jms.util.Repeat;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
@@ -98,12 +96,11 @@
 import org.apache.qpid.proton.amqp.messaging.Released;
 import org.hamcrest.Matcher;
 import org.hamcrest.Matchers;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@RunWith(QpidJMSTestRunner.class)
 public class SessionIntegrationTest extends QpidJmsTestCase {
 
     private static final Logger LOG = LoggerFactory.getLogger(SessionIntegrationTest.class);
@@ -112,13 +109,14 @@
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSession() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
             testPeer.expectBegin();
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-            assertNotNull("Session should not be null", session);
+            assertNotNull(session, "Session should not be null");
             testPeer.expectEnd();
             testPeer.expectClose();
 
@@ -133,7 +131,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSessionTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -144,7 +143,7 @@
             testPeer.expectClose();
 
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-            assertNotNull("Session should not be null", session);
+            assertNotNull(session, "Session should not be null");
 
             try {
                 session.close();
@@ -159,7 +158,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -179,7 +179,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerLinkSupportedSourceOutcomes() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -210,7 +211,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -233,7 +235,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerWithEmptySelector() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -264,7 +267,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerWithNullSelector() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -295,7 +299,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerWithInvalidSelector() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -320,17 +325,20 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerWithSimpleSelector() throws Exception {
         doCreateConsumerWithSelectorTestImpl("myvar=42", false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerWithQuotedVariableSelector() throws Exception {
         doCreateConsumerWithSelectorTestImpl("\"my.quoted-var\"='some-value'", false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerWithInvalidSelectorAndDisableValidation() throws Exception {
         // Verifies that with the local validation disabled, the selector filter is still created
         // and sent on the source terminus, containing the desired non-JMS selector string.
@@ -370,12 +378,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerFailsWhenLinkRefusedAndAttachResponseWriteIsNotDeferred() throws Exception {
         doCreateConsumerFailsWhenLinkRefusedTestImpl(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerFailsWhenLinkRefusedAndAttachResponseWriteIsDeferred() throws Exception {
         doCreateConsumerFailsWhenLinkRefusedTestImpl(true);
     }
@@ -416,7 +426,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerFailsWhenLinkRefusalResponseNotSent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -457,7 +468,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateBrowserFailsWhenLinkRefusalResponseNotSent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -493,22 +505,26 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTemporaryQueueFailsWhenLinkRefusedAndAttachResponseWriteIsNotDeferred() throws Exception {
         doCreateTemporaryDestinationFailsWhenLinkRefusedTestImpl(false, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTemporaryQueueFailsWhenLinkRefusedAndAttachResponseWriteIsDeferred() throws Exception {
         doCreateTemporaryDestinationFailsWhenLinkRefusedTestImpl(false, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTemporaryTopicFailsWhenLinkRefusedAndAttachResponseWriteIsNotDeferred() throws Exception {
         doCreateTemporaryDestinationFailsWhenLinkRefusedTestImpl(true, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTemporaryTopicFailsWhenLinkRefusedAndAttachResponseWriteIsDeferred() throws Exception {
         doCreateTemporaryDestinationFailsWhenLinkRefusedTestImpl(true, true);
     }
@@ -547,7 +563,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTemporaryQueue() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -560,9 +577,9 @@
             testPeer.expectTempQueueCreationAttach(dynamicAddress);
 
             TemporaryQueue tempQueue = session.createTemporaryQueue();
-            assertNotNull("TemporaryQueue object was null", tempQueue);
-            assertNotNull("TemporaryQueue queue name was null", tempQueue.getQueueName());
-            assertEquals("TemporaryQueue name not as expected", dynamicAddress, tempQueue.getQueueName());
+            assertNotNull(tempQueue, "TemporaryQueue object was null");
+            assertNotNull(tempQueue.getQueueName(), "TemporaryQueue queue name was null");
+            assertEquals(dynamicAddress, tempQueue.getQueueName(), "TemporaryQueue name not as expected");
 
             testPeer.expectClose();
             connection.close();
@@ -571,7 +588,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTemporaryQueueTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -598,7 +616,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAndDeleteTemporaryQueue() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -622,7 +641,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDeleteTemporaryQueueTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -654,7 +674,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTemporaryTopic() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -667,9 +688,9 @@
             testPeer.expectTempTopicCreationAttach(dynamicAddress);
 
             TemporaryTopic tempTopic = session.createTemporaryTopic();
-            assertNotNull("TemporaryTopic object was null", tempTopic);
-            assertNotNull("TemporaryTopic name was null", tempTopic.getTopicName());
-            assertEquals("TemporaryTopic name not as expected", dynamicAddress, tempTopic.getTopicName());
+            assertNotNull(tempTopic, "TemporaryTopic object was null");
+            assertNotNull(tempTopic.getTopicName(), "TemporaryTopic name was null");
+            assertEquals(dynamicAddress, tempTopic.getTopicName(), "TemporaryTopic name not as expected");
 
             testPeer.expectClose();
             connection.close();
@@ -678,7 +699,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateTemporaryTopicTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -705,7 +727,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAndDeleteTemporaryTopic() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -729,7 +752,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDeleteTemporaryTopicTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -761,7 +785,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendToDeletedTemporaryTopicFails() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -795,7 +820,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendToDeletedTemporaryQueueFails() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -829,7 +855,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCannotDeleteTemporaryQueueInUse() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -867,7 +894,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCannotDeleteTemporaryTopicInUse() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -905,42 +933,50 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerSourceContainsQueueCapability() throws Exception {
         doCreateConsumerSourceContainsCapabilityTestImpl(Queue.class, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerSourceContainsQueueCapabilityWithoutClientID() throws Exception {
         doCreateConsumerSourceContainsCapabilityTestImpl(Queue.class, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerSourceContainsTopicCapability() throws Exception {
         doCreateConsumerSourceContainsCapabilityTestImpl(Topic.class, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerSourceContainsTopicCapabilityWithoutClientID() throws Exception {
         doCreateConsumerSourceContainsCapabilityTestImpl(Topic.class, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerSourceContainsTempQueueCapability() throws Exception {
         doCreateConsumerSourceContainsCapabilityTestImpl(TemporaryQueue.class, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerSourceContainsTempQueueCapabilityWithoutClientID() throws Exception {
         doCreateConsumerSourceContainsCapabilityTestImpl(TemporaryQueue.class, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerSourceContainsTempTopicCapability() throws Exception {
         doCreateConsumerSourceContainsCapabilityTestImpl(TemporaryTopic.class, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerSourceContainsTempTopicCapabilityWithoutClientID() throws Exception {
         doCreateConsumerSourceContainsCapabilityTestImpl(TemporaryTopic.class, false);
     }
@@ -989,7 +1025,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConsumerNotAuthorized() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1017,7 +1054,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testProducerNotAuthorized() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1045,22 +1083,26 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerTargetContainsQueueCapability() throws Exception {
         doCreateProducerTargetContainsCapabilityTestImpl(Queue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerTargetContainsTopicCapability() throws Exception {
         doCreateProducerTargetContainsCapabilityTestImpl(Topic.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerTargetContainsTempQueueCapability() throws Exception {
         doCreateProducerTargetContainsCapabilityTestImpl(TemporaryQueue.class);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerTargetContainsTempTopicCapability() throws Exception {
         doCreateProducerTargetContainsCapabilityTestImpl(TemporaryTopic.class);
     }
@@ -1108,7 +1150,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAnonymousProducerTargetContainsNoTypeCapabilityWhenAnonymousRelayNodeIsSupported() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1132,7 +1175,7 @@
 
             //Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             testPeer.expectClose();
             connection.close();
@@ -1141,26 +1184,26 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAnonymousProducerTargetContainsQueueCapabilityWhenAnonymousRelayNodeIsNotSupported() throws Exception {
         doCreateAnonymousProducerTargetContainsCapabilityWhenAnonymousRelayNodeIsNotSupportedTestImpl(Queue.class);
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAnonymousProducerTargetContainsTopicCapabilityWhenAnonymousRelayNodeIsNotSupported() throws Exception {
         doCreateAnonymousProducerTargetContainsCapabilityWhenAnonymousRelayNodeIsNotSupportedTestImpl(Topic.class);
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAnonymousProducerTargetContainsTempQueueCapabilityWhenAnonymousRelayNodeIsNotSupported() throws Exception {
         doCreateAnonymousProducerTargetContainsCapabilityWhenAnonymousRelayNodeIsNotSupportedTestImpl(TemporaryQueue.class);
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAnonymousProducerTargetContainsTempTopicCapabilityWhenAnonymousRelayNodeIsNotSupported() throws Exception {
         doCreateAnonymousProducerTargetContainsCapabilityWhenAnonymousRelayNodeIsNotSupportedTestImpl(TemporaryQueue.class);
     }
@@ -1203,7 +1246,7 @@
 
             //Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             //Expect a new message sent by the above producer to cause creation of a new
             //sender link to the given destination, then closing the link after the message is sent.
@@ -1234,7 +1277,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateDurableTopicSubscriber() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1251,9 +1295,9 @@
             testPeer.expectLinkFlow();
 
             TopicSubscriber subscriber = session.createDurableSubscriber(dest, subscriptionName);
-            assertNotNull("TopicSubscriber object was null", subscriber);
-            assertFalse("TopicSubscriber should not be no-local", subscriber.getNoLocal());
-            assertNull("TopicSubscriber should not have a selector", subscriber.getMessageSelector());
+            assertNotNull(subscriber, "TopicSubscriber object was null");
+            assertFalse(subscriber.getNoLocal(), "TopicSubscriber should not be no-local");
+            assertNull(subscriber.getMessageSelector(), "TopicSubscriber should not have a selector");
 
             testPeer.expectClose();
             connection.close();
@@ -1262,7 +1306,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSessionWithExistingDurableTopicSubscriberDoesNotCloseSubscriberLink() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1279,7 +1324,7 @@
             testPeer.expectLinkFlow();
 
             TopicSubscriber subscriber = session.createDurableSubscriber(dest, subscriptionName);
-            assertNotNull("TopicSubscriber object was null", subscriber);
+            assertNotNull(subscriber, "TopicSubscriber object was null");
 
             testPeer.expectEnd();
             session.close();
@@ -1291,7 +1336,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateDurableConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1308,8 +1354,8 @@
             testPeer.expectLinkFlow();
 
             MessageConsumer consumer = session.createDurableConsumer(dest, subscriptionName);
-            assertNotNull("MessageConsumer object was null", consumer);
-            assertNull("MessageConsumer should not have a selector", consumer.getMessageSelector());
+            assertNotNull(consumer, "MessageConsumer object was null");
+            assertNull(consumer.getMessageSelector(), "MessageConsumer should not have a selector");
 
             testPeer.expectClose();
             connection.close();
@@ -1318,7 +1364,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDurableSubscriptionUnsubscribeInUseThrowsJMSEx() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1335,7 +1382,7 @@
             testPeer.expectLinkFlow();
 
             TopicSubscriber subscriber = session.createDurableSubscriber(dest, subscriptionName);
-            assertNotNull("TopicSubscriber object was null", subscriber);
+            assertNotNull(subscriber, "TopicSubscriber object was null");
 
             try {
                 session.unsubscribe(subscriptionName);
@@ -1354,7 +1401,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateDurableTopicSubscriberFailsIfConnectionDoesntHaveExplicitClientID() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Create a connection without an explicit clientId
@@ -1384,7 +1432,8 @@
     }
 
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAnonymousProducerWhenAnonymousRelayNodeIsSupported() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             //Add capability to indicate support for ANONYMOUS-RELAY
@@ -1409,7 +1458,7 @@
 
             //Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             //Expect a new message sent with this producer to use the link to the anonymous relay matched above
             MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true);
@@ -1435,12 +1484,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAnonymousProducerFailsWhenAnonymousRelayNodeIsSupportedButLinkRefusedAndAttachResponseWriteIsNotDeferred() throws Exception {
         doCreateAnonymousProducerFailsWhenAnonymousRelayNodeIsSupportedButLinkRefusedTestImpl(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAnonymousProducerFailsWhenAnonymousRelayNodeIsSupportedButLinkRefusedAndAttachResponseWriteIsDeferred() throws Exception {
         doCreateAnonymousProducerFailsWhenAnonymousRelayNodeIsSupportedButLinkRefusedTestImpl(true);
     }
@@ -1480,12 +1531,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerFailsWhenLinkRefusedAndAttachResponseWriteIsNotDeferred() throws Exception {
         doCreateProducerFailsWhenLinkRefusedTestImpl(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerFailsWhenLinkRefusedAndAttachResponseWriteIsDeferred() throws Exception {
         doCreateProducerFailsWhenLinkRefusedTestImpl(true);
     }
@@ -1526,7 +1579,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerFailsWhenLinkRefusedNoDetachSent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1565,7 +1619,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAnonymousProducerWhenAnonymousRelayNodeIsNotSupported() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -1588,7 +1643,7 @@
 
             // Create an anonymous producer
             MessageProducer producer = session.createProducer(null);
-            assertNotNull("Producer object was null", producer);
+            assertNotNull(producer, "Producer object was null");
 
             // Expect a new message sent by the above producer to cause creation of a new
             // sender link to the given destination, then closing the link after the message is sent.
@@ -1625,7 +1680,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testIncomingMessageExceedsMaxRedeliveries() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int COUNT = 5;
@@ -1662,9 +1718,9 @@
             final MessageConsumer consumer = session.createConsumer(queue);
 
             Message m = consumer.receive(6000);
-            assertNotNull("Should have reiceved the final message", m);
-            assertTrue("Should have received the final message", m instanceof TextMessage);
-            assertEquals("Unexpected content", expectedContent, ((TextMessage)m).getText());
+            assertNotNull(m, "Should have reiceved the final message");
+            assertTrue(m instanceof TextMessage, "Should have received the final message");
+            assertEquals(expectedContent, ((TextMessage)m).getText(), "Unexpected content");
 
             testPeer.expectClose();
             connection.close();
@@ -1673,7 +1729,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testPrefetchPolicyInfluencesCreditFlow() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int newPrefetch = 263;
@@ -1697,7 +1754,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testLocallyCloseSessionWithConsumersAndProducers() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1734,8 +1792,8 @@
         }
     }
 
-    @Test(timeout = 20000)
-    @Repeat(repetitions = 1)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndSessionWithProducers() throws Exception {
         final String BREAD_CRUMB = "ErrorMessage";
 
@@ -1767,7 +1825,7 @@
             testPeer.waitForAllHandlersToComplete(1000);
 
             // Verify the producers get marked closed
-            assertTrue("producer never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -1783,9 +1841,9 @@
                     }
                     return false;
                 }
-            }, 6000, 10));
+            }, 6000, 10), "producer never closed.");
 
-            assertTrue("producer2 never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -1801,9 +1859,9 @@
                     }
                     return false;
                 }
-            }, 6000, 10));
+            }, 6000, 10), "producer2 never closed.");
 
-            assertTrue("Session closed callback didn't trigger", sessionClosed.await(10, TimeUnit.SECONDS));
+            assertTrue(sessionClosed.await(10, TimeUnit.SECONDS), "Session closed callback didn't trigger");
 
             // Verify the session is now marked closed
             try {
@@ -1825,7 +1883,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndSessionWithProducerSendWaitingForCredit() throws Exception {
         final String BREAD_CRUMB = "ErrorMessageBreadCrumb";
 
@@ -1852,8 +1911,8 @@
                 fail("Expected exception to be thrown");
             } catch (JMSException jmse) {
                 // Expected
-                assertNotNull("Expected exception to have a message", jmse.getMessage());
-                assertTrue("Expected breadcrumb to be present in message", jmse.getMessage().contains(BREAD_CRUMB));
+                assertNotNull(jmse.getMessage(), "Expected exception to have a message");
+                assertTrue(jmse.getMessage().contains(BREAD_CRUMB), "Expected breadcrumb to be present in message");
             }
 
             connection.close();
@@ -1862,7 +1921,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndSessionWithProducerCompletesAsyncSends() throws Exception {
         final String BREAD_CRUMB = "ErrorMessage";
 
@@ -1911,7 +1971,7 @@
             assertEquals(MSG_COUNT, listener.errorCount);
             assertEquals(0, listener.successCount);
 
-            assertTrue("Session closed callback didn't trigger", sessionClosed.await(10, TimeUnit.SECONDS));
+            assertTrue(sessionClosed.await(10, TimeUnit.SECONDS), "Session closed callback didn't trigger");
 
             // Verify the session is now marked closed
             try {
@@ -1932,7 +1992,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndSessionWithConsumers() throws Exception {
         final String BREAD_CRUMB = "ErrorMessage";
 
@@ -1966,7 +2027,7 @@
 
             // Verify the consumers get marked closed
             testPeer.waitForAllHandlersToComplete(1000);
-            assertTrue("consumer never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -1982,9 +2043,9 @@
                     }
                     return false;
                 }
-            }, 6000, 10));
+            }, 6000, 10), "consumer never closed.");
 
-            assertTrue("consumer2 never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -2000,9 +2061,9 @@
                     }
                     return false;
                 }
-            }, 6000, 10));
+            }, 6000, 10), "consumer2 never closed.");
 
-            assertTrue("Session closed callback didn't trigger", sessionClosed.await(10, TimeUnit.SECONDS));
+            assertTrue(sessionClosed.await(10, TimeUnit.SECONDS), "Session closed callback didn't trigger");
 
             // Verify the session is now marked closed
             try {
@@ -2024,7 +2085,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSessionWithConsumerThatRemoteDetaches() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -2050,7 +2112,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSessionWithConsumerThatRemoteDetachesWithUnackedMessages() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -2080,12 +2143,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSessionHasExpectedDefaultOutgoingWindow() throws Exception {
         doSessionHasExpectedOutgoingWindowTestImpl(Integer.MAX_VALUE, null);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSessionHasExpectedConfiguredOutgoingWindow() throws Exception {
         int windowSize = 13579;
         doSessionHasExpectedOutgoingWindowTestImpl(windowSize, "?amqp.sessionOutgoingWindow=" + windowSize);
@@ -2098,14 +2163,15 @@
             testPeer.expectBegin(equalTo(UnsignedInteger.valueOf(value)), true);
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
-            assertNotNull("Session should not be null", session);
+            assertNotNull(session, "Session should not be null");
 
             testPeer.expectClose();
             connection.close();
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncDeliveryOrder() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -2149,8 +2215,8 @@
             consumer.setMessageListener(new DeliveryOrderListener(done, index));
 
             testPeer.waitForAllHandlersToComplete(3000);
-            assertTrue("Not all messages received in given time", done.await(10, TimeUnit.SECONDS));
-            assertEquals("Messages were not in expected order, final index was wrong", messageCount - 1, index.get());
+            assertTrue(done.await(10, TimeUnit.SECONDS), "Not all messages received in given time");
+            assertEquals(messageCount - 1, index.get(), "Messages were not in expected order, final index was wrong");
 
             testPeer.expectDischarge(txnId, true);
             testPeer.expectClose();
@@ -2185,7 +2251,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSessionSnapshotsPolicyObjects() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -2205,7 +2272,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAcknowledgeIndividualMessages()  throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -2227,10 +2295,10 @@
             Message lastReceivedMessage = null;
             for (int i = 0; i < msgCount; i++) {
                 lastReceivedMessage = messageConsumer.receive(3000);
-                assertNotNull("Message " + i + " was not received", lastReceivedMessage);
+                assertNotNull(lastReceivedMessage, "Message " + i + " was not received");
                 messages.add(lastReceivedMessage);
 
-                assertEquals("unexpected message number property", i, lastReceivedMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER));
+                assertEquals(i, lastReceivedMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER), "unexpected message number property");
             }
 
             // Acknowledge the messages in a random order, verify only that messages disposition arrives each time.
@@ -2284,7 +2352,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConsumerWithUnackedClientAckMessagesThenRecoverSession() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -2303,10 +2372,10 @@
             MessageConsumer consumer = session.createConsumer(destination);
 
             TextMessage receivedTextMessage = null;
-            assertNotNull("Expected a message", receivedTextMessage = (TextMessage) consumer.receive(3000));
-            assertEquals("Unexpected delivery number", 1,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1);
-            assertNotNull("Expected a message", receivedTextMessage = (TextMessage) consumer.receive(3000));
-            assertEquals("Unexpected delivery number", 2,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1);
+            assertNotNull(receivedTextMessage = (TextMessage) consumer.receive(3000), "Expected a message");
+            assertEquals(1,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1,  "Unexpected delivery number");
+            assertNotNull(receivedTextMessage = (TextMessage) consumer.receive(3000), "Expected a message");
+            assertEquals(2,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1,  "Unexpected delivery number");
 
             testPeer.expectLinkFlow(true, true, equalTo(UnsignedInteger.valueOf(JmsDefaultPrefetchPolicy.DEFAULT_QUEUE_PREFETCH - msgCount)));
 
@@ -2328,7 +2397,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRecoveredClientAckSessionWithDurableSubscriber() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer, false, "?jms.clientID=myClientId", null, null, false);
@@ -2350,16 +2420,16 @@
             MessageConsumer subscriber = session.createDurableConsumer(topic, subscriptionName);
 
             TextMessage receivedTextMessage = null;
-            assertNotNull("Expected a message", receivedTextMessage = (TextMessage) subscriber.receive(3000));
-            assertEquals("Unexpected delivery number", 1,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1);
-            assertNotNull("Expected a message", receivedTextMessage = (TextMessage) subscriber.receive(3000));
-            assertEquals("Unexpected delivery number", 2,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1);
+            assertNotNull(receivedTextMessage = (TextMessage) subscriber.receive(3000), "Expected a message");
+            assertEquals(1,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1,  "Unexpected delivery number");
+            assertNotNull(receivedTextMessage = (TextMessage) subscriber.receive(3000), "Expected a message");
+            assertEquals(2,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1,  "Unexpected delivery number");
 
             session.recover();
 
-            assertNotNull("Expected a message", receivedTextMessage = (TextMessage) subscriber.receive(3000));
+            assertNotNull(receivedTextMessage = (TextMessage) subscriber.receive(3000), "Expected a message");
             int deliveryNumber = receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1;
-            assertEquals("Unexpected delivery number", 1,  deliveryNumber);
+            assertEquals(1,  deliveryNumber,  "Unexpected delivery number");
 
             testPeer.expectDisposition(true, new AcceptedMatcher(), 1, 1);
 
@@ -2384,12 +2454,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSessionWithWithUnackedClientAckMessages() throws Exception {
         doCloseWithWithUnackedClientAckMessagesTestImpl(true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConnectionWithUnackedClientAckMessages() throws Exception {
         doCloseWithWithUnackedClientAckMessagesTestImpl(false);
     }
@@ -2415,10 +2487,10 @@
             MessageConsumer subscriber = session.createDurableConsumer(topic, subscriptionName);
 
             TextMessage receivedTextMessage = null;
-            assertNotNull("Expected a message", receivedTextMessage = (TextMessage) subscriber.receive(3000));
-            assertEquals("Unexpected delivery number", 1,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1);
-            assertNotNull("Expected a message", receivedTextMessage = (TextMessage) subscriber.receive(3000));
-            assertEquals("Unexpected delivery number", 2,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1);
+            assertNotNull(receivedTextMessage = (TextMessage) subscriber.receive(3000), "Expected a message");
+            assertEquals(1,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1,  "Unexpected delivery number");
+            assertNotNull(receivedTextMessage = (TextMessage) subscriber.receive(3000), "Expected a message");
+            assertEquals(2,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1,  "Unexpected delivery number");
 
             testPeer.expectDisposition(true, new ModifiedMatcher().withDeliveryFailed(equalTo(true)), 1, 1);
             testPeer.expectDisposition(true, new ModifiedMatcher().withDeliveryFailed(equalTo(true)), 2, 2);
@@ -2435,49 +2507,57 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConnectionWithRecoveredUndeliveredAndRedeliveredClientAckMessages() throws Exception {
         // Send 6, recover 4, redeliver 2, close connection (and so implicitly, session)
         doCloseWithWithRecoveredUndeliveredClientAckMessagesTestImpl(false, false, 6, 4, 2);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConnectionWithRecoveredUndeliveredClientAckMessages() throws Exception {
         // Send 4, recover 2, redeliver none, close connection (and so implicitly, session)
         doCloseWithWithRecoveredUndeliveredClientAckMessagesTestImpl(false, false, 4, 2, 0);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSessionWithRecoveredUndeliveredAndRedeliveredClientAckMessages() throws Exception {
         // Send 6, recover 4, redeliver 2, close session (then connection)
         doCloseWithWithRecoveredUndeliveredClientAckMessagesTestImpl(false, true, 6, 4, 2);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSessionWithRecoveredUndeliveredClientAckMessages() throws Exception {
         // Send 4, recover 2, redeliver none, close session (then connection)
         doCloseWithWithRecoveredUndeliveredClientAckMessagesTestImpl(false, true, 4, 2, 0);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConsumerWithRecoveredUndeliveredAndRedeliveredClientAckMessages() throws Exception {
         // Send 6, recover 4, redeliver 2, close consumer then connection (and so implicitly, session)
         doCloseWithWithRecoveredUndeliveredClientAckMessagesTestImpl(true, false, 6, 4, 2);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConsumerWithRecoveredUndeliveredClientAckMessages() throws Exception {
         // Send 4, recover 2, redeliver none, close consumer then connection (and so implicitly, session)
         doCloseWithWithRecoveredUndeliveredClientAckMessagesTestImpl(true, false, 4, 2, 0);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConsumerAndSessionWithRecoveredAndRedeliveredUndeliveredClientAckMessages() throws Exception {
         // Send 6, recover 4, redeliver 2, close consumer then session (then connection)
         doCloseWithWithRecoveredUndeliveredClientAckMessagesTestImpl(true, true, 6, 4, 2);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseConsumerAndSessionWithRecoveredUndeliveredClientAckMessages() throws Exception {
         // Send 6, recover 4, redeliver 2, close consumer then session (then connection)
         doCloseWithWithRecoveredUndeliveredClientAckMessagesTestImpl(true, true, 4, 2, 0);
@@ -2513,20 +2593,20 @@
 
             TextMessage receivedTextMessage = null;
             for (int i = 1; i <= deliverBeforeRecoverCount; i++) {
-                assertNotNull("Expected message did not arrive: " + i, receivedTextMessage = (TextMessage) consumer.receive(3000));
-                assertEquals("Unexpected delivery number", i,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1);
+                assertNotNull(receivedTextMessage = (TextMessage) consumer.receive(3000), "Expected message did not arrive: " + i);
+                assertEquals(i,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1,  "Unexpected delivery number");
             }
 
             // Await all incoming messages to arrive at consumer before we recover, ensure deterministic test behaviour.
-            assertTrue("Messages did not arrive in a timely fashion", incoming.await(3, TimeUnit.SECONDS));
+            assertTrue(incoming.await(3, TimeUnit.SECONDS), "Messages did not arrive in a timely fashion");
 
             session.recover();
 
             testPeer.waitForAllHandlersToComplete(1000);
 
             for (int i = 1; i <= deliverAfterRecoverCount; i++) {
-                assertNotNull("Expected message did not arrive after recover: " + i, receivedTextMessage = (TextMessage) consumer.receive(3000));
-                assertEquals("Unexpected delivery number after recover", i,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1);
+                assertNotNull(receivedTextMessage = (TextMessage) consumer.receive(3000), "Expected message did not arrive after recover: " + i);
+                assertEquals(i,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1,  "Unexpected delivery number after recover");
             }
 
             int deliveredAtAnyPoint = Math.max(deliverBeforeRecoverCount, deliverAfterRecoverCount);
@@ -2592,14 +2672,16 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAcknowledgeAllPreviouslyRecoveredClientAckMessages() throws Exception {
         doAcknowledgePreviouslyRecoveredClientAckMessagesTestImpl(true, false, true);
         doAcknowledgePreviouslyRecoveredClientAckMessagesTestImpl(false, true, true);
         doAcknowledgePreviouslyRecoveredClientAckMessagesTestImpl(false, false, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAcknowledgeSomePreviouslyRecoveredClientAckMessages() throws Exception {
         doAcknowledgePreviouslyRecoveredClientAckMessagesTestImpl(true, false, false);
         doAcknowledgePreviouslyRecoveredClientAckMessagesTestImpl(false, true, false);
@@ -2640,20 +2722,20 @@
 
             TextMessage receivedTextMessage = null;
             for (int i = 1; i <= deliverBeforeRecoverCount; i++) {
-                assertNotNull("Expected message did not arrive: " + i, receivedTextMessage = (TextMessage) consumer.receive(3000));
-                assertEquals("Unexpected delivery number", i,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1);
+                assertNotNull(receivedTextMessage = (TextMessage) consumer.receive(3000), "Expected message did not arrive: " + i);
+                assertEquals(i,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1,  "Unexpected delivery number");
             }
 
             // Await all incoming messages to arrive at consumer before we recover, ensure deterministic test behaviour.
-            assertTrue("Messages did not arrive in a timely fashion", incoming.await(3, TimeUnit.SECONDS));
+            assertTrue(incoming.await(3, TimeUnit.SECONDS), "Messages did not arrive in a timely fashion");
 
             session.recover();
 
             testPeer.waitForAllHandlersToComplete(1000);
 
             for (int i = 1; i <= acknowledgeAfterRecoverCount; i++) {
-                assertNotNull("Expected message did not arrive after recover: " + i, receivedTextMessage = (TextMessage) consumer.receive(3000));
-                assertEquals("Unexpected delivery number after recover", i,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1);
+                assertNotNull(receivedTextMessage = (TextMessage) consumer.receive(3000), "Expected message did not arrive after recover: " + i);
+                assertEquals(i,  receivedTextMessage.getIntProperty(TestAmqpPeer.MESSAGE_NUMBER) + 1,  "Unexpected delivery number after recover");
                 testPeer.expectDisposition(true, new AcceptedMatcher(), i, i);
                 receivedTextMessage.acknowledge();
             }
@@ -2691,7 +2773,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndSessionWithMessageListener() throws Exception {
         final String BREAD_CRUMB = "ErrorDescriptionBreadCrumb";
 
@@ -2730,18 +2813,18 @@
             });
 
             // Verify ExceptionListener fired
-            assertTrue("ExceptionListener did not fire", exceptionListenerFired.await(5, TimeUnit.SECONDS));
+            assertTrue(exceptionListenerFired.await(5, TimeUnit.SECONDS), "ExceptionListener did not fire");
 
             JMSException jmsException = asyncError.get();
-            assertNotNull("Exception from listener was not set", jmsException);
+            assertNotNull(jmsException, "Exception from listener was not set");
             String message = jmsException.getMessage();
             assertTrue(message.contains(AmqpError.RESOURCE_LIMIT_EXCEEDED.toString()) && message.contains(BREAD_CRUMB));
 
             // Verify the session (and  consumer) got marked closed and listener fired
             testPeer.waitForAllHandlersToComplete(1000);
-            assertTrue("Session closed callback did not fire", sessionClosed.await(5, TimeUnit.SECONDS));
-            assertTrue("consumer never closed.", verifyConsumerClosure(BREAD_CRUMB, consumer));
-            assertTrue("session never closed.", verifySessionClosure(BREAD_CRUMB, session));
+            assertTrue(sessionClosed.await(5, TimeUnit.SECONDS), "Session closed callback did not fire");
+            assertTrue(verifyConsumerClosure(BREAD_CRUMB, consumer), "consumer never closed.");
+            assertTrue(verifySessionClosure(BREAD_CRUMB, session), "session never closed.");
 
             // Try closing consumer and session explicitly, should effectively no-op in client.
             // The test peer will throw during close if it sends anything unexpected.
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SslIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SslIntegrationTest.java
index 02fc188..9bc0135 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SslIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SslIntegrationTest.java
@@ -20,13 +20,13 @@
  */
 package org.apache.qpid.jms.integration;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import java.io.IOException;
 import java.net.Socket;
@@ -47,8 +47,8 @@
 import org.apache.qpid.jms.transports.TransportOptions;
 import org.apache.qpid.jms.transports.TransportSupport;
 import org.apache.qpid.jms.transports.netty.NettySimpleAmqpServer;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import io.netty.handler.ssl.OpenSsl;
 
 public class SslIntegrationTest extends QpidJmsTestCase {
@@ -83,12 +83,14 @@
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAndCloseSslConnectionJDK() throws Exception {
         testCreateAndCloseSslConnection(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAndCloseSslConnectionOpenSSL() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
@@ -118,12 +120,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateSslConnectionWithServerSendingPreemptiveDataJDK() throws Exception {
         doTestCreateSslConnectionWithServerSendingPreemptiveData(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateSslConnectionWithServerSendingPreemptiveDataOpenSSL() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
@@ -162,12 +166,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAndCloseSslConnectionWithClientAuthJDK() throws Exception {
         doTestCreateAndCloseSslConnectionWithClientAuth(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAndCloseSslConnectionWithClientAuthOpenSSL() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
@@ -202,13 +208,15 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAndCloseSslConnectionWithAliasJDK() throws Exception {
         doConnectionWithAliasTestImpl(CLIENT_KEY_ALIAS, CLIENT_DN, false);
         doConnectionWithAliasTestImpl(CLIENT2_KEY_ALIAS, CLIENT2_DN, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateAndCloseSslConnectionWithAliasOpenSSL() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
@@ -247,19 +255,21 @@
             Certificate cert = peerCertificates[0];
             assertTrue(cert instanceof X509Certificate);
             String dn = ((X509Certificate)cert).getSubjectX500Principal().getName();
-            assertEquals("Unexpected certificate DN", expectedDN, dn);
+            assertEquals(expectedDN, dn, "Unexpected certificate DN");
 
             testPeer.expectClose();
             connection.close();
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionWithAliasThatDoesNotExist() throws Exception {
         doCreateConnectionWithInvalidAliasTestImpl(ALIAS_DOES_NOT_EXIST);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionWithAliasThatDoesNotRepresentKeyEntry() throws Exception {
         doCreateConnectionWithInvalidAliasTestImpl(ALIAS_CA_CERT);
     }
@@ -290,7 +300,7 @@
                 // Expected
             }
 
-            assertNull("Attempt should have failed locally, peer should not have accepted any TCP connection", testPeer.getClientSocket());
+            assertNull(testPeer.getClientSocket(), "Attempt should have failed locally, peer should not have accepted any TCP connection");
         }
     }
 
@@ -301,7 +311,8 @@
      *
      * @throws Exception if an unexpected error is encountered
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionWithSslContextOverride() throws Exception {
         assertNotEquals(CLIENT_JKS_KEYSTORE, CLIENT2_JKS_KEYSTORE);
         assertNotEquals(CLIENT_DN, CLIENT2_DN);
@@ -312,7 +323,8 @@
         doConnectionWithSslContextOverride(CLIENT2_JKS_KEYSTORE, CLIENT2_DN, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionWithSslContextOverrideByExtension() throws Exception {
         assertNotEquals(CLIENT_JKS_KEYSTORE, CLIENT2_JKS_KEYSTORE);
         assertNotEquals(CLIENT_DN, CLIENT2_DN);
@@ -371,7 +383,7 @@
             Certificate cert = peerCertificates[0];
             assertTrue(cert instanceof X509Certificate);
             String dn = ((X509Certificate)cert).getSubjectX500Principal().getName();
-            assertEquals("Unexpected certificate DN", expectedDN, dn);
+            assertEquals(expectedDN, dn, "Unexpected certificate DN");
 
             testPeer.expectClose();
             connection.close();
@@ -386,7 +398,8 @@
      *
      * @throws Exception if an unexpected error is encountered
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConnectionWithSslContextOverrideAndURIConfig() throws Exception {
         assertNotEquals(CLIENT_JKS_KEYSTORE, CLIENT2_JKS_KEYSTORE);
         assertNotEquals(CLIENT_DN, CLIENT2_DN);
@@ -442,14 +455,15 @@
             Certificate cert = peerCertificates[0];
             assertTrue(cert instanceof X509Certificate);
             String dn = ((X509Certificate)cert).getSubjectX500Principal().getName();
-            assertEquals("Unexpected certificate DN", expectedDN, dn);
+            assertEquals(expectedDN, dn, "Unexpected certificate DN");
 
             testPeer.expectClose();
             connection.close();
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConfigureStoresWithSslSystemProperties() throws Exception {
         // Set properties and expect connection as Client1
         setSslSystemPropertiesForCurrentTest(CLIENT_JKS_KEYSTORE, PASSWORD, CLIENT_JKS_TRUSTSTORE, PASSWORD);
@@ -487,14 +501,16 @@
         doConfigureStoresWithSslSystemPropertiesTestImpl(CLIENT2_DN);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConfigurePkcs12StoresWithSslSystemProperties() throws Exception {
         // Set properties and expect connection as Client1
         setSslSystemPropertiesForCurrentTest(CLIENT_PKCS12_KEYSTORE, CUSTOM_STORE_TYPE_PKCS12, PASSWORD, CLIENT_PKCS12_TRUSTSTORE, CUSTOM_STORE_TYPE_PKCS12, PASSWORD);
         doConfigureStoresWithSslSystemPropertiesTestImpl(CLIENT_DN);
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testNonSslConnectionFailsToSslServer() throws Exception {
         TransportOptions serverOptions = new TransportOptions();
         serverOptions.setKeyStoreLocation(BROKER_PKCS12_KEYSTORE);
@@ -513,7 +529,7 @@
             catch (JMSException jmse) {
                 String message = jmse.getMessage();
                 assertNotNull(message);
-                assertTrue("Unexpected message: " + message, message.contains("Timed out while waiting to connect"));
+                assertTrue(message.contains("Timed out while waiting to connect"), "Unexpected message: " + message);
             }
         }
     }
@@ -557,7 +573,7 @@
             Certificate cert = peerCertificates[0];
             assertTrue(cert instanceof X509Certificate);
             String dn = ((X509Certificate)cert).getSubjectX500Principal().getName();
-            assertEquals("Unexpected certificate DN", expectedDN, dn);
+            assertEquals(expectedDN, dn, "Unexpected certificate DN");
 
             testPeer.expectClose();
             connection.close();
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/StreamMessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/StreamMessageIntegrationTest.java
index 5081e90..3fb47df 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/StreamMessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/StreamMessageIntegrationTest.java
@@ -19,12 +19,12 @@
 package org.apache.qpid.jms.integration;
 
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -54,7 +54,8 @@
 import org.apache.qpid.jms.test.testpeer.matchers.types.EncodedAmqpSequenceMatcher;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class StreamMessageIntegrationTest extends QpidJmsTestCase {
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
@@ -66,7 +67,8 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBasicStreamMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -118,21 +120,21 @@
             Message receivedMessage = messageConsumer.receive(3000);
 
             //verify the content is as expected
-            assertNotNull("Message was not received", receivedMessage);
-            assertTrue("Message was not a MapMessage", receivedMessage instanceof StreamMessage);
+            assertNotNull(receivedMessage, "Message was not received");
+            assertTrue(receivedMessage instanceof StreamMessage, "Message was not a MapMessage");
             StreamMessage receivedStreamMessage  = (StreamMessage) receivedMessage;
 
-            assertEquals("Unexpected boolean value", myBool, receivedStreamMessage.readBoolean());
-            assertEquals("Unexpected byte value", myByte, receivedStreamMessage.readByte());
+            assertEquals(myBool, receivedStreamMessage.readBoolean(), "Unexpected boolean value");
+            assertEquals(myByte, receivedStreamMessage.readByte(), "Unexpected byte value");
             byte[] readBytes = (byte[]) receivedStreamMessage.readObject();//using readObject to get a new byte[]
-            assertArrayEquals("Read bytes were not as expected", myBytes, readBytes);
-            assertEquals("Unexpected char value", myChar, receivedStreamMessage.readChar());
-            assertEquals("Unexpected double value", myDouble, receivedStreamMessage.readDouble(), 0.0);
-            assertEquals("Unexpected float value", myFloat, receivedStreamMessage.readFloat(), 0.0);
-            assertEquals("Unexpected int value", myInt, receivedStreamMessage.readInt());
-            assertEquals("Unexpected long value", myLong, receivedStreamMessage.readLong());
-            assertEquals("Unexpected short value", myShort, receivedStreamMessage.readShort());
-            assertEquals("Unexpected UTF value", myString, receivedStreamMessage.readString());
+            assertArrayEquals(myBytes, readBytes, "Read bytes were not as expected");
+            assertEquals(myChar, receivedStreamMessage.readChar(), "Unexpected char value");
+            assertEquals(myDouble, receivedStreamMessage.readDouble(), 0.0, "Unexpected double value");
+            assertEquals(myFloat, receivedStreamMessage.readFloat(), 0.0, "Unexpected float value");
+            assertEquals(myInt, receivedStreamMessage.readInt(), "Unexpected int value");
+            assertEquals(myLong, receivedStreamMessage.readLong(), "Unexpected long value");
+            assertEquals(myShort, receivedStreamMessage.readShort(), "Unexpected short value");
+            assertEquals(myString, receivedStreamMessage.readString(), "Unexpected UTF value");
 
             assertFalse(receivedStreamMessage.isBodyAssignableTo(String.class));
             assertFalse(receivedStreamMessage.isBodyAssignableTo(Object.class));
@@ -178,7 +180,8 @@
      * an AmqpValue section containing a list which holds entries of the various supported entry
      * types with the expected values.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendBasicStreamMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -272,7 +275,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSentStreamMessageIsReadOnly() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -320,7 +324,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendDoesNotMarkStreamMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -428,7 +433,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMarksStreamMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SubscriptionsIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SubscriptionsIntegrationTest.java
index c03a61f..5786ac3 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SubscriptionsIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SubscriptionsIntegrationTest.java
@@ -21,10 +21,10 @@
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.SHARED_SUBS;
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.SUB_NAME_DELIMITER;
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.util.concurrent.CountDownLatch;
@@ -48,7 +48,8 @@
 import org.apache.qpid.jms.test.testpeer.basictypes.AmqpError;
 import org.apache.qpid.proton.amqp.Symbol;
 import org.hamcrest.Matcher;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -73,7 +74,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSharedDurableTopicSubscriberDetachesWithCloseFalse() throws Exception {
         doSharedTopicSubscriberDetachTestImpl(true);
     }
@@ -83,7 +85,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCloseSharedVolatileTopicSubscriberDetachesWithCloseTrue() throws Exception {
         doSharedTopicSubscriberDetachTestImpl(false);
     }
@@ -137,7 +140,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedDurableSubscriberLinkNames() throws Exception {
         doSharedSubsriberLinkNamesHaveUniqueCounterSuffixTestImpl(true, true);
     }
@@ -148,7 +152,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedVolatileSubscriberLinkNamesHaveUniqueCounterSuffix() throws Exception {
         doSharedSubsriberLinkNamesHaveUniqueCounterSuffixTestImpl(false, true);
     }
@@ -160,7 +165,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedDurableSubscriberLinkNamesNoClientID() throws Exception {
         doSharedSubsriberLinkNamesHaveUniqueCounterSuffixTestImpl(true, false);
     }
@@ -172,7 +178,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedVolatileSubscriberLinkNamesHaveUniqueCounterSuffixNoClientID() throws Exception {
         doSharedSubsriberLinkNamesHaveUniqueCounterSuffixTestImpl(false, false);
     }
@@ -262,7 +269,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedDurableSubsriberLinkNamesMultipleConnectionSubs() throws Exception {
         doMultipleConnectionSharedSubscriberLinkNamesHaveUniqueCounterSuffixTestImpl(true);
     }
@@ -273,7 +281,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedVolatileSubsriberLinkNamesHaveUniqueCounterSuffixMultipleConnectionSubs() throws Exception {
         doMultipleConnectionSharedSubscriberLinkNamesHaveUniqueCounterSuffixTestImpl(false);
     }
@@ -352,7 +361,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedDurableSubsriberLinkNamesMultipleSessionSubs() throws Exception {
         doMultipleSessionSharedSubscriberLinkNamesHaveUniqueCounterSuffixTestImpl(true);
     }
@@ -363,7 +373,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedVolatileSubsriberLinkNamesHaveUniqueCounterSuffixMultipleSessionSubs() throws Exception {
         doMultipleSessionSharedSubscriberLinkNamesHaveUniqueCounterSuffixTestImpl(false);
     }
@@ -433,7 +444,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedDurableSubsriberLinkNamesMultipleNamedSubs() throws Exception {
         doMultipleNamedSharedSubscriberLinkNamesHaveUniqueCounterSuffixTestImpl(true);
     }
@@ -444,7 +456,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedVolatileSubsriberLinkNamesHaveUniqueCounterSuffixMultipleNamedSubs() throws Exception {
         doMultipleNamedSharedSubscriberLinkNamesHaveUniqueCounterSuffixTestImpl(false);
     }
@@ -529,7 +542,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedDurableAndVolatileSubsCoexistUsingDistinctLinkNames() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Add server connection capability to indicate support for shared-subs
@@ -576,7 +590,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateSharedDurableTopicSubscriberFailsIfNotSupported() throws Exception {
         doSharedSubscriptionNotSupportedTestImpl(true, false);
     }
@@ -588,7 +603,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateSharedVolatileTopicSubscriberFailsIfNotSupported() throws Exception {
         doSharedSubscriptionNotSupportedTestImpl(false, false);
     }
@@ -601,7 +617,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateSharedDurableTopicSubscriberFailsIfNotSupportedReleasesLinkName() throws Exception {
         doSharedSubscriptionNotSupportedTestImpl(true, true);
     }
@@ -614,7 +631,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateSharedVolatileTopicSubscriberFailsIfNotSupportedReleasesLinkName() throws Exception {
         doSharedSubscriptionNotSupportedTestImpl(false, true);
     }
@@ -675,7 +693,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateSharedDurableTopicSubscriberSucceedsWithOnlyLinkCapability() throws Exception {
         doSharedSubscriptionLinkCapabilitySupportedTestImpl(true);
     }
@@ -687,7 +706,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateSharedVolatileTopicSubscriberSucceedsWithOnlyLinkCapability() throws Exception {
         doSharedSubscriptionLinkCapabilitySupportedTestImpl(false);
     }
@@ -739,7 +759,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedAndExclusiveDurableSubsCantCoexistSharedFirst() throws Exception {
         doSharedAndExclusiveDurableSubsCantCoexistTestImpl(true);
     }
@@ -750,7 +771,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedAndExclusiveDurableSubsCantCoexistExclusiveFirst() throws Exception {
         doSharedAndExclusiveDurableSubsCantCoexistTestImpl(false);
     }
@@ -809,7 +831,8 @@
 
     // -------------------------------------- //
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testExclusiveDurableSubCanOnlyBeActiveOnceAtATime() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Establish connection
@@ -863,7 +886,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUnsubscribeNonExistingSubscription() throws Exception {
         doUnsubscribeNonExistingSubscriptionTestImpl(true);
     }
@@ -876,7 +900,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUnsubscribeNonExistingSubscriptionWithoutClientID() throws Exception {
         doUnsubscribeNonExistingSubscriptionTestImpl(false);
     }
@@ -923,7 +948,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUnsubscribeExclusiveDurableSubWhileActiveThenInactive() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -941,7 +967,7 @@
             testPeer.expectLinkFlow();
 
             TopicSubscriber subscriber = session.createDurableSubscriber(dest, subscriptionName);
-            assertNotNull("TopicSubscriber object was null", subscriber);
+            assertNotNull(subscriber, "TopicSubscriber object was null");
 
             // Now try to unsubscribe, should fail
             try {
@@ -977,7 +1003,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUnsubscribeSharedDurableSubWhileActiveThenInactive() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Add server connection capability to indicate support for shared-subs
@@ -1062,7 +1089,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUnsubscribeAfterFailedCreation() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Add server connection capability to indicate support for shared-subs
@@ -1113,7 +1141,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testUnsubscribeFailsWhenRemoteDetachResponseIndicatesFailure() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1153,7 +1182,8 @@
      *
      * @throws Exception if an unexpected error is encountered
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyDetachLinkWithDurableSharedConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Add server connection capability to indicate support for shared-subs
@@ -1202,7 +1232,7 @@
             MessageConsumer subscriber2 = session2.createSharedDurableConsumer(dest,  subscriptionName);
             assertNotNull(subscriber2);
 
-            assertTrue("Consumer closed callback didn't trigger", subscriberClosed.await(5, TimeUnit.SECONDS));
+            assertTrue(subscriberClosed.await(5, TimeUnit.SECONDS), "Consumer closed callback didn't trigger");
 
             testPeer.waitForAllHandlersToComplete(1000);
 
@@ -1241,7 +1271,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedDurableSubChangeOfTopic() throws Exception {
         doSharedSubChangeOfDetailsTestImpl(true, true, false);
     }
@@ -1253,7 +1284,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedVolatileSubChangeOfTopic() throws Exception {
         doSharedSubChangeOfDetailsTestImpl(false, true, false);
     }
@@ -1265,7 +1297,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedDurableSubChangeOfSelector() throws Exception {
         doSharedSubChangeOfDetailsTestImpl(true, false, true);
     }
@@ -1277,7 +1310,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedVolatileSubChangeOfSelector() throws Exception {
         doSharedSubChangeOfDetailsTestImpl(false, false, true);
     }
@@ -1289,7 +1323,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedDurableSubChangeOfTopicAndSelector() throws Exception {
         doSharedSubChangeOfDetailsTestImpl(true, true, true);
     }
@@ -1301,7 +1336,8 @@
      *
      * @throws Exception if an unexpected exception occurs
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedVolatileSubChangeOfTopicAndSelector() throws Exception {
         doSharedSubChangeOfDetailsTestImpl(false, true, true);
     }
@@ -1407,7 +1443,8 @@
      *
      * @throws Exception if an unexpected error is encountered
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyEndSessionWithDurableSharedConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Add server connection capability to indicate support for shared-subs
@@ -1456,7 +1493,7 @@
             MessageConsumer subscriber2 = session2.createSharedDurableConsumer(dest,  subscriptionName);
             assertNotNull(subscriber2);
 
-            assertTrue("Session closed callback didn't trigger", sessionClosed.await(5, TimeUnit.SECONDS));
+            assertTrue(sessionClosed.await(5, TimeUnit.SECONDS), "Session closed callback didn't trigger");
 
             testPeer.waitForAllHandlersToComplete(1000);
 
@@ -1491,7 +1528,8 @@
      *
      * @throws Exception if an unexpected error is encountered
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testLocallyEndSessionWithSharedConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Add server connection capability to indicate support for shared-subs
@@ -1575,7 +1613,8 @@
      *
      * @throws Exception if an unexpected error is encountered
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSubscriptionNameNotAllowedToHaveNameSeparator() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Add server connection capability to indicate support for shared-subs
@@ -1640,7 +1679,8 @@
 
     // -------------------------------------- //
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSharedTopicSubscriberBehavesLikeNoClientIDWasSetWhenAwaitClientIdOptionIsFalse() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             int serverPort = testPeer.getServerPort();
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/TextMessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/TextMessageIntegrationTest.java
index f5593c8..e4a55db 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/TextMessageIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/TextMessageIntegrationTest.java
@@ -19,12 +19,12 @@
 package org.apache.qpid.jms.integration;
 
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 
@@ -55,12 +55,14 @@
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
 import org.apache.qpid.proton.amqp.Symbol;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class TextMessageIntegrationTest extends QpidJmsTestCase {
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendTextMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -106,7 +108,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveTextMessageWithContentAmqpValue() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -151,7 +154,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendTextMessageWithoutContent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -190,7 +194,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveTextMessageWithAmqpValueNullBodyAndNoMsgTypeAnnotation() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -227,7 +232,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveTextMessageUsingDataSectionWithContentTypeTextPlainNoTypeAnnotation() throws Exception {
         String expectedString = "expectedContent";
         final byte[] sentBytes = expectedString.getBytes("UTF-8");
@@ -235,7 +241,8 @@
         doReceiveTextMessageUsingDataSectionTestImpl("text/plain", sentBytes, expectedString);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveTextMessageUsingDataSectionWithContentTypeTextPlainCharsetUtf8NoTypeAnnotation() throws Exception {
         String expectedString = "expectedContent";
         final byte[] sentBytes = expectedString.getBytes("UTF-8");
@@ -243,7 +250,8 @@
         doReceiveTextMessageUsingDataSectionTestImpl("text/plain;charset=utf-8", sentBytes, expectedString);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveTextMessageUsingDataSectionWithContentTypeTextPlainCharsetUtf16NoTypeAnnotation() throws Exception {
         String expectedString = "expectedContent";
         final byte[] sentBytes = expectedString.getBytes("UTF-16");
@@ -251,7 +259,8 @@
         doReceiveTextMessageUsingDataSectionTestImpl("text/plain;charset=utf-16", sentBytes, expectedString);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveTextMessageUsingDataSectionWithContentTypeTextOtherNoTypeAnnotation() throws Exception {
         String expectedString = "expectedContent";
         final byte[] sentBytes = expectedString.getBytes("UTF-8");
@@ -259,7 +268,8 @@
         doReceiveTextMessageUsingDataSectionTestImpl("text/other", sentBytes, expectedString);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveTextMessageUsingDataSectionWithContentTypeApplicationJsonNoTypeAnnotation() throws Exception {
         String expectedString = "expectedContent";
         final byte[] sentBytes = expectedString.getBytes("UTF-8");
@@ -267,7 +277,8 @@
         doReceiveTextMessageUsingDataSectionTestImpl("application/json", sentBytes, expectedString);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveTextMessageUsingDataSectionWithContentTypeApplicationXmlNoTypeAnnotation() throws Exception {
         String expectedString = "expectedContent";
         final byte[] sentBytes = expectedString.getBytes("UTF-8");
@@ -324,7 +335,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncSendDoesNotMarkTextMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -429,7 +441,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testAsyncCompletionSendMarksTextMessageReadOnly() throws Exception {
         try(TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/TransactionsIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/TransactionsIntegrationTest.java
index 601f047..67beb1d 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/TransactionsIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/TransactionsIntegrationTest.java
@@ -18,16 +18,17 @@
  */
 package org.apache.qpid.jms.integration;
 
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.arrayContaining;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.util.ArrayDeque;
@@ -74,29 +75,26 @@
 import org.apache.qpid.jms.test.testpeer.matchers.sections.MessageHeaderSectionMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.sections.TransferPayloadCompositeMatcher;
 import org.apache.qpid.jms.test.testpeer.matchers.types.EncodedAmqpValueMatcher;
-import org.apache.qpid.jms.util.QpidJMSTestRunner;
-import org.apache.qpid.jms.util.Repeat;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
-import org.hamcrest.MatcherAssert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Tests for behavior of Transacted Session operations.
  */
-@RunWith(QpidJMSTestRunner.class)
 public class TransactionsIntegrationTest extends QpidJmsTestCase {
 
     private static final Logger LOG = LoggerFactory.getLogger(TransactionsIntegrationTest.class);
 
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTransactionRolledBackOnSessionClose() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -123,7 +121,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTransactionCommitFailWithEmptyRejectedDisposition() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -187,7 +186,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testProducedMessagesAfterCommitOfSentMessagesFails() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -266,7 +266,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testProducedMessagesAfterRollbackSentMessagesFails() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -345,32 +346,38 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCommitTransactedSessionWithConsumerReceivingAllMessages() throws Exception {
         doCommitTransactedSessionWithConsumerTestImpl(1, 1, false, false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCommitTransactedSessionWithConsumerReceivingAllMessagesAndCloseBefore() throws Exception {
         doCommitTransactedSessionWithConsumerTestImpl(1, 1, true, true);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCommitTransactedSessionWithConsumerReceivingAllMessagesAndCloseAfter() throws Exception {
         doCommitTransactedSessionWithConsumerTestImpl(1, 1, true, false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCommitTransactedSessionWithConsumerReceivingSomeMessages() throws Exception {
         doCommitTransactedSessionWithConsumerTestImpl(5, 2, false, false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCommitTransactedSessionWithConsumerReceivingSomeMessagesAndClosesBefore() throws Exception {
         doCommitTransactedSessionWithConsumerTestImpl(5, 2, true, true);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCommitTransactedSessionWithConsumerReceivingSomeMessagesAndClosesAfter() throws Exception {
         doCommitTransactedSessionWithConsumerTestImpl(5, 2, true, false);
     }
@@ -424,7 +431,7 @@
             }
 
             // Ensure all the messages arrived so that the matching below is deterministic
-            assertTrue("Expected transfers didnt occur: " + expected.getCount(), expected.await(10, TimeUnit.SECONDS));
+            assertTrue(expected.await(10, TimeUnit.SECONDS), "Expected transfers didnt occur: " + expected.getCount());
 
             // Expect the consumer to close now
             if (closeConsumer && closeBeforeCommit) {
@@ -485,7 +492,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConsumerWithNoMessageCanCloseBeforeCommit() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -532,7 +540,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConsumerWithNoMessageCanCloseBeforeRollback() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -579,7 +588,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testProducedMessagesOnTransactedSessionCarryTxnId() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -627,7 +637,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testProducedMessagesOnTransactedSessionCanBeReused() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -684,22 +695,26 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRollbackTransactedSessionWithConsumerReceivingAllMessages() throws Exception {
         doRollbackTransactedSessionWithConsumerTestImpl(1, 1, false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRollbackTransactedSessionWithConsumerReceivingAllMessagesThenCloses() throws Exception {
         doRollbackTransactedSessionWithConsumerTestImpl(1, 1, true);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRollbackTransactedSessionWithConsumerReceivingSomeMessages() throws Exception {
         doRollbackTransactedSessionWithConsumerTestImpl(5, 2, false);
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRollbackTransactedSessionWithConsumerReceivingSomeMessagesThenCloses() throws Exception {
         doRollbackTransactedSessionWithConsumerTestImpl(5, 2, true);
     }
@@ -796,7 +811,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRollbackTransactedSessionWithPrefetchFullBeforeStoppingConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int messageCount = 5;
@@ -862,7 +878,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRollbackTransactedSessionWithPrefetchFullyUtilisedByDrainWhenStoppingConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final int messageCount = 5;
@@ -933,7 +950,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testDefaultOutcomeIsModifiedForConsumerSourceOnTransactedSession() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -970,7 +988,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCoordinatorLinkSupportedOutcomes() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1001,7 +1020,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRollbackErrorCoordinatorClosedOnCommit() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1035,7 +1055,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testRollbackErrorWhenCoordinatorRemotelyClosed() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1071,7 +1092,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testJMSErrorCoordinatorClosedOnRollback() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1105,7 +1127,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testJMSExceptionOnRollbackWhenCoordinatorRemotelyClosed() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1141,7 +1164,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSendAfterCoordinatorLinkClosedDuringTX() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1191,7 +1215,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testReceiveAfterCoordinatorLinkClosedDuringTX() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1246,7 +1271,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSessionCreateFailsOnDeclareTimeout() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -1275,7 +1301,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSessionCreateFailsOnDeclareRejection() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1304,7 +1331,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSessionCreateFailsOnCoordinatorLinkRefusal() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1325,7 +1353,7 @@
                 fail("should have thrown");
             } catch (JMSException jmse) {
                 assertNotNull(jmse.getMessage());
-                assertTrue("Expected exception message to contain breadcrumb", jmse.getMessage().contains(errorMessage));
+                assertTrue(jmse.getMessage().contains(errorMessage), "Expected exception message to contain breadcrumb");
             }
 
             testPeer.expectClose();
@@ -1335,7 +1363,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTransactionRolledBackOnSessionCloseTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -1369,7 +1398,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTransactionRolledBackTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -1410,7 +1440,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTransactionCommitTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -1451,7 +1482,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTransactionCommitTimesOutAndNoNextBeginTimesOut() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
@@ -1494,7 +1526,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRollbackWithNoResponseForSuspendConsumer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer, "?amqp.drainTimeout=1000");
@@ -1553,8 +1586,8 @@
         }
     }
 
-    @Test(timeout=30000)
-    @Repeat(repetitions = 1)