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)
+    @Test
+    @Timeout(30)
     public void testConsumerMessageOrderOnTransactedSession() throws IOException, Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1614,7 +1647,8 @@
         }
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testConsumeManyWithSingleTXPerMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1688,8 +1722,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTransactionDeclaredDispositionWithoutTxnId() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             Connection connection = testFixture.establishConnecton(testPeer);
@@ -1721,11 +1755,11 @@
                 // Expected
             }
 
-            assertTrue("The ExceptionListener should have been alerted", exceptionListenerFired.await(3, TimeUnit.SECONDS));
+            assertTrue(exceptionListenerFired.await(3, TimeUnit.SECONDS), "The ExceptionListener should have been alerted");
             JMSException ex = failure.get();
-            assertTrue("Unexpected exception type: " + ex, ex instanceof JmsConnectionFailedException);
+            assertTrue(ex instanceof JmsConnectionFailedException, "Unexpected exception type: " + ex);
 
-            MatcherAssert.assertThat("Unexpected exception type: ", ex.getMessage(),
+            assertThat("Unexpected exception type: ", ex.getMessage(),
                     equalTo("The JMS connection has failed: Error in proton Transport: The txn-id field cannot be omitted [condition = amqp:decode-error]"));
 
             testPeer.waitForAllHandlersToComplete(1000);
@@ -1734,7 +1768,8 @@
         }
     }
 
-    @Test(timeout = 30_000)
+    @Test
+    @Timeout(30)
     public void testAsyncConsumerAcksAfterCommitAndBeginWhenCommitCalledInOnMessage() throws Exception {
         final Binary txnId = new Binary(new byte[]{ (byte) 5, (byte) 6, (byte) 7, (byte) 8});
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/WsIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/WsIntegrationTest.java
index b1f2e81..28657f7 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/WsIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/WsIntegrationTest.java
@@ -20,9 +20,9 @@
  */
 package org.apache.qpid.jms.integration;
 
-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.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import jakarta.jms.JMSException;
 
@@ -31,14 +31,16 @@
 import org.apache.qpid.jms.transports.TransportOptions;
 import org.apache.qpid.jms.transports.netty.NettyBlackHoleServer;
 import org.apache.qpid.jms.transports.netty.NettySimpleAmqpServer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 public class WsIntegrationTest extends QpidJmsTestCase {
 
     private static final String BROKER_PKCS12_KEYSTORE = "src/test/resources/broker-pkcs12.keystore";
     private static final String PASSWORD = "password";
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testNonSslWebSocketConnectionFailsToSslServer() throws Exception {
         TransportOptions serverOptions = new TransportOptions();
         serverOptions.setKeyStoreLocation(BROKER_PKCS12_KEYSTORE);
@@ -57,12 +59,13 @@
             catch (JMSException jmse) {
                 String message = jmse.getMessage();
                 assertNotNull(message);
-                assertTrue("Unexpected message: " + message, message.contains("Connection failed"));
+                assertTrue(message.contains("Connection failed"), "Unexpected message: " + message);
             }
         }
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testWebsocketConnectionToBlackHoleServerTimesOut() throws Exception {
         TransportOptions serverOptions = new TransportOptions();
 
@@ -78,7 +81,7 @@
             catch (JMSException jmse) {
                 String message = jmse.getMessage();
                 assertNotNull(message);
-                assertTrue("Unexpected message: " + message, message.contains("WebSocket handshake timed out"));
+                assertTrue(message.contains("WebSocket handshake timed out"), "Unexpected message: " + message);
             }
         }
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ZeroPrefetchIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ZeroPrefetchIntegrationTest.java
index 698e9b7..3f07306 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ZeroPrefetchIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ZeroPrefetchIntegrationTest.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.util.Date;
 import java.util.concurrent.CountDownLatch;
@@ -49,12 +49,14 @@
 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;
 
 public class ZeroPrefetchIntegrationTest extends QpidJmsTestCase {
     private final IntegrationTestFixture testFixture = new IntegrationTestFixture();
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testZeroPrefetchConsumerReceiveWithMessageExpiredInFlight() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Create a connection with zero prefetch
@@ -92,9 +94,9 @@
             testPeer.expectDisposition(true, new AcceptedMatcher(), 2, 2);
 
             Message m = consumer.receive(5000);
-            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();
@@ -103,7 +105,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testZeroPrefetchConsumerReceiveNoWaitDrainsWithOneCredit() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Create a connection with zero prefetch
@@ -129,9 +132,9 @@
             testPeer.expectDisposition(true, new AcceptedMatcher(), 1, 1);
 
             Message m = consumer.receiveNoWait();
-            assertNotNull("Message should have been received", m);
+            assertNotNull(m, "Message should have been received");
             assertTrue(m instanceof TextMessage);
-            assertEquals("Unexpected message content", msgContent, ((TextMessage) m).getText());
+            assertEquals(msgContent, ((TextMessage) m).getText(), "Unexpected message content");
 
             testPeer.expectClose();
             connection.close();
@@ -140,7 +143,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testZeroPrefetchMessageListener() throws Exception {
         final CountDownLatch msgReceived = new CountDownLatch(1);
         final CountDownLatch completeOnMessage = new CountDownLatch(1);
@@ -182,7 +186,7 @@
             consumer.setMessageListener(listener);
 
             // Wait for message to arrive
-            assertTrue("message not received in given time", msgReceived.await(6, TimeUnit.SECONDS));
+            assertTrue(msgReceived.await(6, TimeUnit.SECONDS), "message not received in given time");
 
             // Ensure the handlers are complete at the peer
             testPeer.waitForAllHandlersToComplete(2000);
@@ -206,17 +210,20 @@
         }
     }
 
-    @Test(timeout=40000)
+    @Test
+    @Timeout(40)
     public void testZeroPrefetchConsumerReceiveUnblockedOnSessionClose() throws Exception {
         doTestZeroPrefetchConsumerReceiveUnblockedOnSessionClose(0);
     }
 
-    @Test(timeout=40000)
+    @Test
+    @Timeout(40)
     public void testZeroPrefetchConsumerReceiveTimedUnblockedOnSessionClose() throws Exception {
         doTestZeroPrefetchConsumerReceiveUnblockedOnSessionClose(1);
     }
 
-    @Test(timeout=40000)
+    @Test
+    @Timeout(40)
     public void testZeroPrefetchConsumerReceiveNoWaitUnblockedOnSessionClose() throws Exception {
         doTestZeroPrefetchConsumerReceiveUnblockedOnSessionClose(-1);
     }
@@ -274,8 +281,8 @@
 
                 session.close();
 
-                assertTrue("Consumer did not unblock", done.await(10, TimeUnit.SECONDS));
-                assertNull("Consumer receive errored", error.get());
+                assertTrue(done.await(10, TimeUnit.SECONDS), "Consumer did not unblock");
+                assertNull(error.get(), "Consumer receive errored");
             } finally {
                 executor.shutdownNow();
             }
@@ -288,7 +295,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testZeroPrefetchConsumerReceiveTimedPullWithInFlightArrival() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Create a connection with zero prefetch
@@ -326,9 +334,9 @@
                         try {
                             Message m = consumer.receive(20);
 
-                            assertNotNull("Message should have been received", m);
+                            assertNotNull(m, "Message should have been received");
                             assertTrue(m instanceof TextMessage);
-                            assertEquals("Unexpected message content", msgContent, ((TextMessage) m).getText());
+                            assertEquals(msgContent, ((TextMessage) m).getText(), "Unexpected message content");
                         } catch (Throwable t) {
                             error.set(t);
                         } finally {
@@ -337,8 +345,8 @@
                     }
                 });
 
-                assertTrue("Consumer receive task did not complete", done.await(4, TimeUnit.SECONDS));
-                assertNull("Consumer receive errored", error.get());
+                assertTrue(done.await(4, TimeUnit.SECONDS), "Consumer receive task did not complete");
+                assertNull(error.get(), "Consumer receive errored");
             } finally {
                 executor.shutdownNow();
             }
@@ -350,7 +358,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testZeroPrefetchConsumerReceiveTimedPullWithInFlightArrivalTimesOutIfNotCompleted() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             // Create a connection with zero prefetch
@@ -393,16 +402,16 @@
                     }
                 });
 
-                assertTrue("Consumer receive task did not complete", done.await(4, TimeUnit.SECONDS));
+                assertTrue(done.await(4, TimeUnit.SECONDS), "Consumer receive task did not complete");
 
                 Throwable t = error.get();
-                assertNotNull("Consumer receive did not throw as expected", t);
-                assertTrue("Consumer receive did not throw as expected", t instanceof JMSException);
+                assertNotNull(t, "Consumer receive did not throw as expected");
+                assertTrue(t instanceof JMSException, "Consumer receive did not throw as expected");
             } finally {
                 executor.shutdownNow();
             }
 
-            assertTrue("Consumer should be closed", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -412,7 +421,7 @@
                         return true;
                     }
                 }
-            }, 5000, 10));
+            }, 5000, 10), "Consumer should be closed");
 
             testPeer.waitForAllHandlersToComplete(2000);
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JNDIReferenceFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JNDIReferenceFactoryTest.java
index 8e27619..ff33931 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JNDIReferenceFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JNDIReferenceFactoryTest.java
@@ -20,9 +20,9 @@
  */
 package org.apache.qpid.jms.jndi;
 
-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.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -44,8 +44,9 @@
 import org.apache.qpid.jms.JmsQueue;
 import org.apache.qpid.jms.JmsTopic;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-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;
 
 public class JNDIReferenceFactoryTest extends QpidJmsTestCase {
 
@@ -62,9 +63,9 @@
     private Hashtable<?, ?> testEnvironment;
     private ObjectFactory referenceFactory;
 
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         mockName = mock(Name.class);
         mockContext = mock(Context.class);
@@ -79,9 +80,9 @@
 
         Object connFactory = referenceFactory.getObjectInstance(reference, mockName, mockContext, testEnvironment);
 
-        assertNotNull("Expected object to be created", connFactory);
-        assertEquals("Unexpected object type created", JmsConnectionFactory.class, connFactory.getClass());
-        assertEquals("Unexpected URI", TEST_CONNECTION_URL, ((JmsConnectionFactory) connFactory).getRemoteURI());
+        assertNotNull(connFactory, "Expected object to be created");
+        assertEquals(JmsConnectionFactory.class, connFactory.getClass(), "Unexpected object type created");
+        assertEquals(TEST_CONNECTION_URL, ((JmsConnectionFactory) connFactory).getRemoteURI(), "Unexpected URI");
     }
 
     @Test
@@ -99,10 +100,10 @@
 
         Object queue = referenceFactory.getObjectInstance(reference, mockName, mockContext, testEnvironment);
 
-        assertNotNull("Expected object to be created", queue);
-        assertEquals("Unexpected object type created", JmsQueue.class, queue.getClass());
-        assertEquals("Unexpected address", TEST_QUEUE_ADDRESS, ((JmsQueue) queue).getAddress());
-        assertEquals("Unexpected queue name", TEST_QUEUE_ADDRESS, ((Queue) queue).getQueueName());
+        assertNotNull(queue, "Expected object to be created");
+        assertEquals(JmsQueue.class, queue.getClass(), "Unexpected object type created");
+        assertEquals(TEST_QUEUE_ADDRESS, ((JmsQueue) queue).getAddress(), "Unexpected address");
+        assertEquals(TEST_QUEUE_ADDRESS, ((Queue) queue).getQueueName(), "Unexpected queue name");
 
     }
 
@@ -121,10 +122,10 @@
 
         Object topic = referenceFactory.getObjectInstance(reference, mockName, mockContext, testEnvironment);
 
-        assertNotNull("Expected object to be created", topic);
-        assertEquals("Unexpected object type created", JmsTopic.class, topic.getClass());
-        assertEquals("Unexpected address", TEST_TOPIC_ADDRESS, ((JmsTopic) topic).getAddress());
-        assertEquals("Unexpected queue name", TEST_TOPIC_ADDRESS, ((Topic) topic).getTopicName());
+        assertNotNull(topic, "Expected object to be created");
+        assertEquals(JmsTopic.class, topic.getClass(), "Unexpected object type created");
+        assertEquals(TEST_TOPIC_ADDRESS, ((JmsTopic) topic).getAddress(), "Unexpected address");
+        assertEquals(TEST_TOPIC_ADDRESS, ((Topic) topic).getTopicName(), "Unexpected queue name");
     }
 
     private Reference createTestReference(String className, String addressType, Object content) {
@@ -170,6 +171,6 @@
         Reference reference = createTestReference(Object.class.getName(), "redundant", "redundant");
 
         Object factory = referenceFactory.getObjectInstance(reference, mockName, mockContext, testEnvironment);
-        assertNull("Expected null when given unknown class name", factory);
+        assertNull(factory, "Expected null when given unknown class name");
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JmsInitialContextFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JmsInitialContextFactoryTest.java
index 270441d..748caae 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JmsInitialContextFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/jndi/JmsInitialContextFactoryTest.java
@@ -16,12 +16,13 @@
  */
 package org.apache.qpid.jms.jndi;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-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.assertThrows;
+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.File;
 import java.io.FileNotFoundException;
@@ -41,7 +42,7 @@
 import org.apache.qpid.jms.JmsQueue;
 import org.apache.qpid.jms.JmsTopic;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class JmsInitialContextFactoryTest extends QpidJmsTestCase {
 
@@ -57,7 +58,7 @@
     private Context createInitialContext(final Hashtable<Object, Object> environment) throws NamingException {
         factory = new JmsInitialContextFactory();
         context = factory.getInitialContext(environment);
-        assertNotNull("No context created", context);
+        assertNotNull(context, "No context created");
 
         return context;
     }
@@ -70,9 +71,9 @@
         for (String factoryName : JmsInitialContextFactory.DEFAULT_CONNECTION_FACTORY_NAMES) {
             Object o = ctx.lookup(factoryName);
 
-            assertNotNull("No object returned", o);
-            assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
-            assertEquals("Unexpected URI for returned factory", JmsConnectionFactory.getDefaultRemoteAddress(), ((JmsConnectionFactory) o).getRemoteURI());
+            assertNotNull(o, "No object returned");
+            assertEquals(JmsConnectionFactory.class, o.getClass(), "Unexpected class type for returned object");
+            assertEquals(JmsConnectionFactory.getDefaultRemoteAddress(), ((JmsConnectionFactory) o).getRemoteURI(), "Unexpected URI for returned factory");
         }
     }
 
@@ -87,9 +88,9 @@
         for (String factoryName : JmsInitialContextFactory.DEFAULT_CONNECTION_FACTORY_NAMES) {
             Object o = ctx.lookup(factoryName);
 
-            assertNotNull("No object returned", o);
-            assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
-            assertEquals("Unexpected URI for returned factory", updatedDefaultURI, ((JmsConnectionFactory) o).getRemoteURI());
+            assertNotNull(o, "No object returned");
+            assertEquals(JmsConnectionFactory.class, o.getClass(), "Unexpected class type for returned object");
+            assertEquals(updatedDefaultURI, ((JmsConnectionFactory) o).getRemoteURI(), "Unexpected URI for returned factory");
         }
     }
 
@@ -104,7 +105,7 @@
     }
 
     private void doDefaultConnectionFactorySeesFactorySpecificPropertyTestImpl(String propertyPrefix, String factoryName) throws Exception {
-        String updatedClientID = _testName.getMethodName();
+        String updatedClientID = _testMethodName;
 
         Hashtable<Object, Object> env = new Hashtable<Object, Object>();
         env.put(propertyPrefix + factoryName + "." + "clientID", updatedClientID);
@@ -112,9 +113,9 @@
 
         Object o = ctx.lookup(factoryName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
-        assertEquals("Unexpected ClientID for returned factory", updatedClientID, ((JmsConnectionFactory) o).getClientID());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsConnectionFactory.class, o.getClass(), "Unexpected class type for returned object");
+        assertEquals(updatedClientID, ((JmsConnectionFactory) o).getClientID(), "Unexpected ClientID for returned factory");
     }
 
     @Test
@@ -145,7 +146,7 @@
     }
 
     private void doDefaultConnectionFactorySeesDefaultPropertyUpdatePropertyTestImpl(String propertyPrefix, String factoryName) throws Exception {
-        String updatedClientID = _testName.getMethodName();
+        String updatedClientID = _testMethodName;
 
         Hashtable<Object, Object> env = new Hashtable<Object, Object>();
         env.put(propertyPrefix + "clientID", updatedClientID);
@@ -153,9 +154,9 @@
 
         Object o = ctx.lookup(factoryName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
-        assertEquals("Unexpected ClientID for returned factory", updatedClientID, ((JmsConnectionFactory) o).getClientID());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsConnectionFactory.class, o.getClass(), "Unexpected class type for returned object");
+        assertEquals(updatedClientID, ((JmsConnectionFactory) o).getClientID(), "Unexpected ClientID for returned factory");
     }
 
     @Test
@@ -176,9 +177,9 @@
 
         Object o = ctx.lookup(factoryName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
-        assertEquals("Unexpected URI for returned factory", uri, ((JmsConnectionFactory) o).getRemoteURI());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsConnectionFactory.class, o.getClass(), "Unexpected class type for returned object");
+        assertEquals(uri, ((JmsConnectionFactory) o).getRemoteURI(), "Unexpected URI for returned factory");
     }
 
     @Test
@@ -197,7 +198,7 @@
             fail("Should have thrown exception");
         } catch (NamingException ne) {
             // Expected
-            assertTrue("Should have had a cause", ne.getCause() != null);
+            assertTrue(ne.getCause() != null, "Should have had a cause");
         }
     }
 
@@ -217,7 +218,7 @@
             fail("Should have thrown exception");
         } catch (NamingException ne) {
             // Expected
-            assertTrue("Should have had a cause", ne.getCause() != null);
+            assertTrue(ne.getCause() != null, "Should have had a cause");
         }
     }
 
@@ -240,9 +241,9 @@
 
         Object o = ctx.lookup(factoryName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
-        assertEquals("Unexpected URI for returned factory", JmsConnectionFactory.getDefaultRemoteAddress(), ((JmsConnectionFactory) o).getRemoteURI());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsConnectionFactory.class, o.getClass(), "Unexpected class type for returned object");
+        assertEquals(JmsConnectionFactory.getDefaultRemoteAddress(), ((JmsConnectionFactory) o).getRemoteURI(), "Unexpected URI for returned factory");
     }
 
     @Test
@@ -256,9 +257,9 @@
         Context ctx = createInitialContext(env);
         Object o = ctx.lookup(lookupName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsQueue.class, o.getClass());
-        assertEquals("Unexpected name for returned object", actualName, ((JmsQueue) o).getQueueName());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsQueue.class, o.getClass(), "Unexpected class type for returned object");
+        assertEquals(actualName, ((JmsQueue) o).getQueueName(), "Unexpected name for returned object");
     }
 
     @Test
@@ -269,9 +270,9 @@
         Context ctx = createInitialContext(new Hashtable<Object, Object>());
         Object o = ctx.lookup(lookupName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsQueue.class, o.getClass());
-        assertEquals("Unexpected name for returned object", actualName, ((JmsQueue) o).getQueueName());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsQueue.class, o.getClass(), "Unexpected class type for returned object");
+        assertEquals(actualName, ((JmsQueue) o).getQueueName(), "Unexpected name for returned object");
     }
 
     @Test
@@ -285,9 +286,9 @@
         Context ctx = createInitialContext(env);
         Object o = ctx.lookup(lookupName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsTopic.class, o.getClass());
-        assertEquals("Unexpected name for returned object", actualName, ((JmsTopic) o).getTopicName());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsTopic.class, o.getClass(), "Unexpected class type for returned object");
+        assertEquals(actualName, ((JmsTopic) o).getTopicName(), "Unexpected name for returned object");
     }
 
     @Test
@@ -298,9 +299,9 @@
         Context ctx = createInitialContext(new Hashtable<Object, Object>());
         Object o = ctx.lookup(lookupName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsTopic.class, o.getClass());
-        assertEquals("Unexpected name for returned object", actualName, ((JmsTopic) o).getTopicName());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsTopic.class, o.getClass(), "Unexpected class type for returned object");
+        assertEquals(actualName, ((JmsTopic) o).getTopicName(), "Unexpected name for returned object");
     }
 
     @Test
@@ -314,9 +315,9 @@
         Context ctx = createInitialContext(env);
         Object o = ctx.lookup(lookupName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsQueue.class, o.getClass());
-        assertEquals("Unexpected name for returned object", actualName, ((JmsQueue) o).getQueueName());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsQueue.class, o.getClass(), "Unexpected class type for returned object");
+        assertEquals(actualName, ((JmsQueue) o).getQueueName(), "Unexpected name for returned object");
     }
 
     @Test
@@ -330,33 +331,39 @@
         Context ctx = createInitialContext(env);
         Object o = ctx.lookup(lookupName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsTopic.class, o.getClass());
-        assertEquals("Unexpected name for returned object", actualName, ((JmsTopic) o).getTopicName());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsTopic.class, o.getClass(), "Unexpected class type for returned object");
+        assertEquals(actualName, ((JmsTopic) o).getTopicName(), "Unexpected name for returned object");
     }
 
-    @Test(expected = OperationNotSupportedException.class)
+    @Test
     public void testContextPreventsUnbind() throws Exception {
-        Hashtable<Object, Object> env = new Hashtable<Object, Object>();
-        Context ctx = createInitialContext(env);
+        assertThrows(OperationNotSupportedException.class, () -> {
+            Hashtable<Object, Object> env = new Hashtable<Object, Object>();
+            Context ctx = createInitialContext(env);
 
-        ctx.unbind("lookupName");
+            ctx.unbind("lookupName");
+        });
     }
 
-    @Test(expected = OperationNotSupportedException.class)
+    @Test
     public void testContextPreventsRebind() throws Exception {
-        Hashtable<Object, Object> env = new Hashtable<Object, Object>();
-        Context ctx = createInitialContext(env);
+        assertThrows(OperationNotSupportedException.class, () -> {
+            Hashtable<Object, Object> env = new Hashtable<Object, Object>();
+            Context ctx = createInitialContext(env);
 
-        ctx.rebind("lookupName", new Object());
+            ctx.rebind("lookupName", new Object());
+        });
     }
 
-    @Test(expected = OperationNotSupportedException.class)
+    @Test
     public void testContextPreventsRename() throws Exception {
-        Hashtable<Object, Object> env = new Hashtable<Object, Object>();
-        Context ctx = createInitialContext(env);
+        assertThrows(OperationNotSupportedException.class, () -> {
+            Hashtable<Object, Object> env = new Hashtable<Object, Object>();
+            Context ctx = createInitialContext(env);
 
-        ctx.rename("lookupName", "");
+            ctx.rename("lookupName", "");
+        });
     }
 
     @Test
@@ -369,7 +376,7 @@
             fail("Should have thrown exception");
         } catch (NamingException ne) {
             // Expected
-            assertTrue("Should have had a cause", ne.getCause() != null);
+            assertTrue(ne.getCause() != null, "Should have had a cause");
         }
     }
 
@@ -412,8 +419,8 @@
             InitialContext context = new InitialContext(env);
 
             ConnectionFactory factory = (ConnectionFactory) context.lookup(myFactory);
-            assertEquals("Unexpected type of object", JmsConnectionFactory.class, factory.getClass());
-            assertEquals("Unexpected URI value", myURI, ((JmsConnectionFactory) factory).getRemoteURI());
+            assertEquals(JmsConnectionFactory.class, factory.getClass(), "Unexpected type of object");
+            assertEquals(myURI, ((JmsConnectionFactory) factory).getRemoteURI(), "Unexpected URI value");
 
             context.close();
         } finally {
@@ -450,8 +457,8 @@
             InitialContext context = new InitialContext();
 
             ConnectionFactory factory = (ConnectionFactory) context.lookup(myFactory);
-            assertEquals("Unexpected type of object", JmsConnectionFactory.class, factory.getClass());
-            assertEquals("Unexpected URI value", myURI, ((JmsConnectionFactory) factory).getRemoteURI());
+            assertEquals(JmsConnectionFactory.class, factory.getClass(), "Unexpected type of object");
+            assertEquals(myURI, ((JmsConnectionFactory) factory).getRemoteURI(), "Unexpected URI value");
 
             context.close();
         } finally {
@@ -485,10 +492,10 @@
 
         Object o = ctx.lookup("myFactory");
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsConnectionFactory.class, o.getClass(), "Unexpected class type for returned object");
 
-        assertEquals("Unexpected URI for returned factory", "amqp://" + nowKnownHostValue + ":1234", ((JmsConnectionFactory) o).getRemoteURI());
+        assertEquals("amqp://" + nowKnownHostValue + ":1234", ((JmsConnectionFactory) o).getRemoteURI(), "Unexpected URI for returned factory");
     }
 
     @Test
@@ -505,10 +512,10 @@
         //Verify the default is picked up when the variable doesn't resolve
         Context ctx = createInitialContext(env);
         Object o = ctx.lookup("myFactory");
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsConnectionFactory.class, o.getClass(), "Unexpected class type for returned object");
 
-        assertEquals("Unexpected URI for returned factory", "amqp://" + unknownVariableDefault + ":1234", ((JmsConnectionFactory) o).getRemoteURI());
+        assertEquals("amqp://" + unknownVariableDefault + ":1234", ((JmsConnectionFactory) o).getRemoteURI(), "Unexpected URI for returned factory");
 
         //Now make the variable resolve, check the exact same env+URI now produces different result
         String nowSetHostVarValue = "nowSetHostVarValue";
@@ -516,10 +523,10 @@
 
         ctx = createInitialContext(env);
         o = ctx.lookup("myFactory");
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsConnectionFactory.class, o.getClass(), "Unexpected class type for returned object");
 
-        assertEquals("Unexpected URI for returned factory", "amqp://" + nowSetHostVarValue + ":1234", ((JmsConnectionFactory) o).getRemoteURI());
+        assertEquals("amqp://" + nowSetHostVarValue + ":1234", ((JmsConnectionFactory) o).getRemoteURI(), "Unexpected URI for returned factory");
     }
 
     @Test
@@ -546,11 +553,11 @@
         if(useEnvVarForHost) {
             // Verify variable is set (by Surefire config),
             // prevents spurious failure if not manually configured when run in IDE.
-            assertEquals("Expected to use env variable name", TEST_ENV_VARIABLE_NAME, hostVariableName);
-            assumeTrue("Environment variable not set as required", System.getenv().containsKey(TEST_ENV_VARIABLE_NAME));
-            assertEquals("Environment variable value not as expected", TEST_ENV_VARIABLE_VALUE, System.getenv(TEST_ENV_VARIABLE_NAME));
+            assertEquals(TEST_ENV_VARIABLE_NAME, hostVariableName, "Expected to use env variable name");
+            assumeTrue(System.getenv().containsKey(TEST_ENV_VARIABLE_NAME), "Environment variable not set as required");
+            assertEquals(TEST_ENV_VARIABLE_VALUE, System.getenv(TEST_ENV_VARIABLE_NAME), "Environment variable value not as expected");
         } else {
-            assertNotEquals("Expected to use a different name", TEST_ENV_VARIABLE_NAME, hostVariableName);
+            assertNotEquals(TEST_ENV_VARIABLE_NAME, hostVariableName, "Expected to use a different name");
 
             setTestSystemProperty(hostVariableName, hostVariableValue);
         }
@@ -566,13 +573,13 @@
 
         Object o = ctx.lookup(factoryName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsConnectionFactory.class, o.getClass());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsConnectionFactory.class, o.getClass(), "Unexpected class type for returned object");
 
-        assertEquals("Unexpected ClientID for returned factory", clientIdVariableValue, ((JmsConnectionFactory) o).getClientID());
+        assertEquals(clientIdVariableValue, ((JmsConnectionFactory) o).getClientID(), "Unexpected ClientID for returned factory");
 
         String expectedURI = "amqp://" + hostVariableValue + ":" + portVariableValue;
-        assertEquals("Unexpected URI for returned factory", expectedURI, ((JmsConnectionFactory) o).getRemoteURI());
+        assertEquals(expectedURI, ((JmsConnectionFactory) o).getRemoteURI(), "Unexpected URI for returned factory");
     }
 
     @Test
@@ -590,10 +597,10 @@
 
         Object o = ctx.lookup(lookupName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsQueue.class, o.getClass());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsQueue.class, o.getClass(), "Unexpected class type for returned object");
 
-        assertEquals("Unexpected name for returned queue", variableValue, ((JmsQueue) o).getQueueName());
+        assertEquals(variableValue, ((JmsQueue) o).getQueueName(), "Unexpected name for returned queue");
     }
 
     @Test
@@ -611,10 +618,10 @@
 
         Object o = ctx.lookup(lookupName);
 
-        assertNotNull("No object returned", o);
-        assertEquals("Unexpected class type for returned object", JmsTopic.class, o.getClass());
+        assertNotNull(o, "No object returned");
+        assertEquals(JmsTopic.class, o.getClass(), "Unexpected class type for returned object");
 
-        assertEquals("Unexpected name for returned queue", variableValue, ((JmsTopic) o).getTopicName());
+        assertEquals(variableValue, ((JmsTopic) o).getTopicName(), "Unexpected name for returned queue");
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
index fd86c57..e98fdfa 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
@@ -16,11 +16,12 @@
  */
 package org.apache.qpid.jms.message;
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+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.EOFException;
 import java.io.IOException;
@@ -41,7 +42,7 @@
 import org.apache.qpid.jms.message.facade.JmsBytesMessageFacade;
 import org.apache.qpid.jms.message.facade.test.JmsTestBytesMessageFacade;
 import org.apache.qpid.jms.message.facade.test.JmsTestMessageFactory;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 /**
@@ -71,7 +72,7 @@
         JmsBytesMessage bytesMessage = factory.createBytesMessage();
         bytesMessage.writeBytes(bytes);
         bytesMessage.reset();
-        assertEquals("Message reports unexpected length", bytes.length, bytesMessage.getBodyLength());
+        assertEquals(bytes.length, bytesMessage.getBodyLength(), "Message reports unexpected length");
     }
 
     /**
@@ -80,10 +81,12 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(expected = MessageNotReadableException.class)
+    @Test
     public void testGetBodyLengthOnNewMessageThrowsMessageNotReadableException() throws Exception {
-        JmsBytesMessage bytesMessage = factory.createBytesMessage();
-        bytesMessage.getBodyLength();
+        assertThrows(MessageNotReadableException.class, () -> {
+            JmsBytesMessage bytesMessage = factory.createBytesMessage();
+            bytesMessage.getBodyLength();
+        });
     }
 
     @Test
@@ -91,7 +94,7 @@
         JmsBytesMessage bytesMessage = factory.createBytesMessage();
         bytesMessage.onDispatch();
         //verify attempting to read bytes returns -1, i.e EOS
-        assertEquals("Expected input stream to be at end but data was returned", END_OF_STREAM, bytesMessage.readBytes(new byte[1]));
+        assertEquals(END_OF_STREAM, bytesMessage.readBytes(new byte[1]), "Expected input stream to be at end but data was returned");
     }
 
     @Test
@@ -108,10 +111,9 @@
         assertTrue(Arrays.equals(content, receivedBytes));
 
         // verify no more bytes remain, i.e EOS
-        assertEquals("Expected input stream to be at end but data was returned",
-                     END_OF_STREAM, bytesMessage.readBytes(new byte[1]));
+        assertEquals(END_OF_STREAM, bytesMessage.readBytes(new byte[1]), "Expected input stream to be at end but data was returned");
 
-        assertEquals("Message reports unexpected length", content.length, bytesMessage.getBodyLength());
+        assertEquals(content.length, bytesMessage.getBodyLength(), "Message reports unexpected length");
     }
 
     /**
@@ -120,14 +122,16 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(expected = MessageNotWriteableException.class)
+    @Test
     public void testReceivedBytesMessageThrowsMessageNotWriteableExceptionOnWriteBytes() throws Exception {
-        byte[] content = "myBytesData".getBytes();
-        JmsTestBytesMessageFacade facade = new JmsTestBytesMessageFacade(content);
+        assertThrows(MessageNotWriteableException.class, () -> {
+            byte[] content = "myBytesData".getBytes();
+            JmsTestBytesMessageFacade facade = new JmsTestBytesMessageFacade(content);
 
-        JmsBytesMessage bytesMessage = new JmsBytesMessage(facade);
-        bytesMessage.onDispatch();
-        bytesMessage.writeBytes(content);
+            JmsBytesMessage bytesMessage = new JmsBytesMessage(facade);
+            bytesMessage.onDispatch();
+            bytesMessage.writeBytes(content);
+        });
     }
 
     /**
@@ -136,11 +140,13 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(expected = MessageNotReadableException.class)
+    @Test
     public void testNewBytesMessageThrowsMessageNotReadableOnReadBytes() throws Exception {
-        JmsBytesMessage bytesMessage = factory.createBytesMessage();
-        byte[] receivedBytes = new byte[1];
-        bytesMessage.readBytes(receivedBytes);
+        assertThrows(MessageNotReadableException.class, () -> {
+            JmsBytesMessage bytesMessage = factory.createBytesMessage();
+            byte[] receivedBytes = new byte[1];
+            bytesMessage.readBytes(receivedBytes);
+        });
     }
 
     /**
@@ -156,9 +162,9 @@
 
         JmsBytesMessage bytesMessage = new JmsBytesMessage(facade);
         bytesMessage.onDispatch();
-        assertTrue("Message should not be writable", bytesMessage.isReadOnlyBody());
+        assertTrue(bytesMessage.isReadOnlyBody(), "Message should not be writable");
         bytesMessage.clearBody();
-        assertFalse("Message should be writable", bytesMessage.isReadOnlyBody());
+        assertFalse(bytesMessage.isReadOnlyBody(), "Message should be writable");
     }
 
     /**
@@ -175,11 +181,11 @@
         JmsBytesMessage bytesMessage = new JmsBytesMessage(facade);
         bytesMessage.onDispatch();
 
-        assertTrue("Expected message content but none was present", facade.getBodyLength() > 0);
-        assertEquals("Expected data from facade", 1, facade.getInputStream().read(new byte[1]));
+        assertTrue(facade.getBodyLength() > 0, "Expected message content but none was present");
+        assertEquals(1, facade.getInputStream().read(new byte[1]), "Expected data from facade");
         bytesMessage.clearBody();
-        assertTrue("Expected no message content from facade", facade.getBodyLength() == 0);
-        assertEquals("Expected no data from facade, but got some", END_OF_STREAM, facade.getInputStream().read(new byte[1]));
+        assertTrue(facade.getBodyLength() == 0, "Expected no message content from facade");
+        assertEquals(END_OF_STREAM, facade.getInputStream().read(new byte[1]), "Expected no data from facade, but got some");
     }
 
     /**
@@ -195,7 +201,7 @@
 
         JmsBytesMessage bytesMessage = new JmsBytesMessage(facade);
         bytesMessage.onDispatch();
-        assertEquals("Unexpected message length", content.length, bytesMessage.getBodyLength());
+        assertEquals(content.length, bytesMessage.getBodyLength(), "Unexpected message length");
         bytesMessage.clearBody();
 
         try {
@@ -247,10 +253,10 @@
 
         JmsBytesMessage bytesMessage = new JmsBytesMessage(facade);
 
-        assertFalse("Message should be writable", bytesMessage.isReadOnlyBody());
+        assertFalse(bytesMessage.isReadOnlyBody(), "Message should be writable");
         bytesMessage.writeBytes(content);
         bytesMessage.reset();
-        assertTrue("Message should not be writable", bytesMessage.isReadOnlyBody());
+        assertTrue(bytesMessage.isReadOnlyBody(), "Message should not be writable");
 
         // retrieve the bytes, check they match
         byte[] resetBytes = new byte[content.length];
@@ -268,7 +274,7 @@
     public void testReadBytesWithZeroLengthDestination() throws Exception {
         JmsBytesMessage bytesMessage = factory.createBytesMessage();
         bytesMessage.reset();
-        assertEquals("Did not expect any bytes to be read", 0, bytesMessage.readBytes(new byte[0]));
+        assertEquals(0, bytesMessage.readBytes(new byte[0]), "Did not expect any bytes to be read");
     }
 
     /**
@@ -277,12 +283,14 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test
     public void testReadBytesWithNegativeLengthThrowsIOOBE() throws Exception
     {
-        JmsBytesMessage bytesMessage = factory.createBytesMessage();
-        bytesMessage.reset();
-        bytesMessage.readBytes(new byte[0], -1);
+        assertThrows(IndexOutOfBoundsException.class, () -> {
+            JmsBytesMessage bytesMessage = factory.createBytesMessage();
+            bytesMessage.reset();
+            bytesMessage.readBytes(new byte[0], -1);
+        });
     }
 
     /**
@@ -292,11 +300,13 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test
     public void testReadBytesWithLengthGreatThanArraySizeThrowsIOOBE() throws Exception {
-        JmsBytesMessage bytesMessage = factory.createBytesMessage();
-        bytesMessage.reset();
-        bytesMessage.readBytes(new byte[1], 2);
+        assertThrows(IndexOutOfBoundsException.class, () -> {
+            JmsBytesMessage bytesMessage = factory.createBytesMessage();
+            bytesMessage.reset();
+            bytesMessage.readBytes(new byte[1], 2);
+        });
     }
 
     /**
@@ -305,10 +315,12 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(expected=NullPointerException.class)
+    @Test
     public void testWriteObjectWithNullThrowsNPE() throws Exception {
-        JmsBytesMessage bytesMessage = factory.createBytesMessage();
-        bytesMessage.writeObject(null);
+        assertThrows(NullPointerException.class, () -> {
+            JmsBytesMessage bytesMessage = factory.createBytesMessage();
+            bytesMessage.writeObject(null);
+        });
     }
 
     /**
@@ -317,10 +329,12 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(expected=MessageFormatException.class)
+    @Test
     public void testWriteObjectWithIllegalTypeThrowsMFE() throws Exception {
-        JmsBytesMessage bytesMessage = factory.createBytesMessage();
-        bytesMessage.writeObject(new Object());
+        assertThrows(MessageFormatException.class, () -> {
+            JmsBytesMessage bytesMessage = factory.createBytesMessage();
+            bytesMessage.writeObject(new Object());
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsDefaultUnresolvedDestinationTransformerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsDefaultUnresolvedDestinationTransformerTest.java
index c45a947..591f881 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsDefaultUnresolvedDestinationTransformerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsDefaultUnresolvedDestinationTransformerTest.java
@@ -16,9 +16,10 @@
  */
 package org.apache.qpid.jms.message;
 
-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.assertNotNull;
+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 jakarta.jms.Destination;
 import jakarta.jms.JMSException;
@@ -28,7 +29,7 @@
 import org.apache.qpid.jms.JmsDestination;
 import org.apache.qpid.jms.JmsQueue;
 import org.apache.qpid.jms.JmsTopic;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 public class JmsDefaultUnresolvedDestinationTransformerTest {
@@ -111,9 +112,11 @@
         assertTrue(destination instanceof JmsQueue);
     }
 
-    @Test(expected=JMSException.class)
+    @Test
     public void testTransformStringWithNullThrowsJMSEx() throws JMSException {
-        transformer.transform((String) null);
+        assertThrows(JMSException.class, () -> {
+            transformer.transform((String) null);
+        });
     }
 
     //-------- Custom foreign destination type -------------------------------//
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsInboundMessageDispatchTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsInboundMessageDispatchTest.java
index d80f4f1..b0b33af 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsInboundMessageDispatchTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsInboundMessageDispatchTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.message;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-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.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.UUID;
 
@@ -27,7 +27,7 @@
 import org.apache.qpid.jms.meta.JmsSessionId;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.UnsignedLong;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class JmsInboundMessageDispatchTest {
 
@@ -50,22 +50,22 @@
         envelope2.setConsumerId(consumerId2);
         envelope2.setMessageId("myMessageId");
 
-        assertFalse("objects should not be equal", envelope1.equals(envelope2));
-        assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+        assertFalse(envelope1.equals(envelope2), "objects should not be equal");
+        assertFalse(envelope2.equals(envelope1), "objects should still not be equal");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+        assertNotEquals(envelope1.hashCode(), envelope2.hashCode(), "hashCodes should not be the same");
 
         envelope2.setMessageId(null);
-        assertFalse("objects should not be equal", envelope1.equals(envelope2));
-        assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+        assertFalse(envelope1.equals(envelope2), "objects should not be equal");
+        assertFalse(envelope2.equals(envelope1), "objects should still not be equal");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+        assertNotEquals(envelope1.hashCode(), envelope2.hashCode(), "hashCodes should not be the same");
 
         envelope2.setConsumerId(null);
-        assertTrue("objects should be equal", envelope1.equals(envelope2));
-        assertTrue("objects should still be equal", envelope2.equals(envelope1));
+        assertTrue(envelope1.equals(envelope2), "objects should be equal");
+        assertTrue(envelope2.equals(envelope1), "objects should still be equal");
     }
 
     @Test
@@ -74,10 +74,10 @@
         JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
         JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
 
-        assertTrue("objects should be equal", envelope1.equals(envelope2));
-        assertTrue("objects should still be equal", envelope2.equals(envelope1));
+        assertTrue(envelope1.equals(envelope2), "objects should be equal");
+        assertTrue(envelope2.equals(envelope1), "objects should still be equal");
 
-        assertEquals("hashCodes should be the same", envelope1.hashCode(), envelope2.hashCode());
+        assertEquals(envelope1.hashCode(), envelope2.hashCode(), "hashCodes should be the same");
     }
 
     @Test
@@ -86,11 +86,11 @@
         JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
         JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence + 1);
 
-        assertFalse("objects should not be equal", envelope1.equals(envelope2));
-        assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+        assertFalse(envelope1.equals(envelope2), "objects should not be equal");
+        assertFalse(envelope2.equals(envelope1), "objects should still not be equal");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+        assertNotEquals(envelope1.hashCode(), envelope2.hashCode(), "hashCodes should not be the same");
     }
 
     @Test
@@ -106,11 +106,11 @@
         JmsConsumerId consumerId2 = new JmsConsumerId(sessionId, 2);
         envelope2.setConsumerId(consumerId2);
 
-        assertFalse("objects should not be equal", envelope1.equals(envelope2));
-        assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+        assertFalse(envelope1.equals(envelope2), "objects should not be equal");
+        assertFalse(envelope2.equals(envelope1), "objects should still not be equal");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+        assertNotEquals(envelope1.hashCode(), envelope2.hashCode(), "hashCodes should not be the same");
     }
 
     @Test
@@ -125,10 +125,10 @@
         JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
         envelope2.setConsumerId(consumerId);
 
-        assertTrue("objects should be equal", envelope1.equals(envelope2));
-        assertTrue("objects should still be equal", envelope2.equals(envelope1));
+        assertTrue(envelope1.equals(envelope2), "objects should be equal");
+        assertTrue(envelope2.equals(envelope1), "objects should still be equal");
 
-        assertEquals("hashCodes should be the same", envelope1.hashCode(), envelope2.hashCode());
+        assertEquals(envelope1.hashCode(), envelope2.hashCode(), "hashCodes should be the same");
     }
 
     @Test
@@ -146,10 +146,10 @@
         envelope2.setConsumerId(consumerId);
         envelope2.setMessageId(messageId);
 
-        assertTrue("objects should be equal", envelope1.equals(envelope2));
-        assertTrue("objects should still be equal", envelope2.equals(envelope1));
+        assertTrue(envelope1.equals(envelope2), "objects should be equal");
+        assertTrue(envelope2.equals(envelope1), "objects should still be equal");
 
-        assertEquals("hashCodes should be the same", envelope1.hashCode(), envelope2.hashCode());
+        assertEquals(envelope1.hashCode(), envelope2.hashCode(), "hashCodes should be the same");
     }
 
     @Test
@@ -168,11 +168,11 @@
         envelope2.setConsumerId(consumerId);
         envelope2.setMessageId(messageId2);
 
-        assertFalse("objects should not be equal", envelope1.equals(envelope2));
-        assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+        assertFalse(envelope1.equals(envelope2), "objects should not be equal");
+        assertFalse(envelope2.equals(envelope1), "objects should still not be equal");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+        assertNotEquals(envelope1.hashCode(), envelope2.hashCode(), "hashCodes should not be the same");
     }
 
     @Test
@@ -191,11 +191,11 @@
         envelope2.setConsumerId(consumerId);
         envelope2.setMessageId(messageId2);
 
-        assertFalse("objects should not be equal", envelope1.equals(envelope2));
-        assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+        assertFalse(envelope1.equals(envelope2), "objects should not be equal");
+        assertFalse(envelope2.equals(envelope1), "objects should still not be equal");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+        assertNotEquals(envelope1.hashCode(), envelope2.hashCode(), "hashCodes should not be the same");
     }
 
     @Test
@@ -213,10 +213,10 @@
         envelope2.setConsumerId(consumerId);
         envelope2.setMessageId(messageId);
 
-        assertFalse("objects should not be equal", envelope1.equals(envelope2));
-        assertFalse("objects should still not be equal", envelope2.equals(envelope1));
+        assertFalse(envelope1.equals(envelope2), "objects should not be equal");
+        assertFalse(envelope2.equals(envelope1), "objects should still not be equal");
 
         // Not strictly a requirement, but expected in this case
-        assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
+        assertNotEquals(envelope1.hashCode(), envelope2.hashCode(), "hashCodes should not be the same");
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMapMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMapMessageTest.java
index 0ddbfb4..7287335 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMapMessageTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMapMessageTest.java
@@ -16,11 +16,12 @@
  */
 package org.apache.qpid.jms.message;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-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.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.ArrayList;
 import java.util.Arrays;
@@ -34,7 +35,7 @@
 import org.apache.qpid.jms.message.facade.JmsMapMessageFacade;
 import org.apache.qpid.jms.message.facade.test.JmsTestMapMessageFacade;
 import org.apache.qpid.jms.message.facade.test.JmsTestMessageFactory;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test that the JMS level JmsMapMessage using a simple default message facade follows
@@ -57,7 +58,7 @@
         JmsMapMessage mapMessage = factory.createMapMessage();
         Enumeration<?> names = mapMessage.getMapNames();
 
-        assertFalse("Expected new message to have no map names", names.hasMoreElements());
+        assertFalse(names.hasMoreElements(), "Expected new message to have no map names");
     }
 
     /**
@@ -83,9 +84,9 @@
             count++;
             elements.add(names.nextElement());
         }
-        assertEquals("expected 2 map keys in enumeration", 2, count);
-        assertTrue("expected key was not found: " + myKey1, elements.contains(myKey1));
-        assertTrue("expected key was not found: " + myKey2, elements.contains(myKey2));
+        assertEquals(2, count, "expected 2 map keys in enumeration");
+        assertTrue(elements.contains(myKey1), "expected key was not found: " + myKey1);
+        assertTrue(elements.contains(myKey2), "expected key was not found: " + myKey2);
     }
 
     /**
@@ -148,9 +149,9 @@
         JmsMapMessage mapMessage = new JmsMapMessage(facade);
         mapMessage.onDispatch();
 
-        assertTrue("expected message to be read-only", mapMessage.isReadOnlyBody());
+        assertTrue(mapMessage.isReadOnlyBody(), "expected message to be read-only");
         mapMessage.clearBody();
-        assertFalse("expected message to be writable", mapMessage.isReadOnlyBody());
+        assertFalse(mapMessage.isReadOnlyBody(), "expected message to be writable");
         mapMessage.setObject("name", "value");
     }
 
@@ -168,9 +169,9 @@
 
         JmsMapMessage mapMessage = new JmsMapMessage(facade);
 
-        assertTrue("key should exist: " + myKey1, mapMessage.itemExists(myKey1));
+        assertTrue(mapMessage.itemExists(myKey1), "key should exist: " + myKey1);
         mapMessage.clearBody();
-        assertFalse("key should not exist", mapMessage.itemExists(myKey1));
+        assertFalse(mapMessage.itemExists(myKey1), "key should not exist");
     }
 
     /**
@@ -216,10 +217,12 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(expected=MessageFormatException.class)
+    @Test
     public void testSetObjectWithIllegalTypeThrowsMFE() throws Exception {
-        JmsMapMessage mapMessage = factory.createMapMessage();
-        mapMessage.setObject("myPKey", new Exception());
+        assertThrows(MessageFormatException.class, () -> {
+            JmsMapMessage mapMessage = factory.createMapMessage();
+            mapMessage.setObject("myPKey", new Exception());
+        });
     }
 
     @Test
@@ -383,12 +386,12 @@
         boolean value = true;
 
         mapMessage.setBoolean(name, value);
-        assertEquals("value not as expected", value, mapMessage.getBoolean(name));
+        assertEquals(value, mapMessage.getBoolean(name), "value not as expected");
 
         assertGetMapEntryEquals(mapMessage, name, String.valueOf(value), String.class);
 
         mapMessage.setBoolean(name, !value);
-        assertEquals("value not as expected", !value, mapMessage.getBoolean(name));
+        assertEquals(!value, mapMessage.getBoolean(name), "value not as expected");
 
         assertGetMapEntryEquals(mapMessage, name, String.valueOf(!value), String.class);
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessagePropertyIntercepterTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessagePropertyIntercepterTest.java
index 6044b17..89b1347 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessagePropertyIntercepterTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessagePropertyIntercepterTest.java
@@ -33,11 +33,12 @@
 import static org.apache.qpid.jms.message.JmsMessageSupport.JMS_TIMESTAMP;
 import static org.apache.qpid.jms.message.JmsMessageSupport.JMS_TYPE;
 import static org.apache.qpid.jms.message.JmsMessageSupport.RELEASED;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-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.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 jakarta.jms.JMSException;
 import jakarta.jms.Message;
@@ -48,7 +49,7 @@
 import org.apache.qpid.jms.JmsQueue;
 import org.apache.qpid.jms.JmsSession;
 import org.apache.qpid.jms.message.facade.JmsMessageFacade;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 public class JmsMessagePropertyIntercepterTest {
@@ -122,13 +123,15 @@
         assertEquals(destination.getAddress(), JmsMessagePropertyIntercepter.getProperty(message, JMS_DESTINATION));
     }
 
-    @Test(expected=JMSException.class)
+    @Test
     public void testSetJMSDestination() throws JMSException {
-        JmsMessageFacade facade = Mockito.mock(JmsMessageFacade.class);
-        JmsMessage message = Mockito.mock(JmsMapMessage.class);
-        Mockito.when(message.getFacade()).thenReturn(facade);
-        String destinationName = new String("TestDestination");
-        JmsMessagePropertyIntercepter.setProperty(message, JMS_DESTINATION, destinationName);
+        assertThrows(JMSException.class, () -> {
+            JmsMessageFacade facade = Mockito.mock(JmsMessageFacade.class);
+            JmsMessage message = Mockito.mock(JmsMapMessage.class);
+            Mockito.when(message.getFacade()).thenReturn(facade);
+            String destinationName = new String("TestDestination");
+            JmsMessagePropertyIntercepter.setProperty(message, JMS_DESTINATION, destinationName);
+        });
     }
 
     @Test
@@ -234,13 +237,15 @@
         assertEquals(destination.getAddress(), JmsMessagePropertyIntercepter.getProperty(message, JMS_REPLYTO));
     }
 
-    @Test(expected=JMSException.class)
+    @Test
     public void testSetJMSReplyTo() throws JMSException {
-        JmsMessageFacade facade = Mockito.mock(JmsMessageFacade.class);
-        JmsMessage message = Mockito.mock(JmsMapMessage.class);
-        Mockito.when(message.getFacade()).thenReturn(facade);
-        String destinationName = new String("TestDestination");
-        JmsMessagePropertyIntercepter.setProperty(message, JMS_REPLYTO, destinationName);
+        assertThrows(JMSException.class, () -> {
+            JmsMessageFacade facade = Mockito.mock(JmsMessageFacade.class);
+            JmsMessage message = Mockito.mock(JmsMapMessage.class);
+            Mockito.when(message.getFacade()).thenReturn(facade);
+            String destinationName = new String("TestDestination");
+            JmsMessagePropertyIntercepter.setProperty(message, JMS_REPLYTO, destinationName);
+        });
     }
 
     @Test
@@ -1269,8 +1274,8 @@
         Mockito.when(message.getFacade()).thenReturn(facade);
         Mockito.when(facade.getGroupId()).thenReturn("GROUP_ID");
         assertTrue(JmsMessagePropertyIntercepter.getPropertyNames(message, false).contains(JMSX_GROUPID));
-        assertTrue(JMSX_GROUPID + " is not a header and should be included",
-                  JmsMessagePropertyIntercepter.getPropertyNames(message, true).contains(JMSX_GROUPID));
+        assertTrue(JmsMessagePropertyIntercepter.getPropertyNames(message, true).contains(JMSX_GROUPID),
+                  JMSX_GROUPID + " is not a header and should be included");
     }
 
     @Test
@@ -1366,8 +1371,8 @@
         Mockito.when(message.getFacade()).thenReturn(facade);
         Mockito.when(facade.getGroupSequence()).thenReturn(1);
         assertTrue(JmsMessagePropertyIntercepter.getPropertyNames(message, false).contains(JMSX_GROUPSEQ));
-        assertTrue(JMSX_GROUPSEQ + " is not a header and should be included",
-                   JmsMessagePropertyIntercepter.getPropertyNames(message, true).contains(JMSX_GROUPSEQ));
+        assertTrue(JmsMessagePropertyIntercepter.getPropertyNames(message, true).contains(JMSX_GROUPSEQ),
+                   JMSX_GROUPSEQ + " is not a header and should be included");
     }
 
     @Test
@@ -1463,8 +1468,8 @@
         Mockito.when(message.getFacade()).thenReturn(facade);
         Mockito.when(facade.getDeliveryCount()).thenReturn(2);
         assertTrue(JmsMessagePropertyIntercepter.getPropertyNames(message, false).contains(JMSX_DELIVERY_COUNT));
-        assertTrue(JMSX_DELIVERY_COUNT + " is not a header and should be included",
-                   JmsMessagePropertyIntercepter.getPropertyNames(message, true).contains(JMSX_DELIVERY_COUNT));
+        assertTrue(JmsMessagePropertyIntercepter.getPropertyNames(message, true).contains(JMSX_DELIVERY_COUNT),
+                   JMSX_DELIVERY_COUNT + " is not a header and should be included");
     }
 
     @Test
@@ -1573,8 +1578,8 @@
         Mockito.when(message.getFacade()).thenReturn(facade);
         Mockito.when(facade.getUserId()).thenReturn("Administrator");
         assertTrue(JmsMessagePropertyIntercepter.getPropertyNames(message, false).contains(JMSX_USERID));
-        assertTrue(JMSX_USERID + " is not a header and should be included",
-                   JmsMessagePropertyIntercepter.getPropertyNames(message, true).contains(JMSX_USERID));
+        assertTrue(JmsMessagePropertyIntercepter.getPropertyNames(message, true).contains(JMSX_USERID),
+                   JMSX_USERID + " is not a header and should be included");
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
index 1262b4d..8e86987 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
@@ -19,12 +19,12 @@
 import static org.apache.qpid.jms.message.JmsMessageSupport.ACCEPTED;
 import static org.apache.qpid.jms.message.JmsMessageSupport.JMS_AMQP_ACK_TYPE;
 import static org.apache.qpid.jms.message.JmsMessageSupport.RELEASED;
-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.Serializable;
 import java.util.Enumeration;
@@ -50,8 +50,8 @@
 import org.apache.qpid.jms.message.facade.JmsMessageFacade;
 import org.apache.qpid.jms.message.facade.test.JmsTestMessageFacade;
 import org.apache.qpid.jms.message.facade.test.JmsTestMessageFactory;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -74,7 +74,7 @@
     private long jmsTimestamp;
     private long[] consumerIDs;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         this.jmsMessageID = "ID:TEST-ID:0:0:0:1";
         this.jmsCorrelationID = "testcorrelationid";
@@ -445,9 +445,9 @@
         assertTrue(testFacade.propertyExists(invalidPropName));
 
         if(!disableValidation) {
-            assertFalse("Property should be indicated to not exist", msg.propertyExists(invalidPropName));
+            assertFalse(msg.propertyExists(invalidPropName), "Property should be indicated to not exist");
         } else {
-            assertTrue("Property should be indicated to exist", msg.propertyExists(invalidPropName));
+            assertTrue(msg.propertyExists(invalidPropName), "Property should be indicated to exist");
         }
     }
 
@@ -575,10 +575,10 @@
             jmsxNameFound |= element.equals(jmsxName);
             headerNameFound1 |= element.equals(headerName);
         }
-        assertTrue("prop name not found", propNameFound);
-        assertTrue("jmsx prop name not found", jmsxNameFound);
+        assertTrue(propNameFound, "prop name not found");
+        assertTrue(jmsxNameFound, "jmsx prop name not found");
         // spec compliance, only non-'JMS header' props returned
-        assertFalse("header name should not have been found", headerNameFound1);
+        assertFalse(headerNameFound1, "header name should not have been found");
     }
 
     @Test
@@ -626,18 +626,18 @@
         }
 
         if (!disableValidation) {
-            assertFalse("Invalid prop name 1 was found", invalidPropName1Found);
-            assertFalse("Invalid prop name 2 was found", invalidPropName2Found);
+            assertFalse(invalidPropName1Found, "Invalid prop name 1 was found");
+            assertFalse(invalidPropName2Found, "Invalid prop name 2 was found");
         } else {
-            assertTrue("Invalid prop name 1 was not found", invalidPropName1Found);
-            assertTrue("Invalid prop name 2 was not found", invalidPropName2Found);
+            assertTrue(invalidPropName1Found, "Invalid prop name 1 was not found");
+            assertTrue(invalidPropName2Found, "Invalid prop name 2 was not found");
         }
-        assertTrue("valid prop name was not found", validPropNameFound);
+        assertTrue(validPropNameFound, "valid prop name was not found");
     }
 
     @Test
     @SuppressWarnings("rawtypes")
-    public void testGetAllPropertyNames() throws JMSException {
+    void testGetAllPropertyNames() throws JMSException {
         JmsMessage msg = factory.createMessage();
         String name1 = "floatProperty";
         msg.setFloatProperty(name1, 1.3f);
@@ -654,9 +654,9 @@
             found2 |= element.equals(name2);
             found3 |= element.equals(name3);
         }
-        assertTrue("prop name1 found", found1);
-        assertTrue("prop name2 found", found2);
-        assertTrue("prop name4 found", found3);
+        assertTrue(found1, "prop name1 found");
+        assertTrue(found2, "prop name2 found");
+        assertTrue(found3, "prop name4 found");
     }
 
     @Test
@@ -755,7 +755,7 @@
         JmsMessage msg = factory.createMessage();
         msg.setIntProperty("JMSXDeliveryCount", 1);
         int count = msg.getIntProperty("JMSXDeliveryCount");
-        assertTrue("expected delivery count = 1 - got: " + count, count == 1);
+        assertTrue(count == 1, "expected delivery count = 1 - got: " + count);
     }
 
     @Test
@@ -1525,11 +1525,11 @@
         JmsAcknowledgeCallback callback = new JmsAcknowledgeCallback(session);
         message.setAcknowledgeCallback(callback);
 
-        assertEquals("Unexpected ack type value", ACCEPTED, callback.getAckType());
+        assertEquals(ACCEPTED, callback.getAckType(), "Unexpected ack type value");
 
         message.setIntProperty(JMS_AMQP_ACK_TYPE, RELEASED);
 
-        assertEquals("Unexpected ack type value after setting prop", RELEASED, callback.getAckType());
+        assertEquals(RELEASED, callback.getAckType(), "Unexpected ack type value after setting prop");
     }
 
     //--------- Test isBodyAssignableTo method -------------------------------//
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTransformationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTransformationTest.java
index c8e7ff3..ccc3b79 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTransformationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTransformationTest.java
@@ -16,14 +16,14 @@
  */
 package org.apache.qpid.jms.message;
 
-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.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import jakarta.jms.DeliveryMode;
 import jakarta.jms.Destination;
@@ -46,7 +46,7 @@
 import org.apache.qpid.jms.message.foreign.ForeignJmsObjectMessage;
 import org.apache.qpid.jms.message.foreign.ForeignJmsStreamMessage;
 import org.apache.qpid.jms.message.foreign.ForeignJmsTextMessage;
-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/message/JmsObjectMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsObjectMessageTest.java
index 309d441..46e105f 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsObjectMessageTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsObjectMessageTest.java
@@ -16,14 +16,15 @@
  */
 package org.apache.qpid.jms.message;
 
-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.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.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.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -39,7 +40,7 @@
 import org.apache.qpid.jms.message.facade.JmsObjectMessageFacade;
 import org.apache.qpid.jms.message.facade.test.JmsTestMessageFactory;
 import org.apache.qpid.jms.message.facade.test.JmsTestObjectMessageFacade;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 /**
@@ -101,9 +102,9 @@
         JmsObjectMessage objectMessage = new JmsObjectMessage(facade);
         objectMessage.onDispatch();
 
-        assertTrue("Message should not be writable", objectMessage.isReadOnlyBody());
+        assertTrue(objectMessage.isReadOnlyBody(), "Message should not be writable");
         objectMessage.clearBody();
-        assertFalse("Message should be writable", objectMessage.isReadOnlyBody());
+        assertFalse(objectMessage.isReadOnlyBody(), "Message should be writable");
     }
 
     /**
@@ -120,14 +121,14 @@
         JmsObjectMessage objectMessage = new JmsObjectMessage(facade);
         objectMessage.onDispatch();
 
-        assertNotNull("Expected body section but none was present", facade.getSerializedObject());
+        assertNotNull(facade.getSerializedObject(), "Expected body section but none was present");
         objectMessage.clearBody();
 
         // check that the returned object is now null
-        assertNull("Unexpected object value", objectMessage.getObject());
+        assertNull(objectMessage.getObject(), "Unexpected object value");
 
         // verify the underlying message facade has no body
-        assertNull("Expected no body section", facade.getSerializedObject());
+        assertNull(facade.getSerializedObject(), "Expected no body section");
     }
 
     /**
@@ -149,24 +150,24 @@
 
         // verify we get a different-but-equal object back
         Serializable serialized = objectMessage.getObject();
-        assertTrue("Unexpected object type returned", serialized instanceof Map<?,?>);
+        assertTrue(serialized instanceof Map<?,?>, "Unexpected object type returned");
         Map<?,?> returnedObject1 = (Map<?,?>) serialized;
-        assertNotSame("Expected different objects, due to snapshot being taken", origMap, returnedObject1);
-        assertEquals("Expected equal objects, due to snapshot being taken", origMap, returnedObject1);
+        assertNotSame(origMap, returnedObject1, "Expected different objects, due to snapshot being taken");
+        assertEquals(origMap, returnedObject1, "Expected equal objects, due to snapshot being taken");
 
         // mutate the original object
         origMap.put("key2", "value2");
 
         // verify we get a different-but-equal object back when compared to the previously retrieved object
         Serializable serialized2 = objectMessage.getObject();
-        assertTrue("Unexpected object type returned", serialized2 instanceof Map<?,?>);
+        assertTrue(serialized2 instanceof Map<?,?>, "Unexpected object type returned");
         Map<?,?> returnedObject2 = (Map<?,?>) serialized2;
-        assertNotSame("Expected different objects, due to snapshot being taken", origMap, returnedObject2);
-        assertEquals("Expected equal objects, due to snapshot being taken", returnedObject1, returnedObject2);
+        assertNotSame(origMap, returnedObject2, "Expected different objects, due to snapshot being taken");
+        assertEquals(returnedObject1, returnedObject2, "Expected equal objects, due to snapshot being taken");
 
         // verify the mutated map is a different and not equal object
-        assertNotSame("Expected different objects, due to snapshot being taken", returnedObject1, returnedObject2);
-        assertNotEquals("Expected objects to differ, due to snapshot being taken", origMap, returnedObject2);
+        assertNotSame(returnedObject1, returnedObject2, "Expected different objects, due to snapshot being taken");
+        assertNotEquals(origMap, returnedObject2, "Expected objects to differ, due to snapshot being taken");
     }
 
     /**
@@ -202,12 +203,14 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(expected=MessageFormatException.class)
+    @Test
     public void testGetObjectWithFailedDeserialisationThrowsJMSMFE() throws Exception {
-        JmsObjectMessageFacade facade = Mockito.mock(JmsTestObjectMessageFacade.class);
-        Mockito.when(facade.getObject()).thenThrow(new ClassCastException("Failed to get object"));
-        JmsObjectMessage objectMessage = new JmsObjectMessage(facade);
-        objectMessage.getObject();
+        assertThrows(MessageFormatException.class, () -> {
+            JmsObjectMessageFacade facade = Mockito.mock(JmsTestObjectMessageFacade.class);
+            Mockito.when(facade.getObject()).thenThrow(new ClassCastException("Failed to get object"));
+            JmsObjectMessage objectMessage = new JmsObjectMessage(facade);
+            objectMessage.getObject();
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsOutboundMessageDispatchTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsOutboundMessageDispatchTest.java
index 374d562..a5634cc 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsOutboundMessageDispatchTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsOutboundMessageDispatchTest.java
@@ -16,23 +16,23 @@
  */
 package org.apache.qpid.jms.message;
 
-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 org.apache.qpid.jms.JmsTopic;
 import org.apache.qpid.jms.meta.JmsProducerId;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 public class JmsOutboundMessageDispatchTest {
 
     private JmsOutboundMessageDispatch envelope;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         envelope = new JmsOutboundMessageDispatch();
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsStreamMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsStreamMessageTest.java
index 0402096..4c0fff4 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsStreamMessageTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsStreamMessageTest.java
@@ -16,13 +16,14 @@
  */
 package org.apache.qpid.jms.message;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-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.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+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.math.BigInteger;
 import java.net.URI;
@@ -38,7 +39,7 @@
 import org.apache.qpid.jms.message.facade.JmsStreamMessageFacade;
 import org.apache.qpid.jms.message.facade.test.JmsTestMessageFactory;
 import org.apache.qpid.jms.message.facade.test.JmsTestStreamMessageFacade;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class JmsStreamMessageTest {
 
@@ -77,7 +78,7 @@
         streamMessage.reset();
 
         // check we get only the value added after the clear
-        assertFalse("expected value added after the clear", streamMessage.readBoolean());
+        assertFalse(streamMessage.readBoolean(), "expected value added after the clear");
 
         try {
             streamMessage.readBoolean();
@@ -132,9 +133,9 @@
         byte[] retrievedByteArray = new byte[bytes.length];
         int readBytesLength = streamMessage.readBytes(retrievedByteArray);
 
-        assertEquals("Number of bytes read did not match original array length", bytes.length, readBytesLength);
-        assertArrayEquals("Expected array to equal retrieved bytes", bytes, retrievedByteArray);
-        assertEquals("Expected completion return value", -1, streamMessage.readBytes(retrievedByteArray));
+        assertEquals(bytes.length, readBytesLength, "Number of bytes read did not match original array length");
+        assertArrayEquals(bytes, retrievedByteArray, "Expected array to equal retrieved bytes");
+        assertEquals(-1, streamMessage.readBytes(retrievedByteArray), "Expected completion return value");
     }
 
     /**
@@ -157,7 +158,7 @@
 
         assertGetStreamEntryThrowsMessageFormatException(streamMessage, byte[].class);
 
-        assertEquals("Expected written string", stringVal, streamMessage.readString());
+        assertEquals(stringVal, streamMessage.readString(), "Expected written string");
     }
 
     /**
@@ -288,17 +289,17 @@
 
         streamMessage.reset();
 
-        assertEquals("Got unexpected value from stream", nullEntryValue, streamMessage.readObject());
-        assertEquals("Got unexpected value from stream", boolEntryValue, streamMessage.readObject());
-        assertEquals("Got unexpected value from stream", byteEntryValue, streamMessage.readObject());
-        assertEquals("Got unexpected value from stream", shortEntryValue, streamMessage.readObject());
-        assertEquals("Got unexpected value from stream", intEntryValue, streamMessage.readObject());
-        assertEquals("Got unexpected value from stream", longEntryValue, streamMessage.readObject());
-        assertEquals("Got unexpected value from stream", floatEntryValue, streamMessage.readObject());
-        assertEquals("Got unexpected value from stream", doubleEntryValue, streamMessage.readObject());
-        assertEquals("Got unexpected value from stream", stringEntryValue, streamMessage.readObject());
-        assertEquals("Got unexpected value from stream", charEntryValue, streamMessage.readObject());
-        assertArrayEquals("Got unexpected value from stream", bytes, (byte[]) streamMessage.readObject());
+        assertEquals(nullEntryValue, streamMessage.readObject(), "Got unexpected value from stream");
+        assertEquals(boolEntryValue, streamMessage.readObject(), "Got unexpected value from stream");
+        assertEquals(byteEntryValue, streamMessage.readObject(), "Got unexpected value from stream");
+        assertEquals(shortEntryValue, streamMessage.readObject(), "Got unexpected value from stream");
+        assertEquals(intEntryValue, streamMessage.readObject(), "Got unexpected value from stream");
+        assertEquals(longEntryValue, streamMessage.readObject(), "Got unexpected value from stream");
+        assertEquals(floatEntryValue, streamMessage.readObject(), "Got unexpected value from stream");
+        assertEquals(doubleEntryValue, streamMessage.readObject(), "Got unexpected value from stream");
+        assertEquals(stringEntryValue, streamMessage.readObject(), "Got unexpected value from stream");
+        assertEquals(charEntryValue, streamMessage.readObject(), "Got unexpected value from stream");
+        assertArrayEquals(bytes, (byte[]) streamMessage.readObject(), "Got unexpected value from stream");
     }
 
     // ======= bytes =========
@@ -320,8 +321,8 @@
         byte[] dest = new byte[value.length];
 
         int readBytesLength = streamMessage.readBytes(dest);
-        assertEquals("Number of bytes read did not match expectation", value.length, readBytesLength);
-        assertArrayEquals("value not as expected", value, dest);
+        assertEquals(value.length, readBytesLength, "Number of bytes read did not match expectation");
+        assertArrayEquals(value, dest, "value not as expected");
     }
 
     /**
@@ -357,7 +358,7 @@
 
         streamMessage.reset();
 
-        assertEquals("Expected immediate completion signal", -1, streamMessage.readBytes(new byte[1]));
+        assertEquals(-1, streamMessage.readBytes(new byte[1]), "Expected immediate completion signal");
     }
 
     @Test
@@ -370,7 +371,7 @@
 
         byte[] fullRetrievedBytes = new byte[1];
 
-        assertEquals("Expected no bytes to be read, as none were written", 0, streamMessage.readBytes(fullRetrievedBytes));
+        assertEquals(0, streamMessage.readBytes(fullRetrievedBytes), "Expected no bytes to be read, as none were written");
     }
 
     @Test
@@ -385,10 +386,10 @@
         byte[] zeroDestination = new byte[0];
         byte[] fullRetrievedBytes = new byte[bytes.length];
 
-        assertEquals("Expected no bytes to be read", 0, streamMessage.readBytes(zeroDestination));
-        assertEquals("Expected all bytes to be read", bytes.length, streamMessage.readBytes(fullRetrievedBytes));
-        assertArrayEquals("Expected arrays to be equal", bytes, fullRetrievedBytes);
-        assertEquals("Expected completion signal", -1, streamMessage.readBytes(zeroDestination));
+        assertEquals(0, streamMessage.readBytes(zeroDestination), "Expected no bytes to be read");
+        assertEquals(bytes.length, streamMessage.readBytes(fullRetrievedBytes), "Expected all bytes to be read");
+        assertArrayEquals(bytes, fullRetrievedBytes, "Expected arrays to be equal");
+        assertEquals(-1, streamMessage.readBytes(zeroDestination), "Expected completion signal");
     }
 
     @Test
@@ -402,8 +403,8 @@
 
         byte[] retrievedBytes = (byte[]) streamMessage.readObject();
 
-        assertNotSame("Expected different array objects", bytes, retrievedBytes);
-        assertArrayEquals("Expected arrays to be equal", bytes, retrievedBytes);
+        assertNotSame(bytes, retrievedBytes, "Expected different array objects");
+        assertArrayEquals(bytes, retrievedBytes, "Expected arrays to be equal");
     }
 
     @Test
@@ -411,7 +412,7 @@
         JmsStreamMessage streamMessage = factory.createStreamMessage();
 
         byte[] bytes = new byte[] { (byte) 3, (byte) 78, (byte) 253, (byte) 26, (byte) 8 };
-        assertEquals("bytes should be odd length", 1, bytes.length % 2);
+        assertEquals(1, bytes.length % 2, "bytes should be odd length");
         int undersizedLength = 2;
         int remaining = 1;
 
@@ -421,16 +422,16 @@
         byte[] undersizedDestination = new byte[undersizedLength];
         byte[] fullRetrievedBytes = new byte[bytes.length];
 
-        assertEquals("Number of bytes read did not match destination array length", undersizedLength, streamMessage.readBytes(undersizedDestination));
+        assertEquals(undersizedLength, streamMessage.readBytes(undersizedDestination), "Number of bytes read did not match destination array length");
         int read = undersizedLength;
         System.arraycopy(undersizedDestination, 0, fullRetrievedBytes, 0, undersizedLength);
-        assertEquals("Number of bytes read did not match destination array length", undersizedLength, streamMessage.readBytes(undersizedDestination));
+        assertEquals(undersizedLength, streamMessage.readBytes(undersizedDestination), "Number of bytes read did not match destination array length");
         System.arraycopy(undersizedDestination, 0, fullRetrievedBytes, read, undersizedLength);
         read += undersizedLength;
-        assertEquals("Number of bytes read did not match expectation", remaining, streamMessage.readBytes(undersizedDestination));
+        assertEquals(remaining, streamMessage.readBytes(undersizedDestination), "Number of bytes read did not match expectation");
         System.arraycopy(undersizedDestination, 0, fullRetrievedBytes, read, remaining);
         read += remaining;
-        assertArrayEquals("Expected array to equal retrieved bytes", bytes, fullRetrievedBytes);
+        assertArrayEquals(bytes, fullRetrievedBytes, "Expected array to equal retrieved bytes");
     }
 
     @Test
@@ -445,9 +446,9 @@
         byte[] retrievedByteArray = new byte[bytes.length];
         int readBytesLength = streamMessage.readBytes(retrievedByteArray);
 
-        assertEquals("Number of bytes read did not match original array length", bytes.length, readBytesLength);
-        assertArrayEquals("Expected array to equal retrieved bytes", bytes, retrievedByteArray);
-        assertEquals("Expected completion return value", -1, streamMessage.readBytes(retrievedByteArray));
+        assertEquals(bytes.length, readBytesLength, "Number of bytes read did not match original array length");
+        assertArrayEquals(bytes, retrievedByteArray, "Expected array to equal retrieved bytes");
+        assertEquals(-1, streamMessage.readBytes(retrievedByteArray), "Expected completion return value");
     }
 
     @Test
@@ -462,8 +463,8 @@
         byte[] oversizedDestination = new byte[bytes.length + 1];
         int readBytesLength = streamMessage.readBytes(oversizedDestination);
 
-        assertEquals("Number of bytes read did not match original array length", bytes.length, readBytesLength);
-        assertArrayEquals("Expected array subset to equal retrieved bytes", bytes, Arrays.copyOfRange(oversizedDestination, 0, readBytesLength));
+        assertEquals(bytes.length, readBytesLength, "Number of bytes read did not match original array length");
+        assertArrayEquals(bytes, Arrays.copyOfRange(oversizedDestination, 0, readBytesLength), "Expected array subset to equal retrieved bytes");
     }
 
     /**
@@ -497,7 +498,7 @@
         int readBytesLength = streamMessage.readBytes(retrievedByteArray);
 
         assertEquals(partialLength, readBytesLength);
-        assertArrayEquals("Expected array subset to equal retrieved bytes", Arrays.copyOf(bytes, partialLength), retrievedByteArray);
+        assertArrayEquals(Arrays.copyOf(bytes, partialLength), retrievedByteArray, "Expected array subset to equal retrieved bytes");
 
         // check that using readObject does not return the full/remaining bytes as a new array
         try {
@@ -510,8 +511,9 @@
         // finish reading via reaBytes to ensure it can be completed
         readBytesLength = streamMessage.readBytes(retrievedByteArray);
         assertEquals(bytes.length - partialLength, readBytesLength);
-        assertArrayEquals("Expected array subset to equal retrieved bytes", Arrays.copyOfRange(bytes, partialLength, bytes.length),
-            Arrays.copyOfRange(retrievedByteArray, 0, readBytesLength));
+        assertArrayEquals(Arrays.copyOfRange(bytes, partialLength, bytes.length),
+            Arrays.copyOfRange(retrievedByteArray, 0, readBytesLength),
+            "Expected array subset to equal retrieved bytes");
     }
 
     /**
@@ -554,7 +556,7 @@
         streamMessage.writeBoolean(value);
         streamMessage.reset();
 
-        assertEquals("Value not as expected", value, streamMessage.readBoolean());
+        assertEquals(value, streamMessage.readBoolean(), "Value not as expected");
     }
 
     /**
@@ -612,7 +614,7 @@
         streamMessage.writeString(value);
         streamMessage.reset();
 
-        assertEquals("Value not as expected", value, streamMessage.readString());
+        assertEquals(value, streamMessage.readString(), "Value not as expected");
     }
 
     /**
@@ -708,7 +710,7 @@
         streamMessage.writeByte(value);
         streamMessage.reset();
 
-        assertEquals("Value not as expected", value, streamMessage.readByte());
+        assertEquals(value, streamMessage.readByte(), "Value not as expected");
     }
 
     /**
@@ -766,7 +768,7 @@
         streamMessage.writeShort(value);
         streamMessage.reset();
 
-        assertEquals("Value not as expected", value, streamMessage.readShort());
+        assertEquals(value, streamMessage.readShort(), "Value not as expected");
     }
 
     /**
@@ -824,7 +826,7 @@
         streamMessage.writeChar(value);
         streamMessage.reset();
 
-        assertEquals("Value not as expected", value, streamMessage.readChar());
+        assertEquals(value, streamMessage.readChar(), "Value not as expected");
     }
 
     /**
@@ -882,7 +884,7 @@
         streamMessage.writeInt(value);
         streamMessage.reset();
 
-        assertEquals("Value not as expected", value, streamMessage.readInt());
+        assertEquals(value, streamMessage.readInt(), "Value not as expected");
     }
 
     /**
@@ -940,7 +942,7 @@
         streamMessage.writeLong(value);
         streamMessage.reset();
 
-        assertEquals("Value not as expected", value, streamMessage.readLong());
+        assertEquals(value, streamMessage.readLong(), "Value not as expected");
     }
 
     /**
@@ -998,7 +1000,7 @@
         streamMessage.writeFloat(value);
         streamMessage.reset();
 
-        assertEquals("Value not as expected", value, streamMessage.readFloat(), 0.0);
+        assertEquals(value, streamMessage.readFloat(), 0.0, "Value not as expected");
     }
 
     /**
@@ -1056,7 +1058,7 @@
         streamMessage.writeDouble(value);
         streamMessage.reset();
 
-        assertEquals("Value not as expected", value, streamMessage.readDouble(), 0.0);
+        assertEquals(value, streamMessage.readDouble(), 0.0, "Value not as expected");
     }
 
     /**
@@ -1105,11 +1107,13 @@
 
     // ========= read failures ========
 
-    @Test(expected=NullPointerException.class)
+    @Test
     public void testReadBytesWithNullArrayThrowsNPE() throws JMSException {
-        JmsStreamMessage streamMessage = factory.createStreamMessage();
-        streamMessage.reset();
-        streamMessage.readBytes(null);
+        assertThrows(NullPointerException.class, () -> {
+            JmsStreamMessage streamMessage = factory.createStreamMessage();
+            streamMessage.reset();
+            streamMessage.readBytes(null);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsTextMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsTextMessageTest.java
index 2842f2e..ee6f630 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsTextMessageTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsTextMessageTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.message;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-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.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 
@@ -29,7 +29,7 @@
 import jakarta.jms.MessageNotWriteableException;
 
 import org.apache.qpid.jms.message.facade.test.JmsTestMessageFactory;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  *
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionIdTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionIdTest.java
index 11b6ff7..53339d4 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionIdTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionIdTest.java
@@ -16,16 +16,17 @@
  */
 package org.apache.qpid.jms.meta;
 
-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.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for JmsConnectionId
@@ -35,7 +36,7 @@
     private String firstId;
     private String secondId;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
@@ -43,34 +44,46 @@
         secondId = generator.generateId();
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromStringThrowsWhenNull() {
-        new JmsConnectionId((String) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConnectionId((String) null);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromStringThrowsWhenEmpty() {
-        new JmsConnectionId("");
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConnectionId("");
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromConnectionIdThrowsWhenNull() {
-        new JmsConnectionId((JmsConnectionId) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConnectionId((JmsConnectionId) null);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromSessionIdThrowsWhenNull() {
-        new JmsConnectionId((JmsSessionId) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConnectionId((JmsSessionId) null);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromProducerIdThrowsWhenNull() {
-        new JmsConnectionId((JmsProducerId) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConnectionId((JmsProducerId) null);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromConsumerIdThrowsWhenNull() {
-        new JmsConnectionId((JmsConsumerId) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConnectionId((JmsConsumerId) null);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
index 2baf223..f49c0b4 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
@@ -16,13 +16,14 @@
  */
 package org.apache.qpid.jms.meta;
 
-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.assertSame;
-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.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 java.nio.charset.StandardCharsets;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -32,8 +33,8 @@
 import org.apache.qpid.jms.policy.JmsDefaultPresettlePolicy;
 import org.apache.qpid.jms.policy.JmsDefaultRedeliveryPolicy;
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for class JmsConnectionInfo
@@ -43,7 +44,7 @@
     private JmsConnectionId firstId;
     private JmsConnectionId secondId;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
@@ -51,9 +52,11 @@
         secondId = new JmsConnectionId(generator.generateId());
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testExceptionWhenCreatedWithNullConnectionId() {
-        new JmsConnectionInfo(null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConnectionInfo(null);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerIdTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerIdTest.java
index 89ff17e..162168e 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerIdTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerIdTest.java
@@ -16,16 +16,17 @@
  */
 package org.apache.qpid.jms.meta;
 
-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.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test forJmsConsumerId
@@ -35,7 +36,7 @@
     private JmsSessionId firstId;
     private JmsSessionId secondId;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
@@ -45,34 +46,46 @@
         secondId = new JmsSessionId(rootId, 2);
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromStringThrowsWhenNull() {
-        new JmsConsumerId((String) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConsumerId((String) null);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromStringThrowsWhenEmpty() {
-        new JmsConsumerId("");
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConsumerId("");
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromConnectionStringThrowsWhenNull() {
-        new JmsConsumerId((String) null, 1, 1);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConsumerId((String) null, 1, 1);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateConnectionFromStringThrowsWhenEmpty() {
-        new JmsConsumerId("", 1, 1);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConsumerId("", 1, 1);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromSessionIdThrowsWhenNull() {
-        new JmsConsumerId((JmsSessionId) null, 1);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConsumerId((JmsSessionId) null, 1);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromConsumerIdThrowsWhenNull() {
-        new JmsConsumerId((JmsConsumerId) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConsumerId((JmsConsumerId) null);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerInfoTest.java
index d7bc544..ecfc2f0 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerInfoTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerInfoTest.java
@@ -16,21 +16,22 @@
  */
 package org.apache.qpid.jms.meta;
 
-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.assertSame;
-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.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 java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.qpid.jms.JmsTopic;
 import org.apache.qpid.jms.policy.JmsDefaultRedeliveryPolicy;
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -43,7 +44,7 @@
     private JmsSessionId firstSessionId;
     private JmsSessionId secondSessionId;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
@@ -56,9 +57,11 @@
         secondId = new JmsConsumerId(secondSessionId, 2);
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testExceptionWhenCreatedWithNullConnectionId() {
-        new JmsConsumerInfo(null, null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsConsumerInfo(null, null);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsDefaultResourceVisitorTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsDefaultResourceVisitorTest.java
index 00bf2f4..d0b2ed1 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsDefaultResourceVisitorTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsDefaultResourceVisitorTest.java
@@ -18,8 +18,8 @@
 
 import org.apache.qpid.jms.JmsTemporaryTopic;
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -32,7 +32,7 @@
     private JmsConsumerId consumerId;
     private JmsTransactionId transactionId;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerIdTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerIdTest.java
index 61c2733..12c00d6 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerIdTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerIdTest.java
@@ -16,16 +16,17 @@
  */
 package org.apache.qpid.jms.meta;
 
-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.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -35,7 +36,7 @@
     private JmsSessionId firstId;
     private JmsSessionId secondId;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
@@ -45,34 +46,46 @@
         secondId = new JmsSessionId(rootId, 2);
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromStringThrowsWhenNull() {
-        new JmsProducerId((String) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsProducerId((String) null);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromStringThrowsWhenEmpty() {
-        new JmsProducerId("");
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsProducerId("");
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromConnectionStringThrowsWhenNull() {
-        new JmsProducerId((String) null, 1, 1);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsProducerId((String) null, 1, 1);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateConnectionFromStringThrowsWhenEmpty() {
-        new JmsProducerId("", 1, 1);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsProducerId("", 1, 1);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromSessionIdThrowsWhenNull() {
-        new JmsProducerId((JmsSessionId) null, 1);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsProducerId((JmsSessionId) null, 1);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromConsumerIdThrowsWhenNull() {
-        new JmsProducerId((JmsProducerId) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsProducerId((JmsProducerId) null);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerInfoTest.java
index 79ef89f..584f79a 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerInfoTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerInfoTest.java
@@ -16,20 +16,20 @@
  */
 package org.apache.qpid.jms.meta;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.qpid.jms.JmsTopic;
 import org.apache.qpid.jms.message.JmsMessageIDBuilder;
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 public class JmsProducerInfoTest {
 
@@ -39,7 +39,7 @@
     private JmsSessionId firstSessionId;
     private JmsSessionId secondSessionId;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionIdTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionIdTest.java
index 6346f81..e55e3b2 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionIdTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionIdTest.java
@@ -16,16 +16,17 @@
  */
 package org.apache.qpid.jms.meta;
 
-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.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -35,7 +36,7 @@
     private JmsConnectionId firstId;
     private JmsConnectionId secondId;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
@@ -45,34 +46,46 @@
         secondId = new JmsConnectionId(rootId);
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromConnectionStringThrowsWhenNull() {
-        new JmsSessionId((String) null, 1);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsSessionId((String) null, 1);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateConnectionFromStringThrowsWhenEmpty() {
-        new JmsSessionId("", 1);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsSessionId("", 1);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromConnectionIdThrowsWhenNull() {
-        new JmsSessionId((JmsConnectionId) null, 1);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsSessionId((JmsConnectionId) null, 1);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromSessionIdThrowsWhenNull() {
-        new JmsSessionId((JmsSessionId) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsSessionId((JmsSessionId) null);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromConsumerIdThrowsWhenNull() {
-        new JmsSessionId((JmsConsumerId) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsSessionId((JmsConsumerId) null);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testCreateFromProducerIdThrowsWhenNull() {
-        new JmsSessionId((JmsProducerId) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsSessionId((JmsProducerId) null);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionInfoTest.java
index e96e892..d5b40b4 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionInfoTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionInfoTest.java
@@ -16,12 +16,13 @@
  */
 package org.apache.qpid.jms.meta;
 
-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.assertSame;
-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.assertNotSame;
+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 java.util.concurrent.atomic.AtomicBoolean;
 
@@ -32,8 +33,8 @@
 import org.apache.qpid.jms.policy.JmsDefaultPresettlePolicy;
 import org.apache.qpid.jms.policy.JmsDefaultRedeliveryPolicy;
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests for the JmsSessionInfo object
@@ -45,7 +46,7 @@
 
     private JmsConnectionInfo connectionInfo;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
@@ -58,14 +59,18 @@
         connectionInfo = new JmsConnectionInfo(connectionId);
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testExceptionWhenCreatedWithNullConnectionId() {
-        new JmsSessionInfo(null, 1);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsSessionInfo(null, 1);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testExceptionWhenCreatedWithNullSessionId() {
-        new JmsSessionInfo(null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsSessionInfo(null);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionIdTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionIdTest.java
index b910264..1d6baff 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionIdTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionIdTest.java
@@ -16,15 +16,16 @@
  */
 package org.apache.qpid.jms.meta;
 
-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.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -34,7 +35,7 @@
     private JmsConnectionId firstId;
     private JmsConnectionId secondId;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
@@ -44,9 +45,11 @@
         secondId = new JmsConnectionId(rootId);
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testNullIdThrowsException() {
-        new JmsTransactionId(null, 0);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsTransactionId(null, 0);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionInfoTest.java
index 3417460..f700b7f 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionInfoTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionInfoTest.java
@@ -16,17 +16,18 @@
  */
 package org.apache.qpid.jms.meta;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.qpid.jms.util.IdGenerator;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -42,7 +43,7 @@
     private JmsTransactionId firstTxId;
     private JmsTransactionId secondTxId;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         IdGenerator generator = new IdGenerator();
 
@@ -56,14 +57,18 @@
         secondTxId = new JmsTransactionId(secondId, 2);
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testThrowsWhenSessionIdIsNull() {
-        new JmsTransactionInfo(null, firstTxId);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsTransactionInfo(null, firstTxId);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testThrowsWhenTransactionIdIsNull() {
-        new JmsTransactionInfo(firstSessionId, null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            new JmsTransactionInfo(firstSessionId, null);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultDeserializationPolicyTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultDeserializationPolicyTest.java
index dbc2b47..f38a98e 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultDeserializationPolicyTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultDeserializationPolicyTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.policy;
 
-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.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.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -34,7 +34,7 @@
 import org.apache.qpid.jms.JmsQueue;
 import org.apache.qpid.jms.util.ClassLoadingAwareObjectInputStream;
 import org.apache.qpid.jms.util.ClassLoadingAwareObjectInputStream.TrustedClassFilter;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultPrefetchPolicyTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultPrefetchPolicyTest.java
index 5432bef..6b3e9ba 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultPrefetchPolicyTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultPrefetchPolicyTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.policy;
 
-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 org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  *
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultPresettlePolicyTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultPresettlePolicyTest.java
index 8d8cb27..acaa38c 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultPresettlePolicyTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultPresettlePolicyTest.java
@@ -16,15 +16,15 @@
  */
 package org.apache.qpid.jms.policy;
 
-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 org.apache.qpid.jms.JmsDestination;
 import org.apache.qpid.jms.JmsQueue;
 import org.apache.qpid.jms.JmsSession;
 import org.apache.qpid.jms.JmsTopic;
-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/policy/JmsDefaultRedeliveryPolicyTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultRedeliveryPolicyTest.java
index 539ba62..0b2b326 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultRedeliveryPolicyTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/policy/JmsDefaultRedeliveryPolicyTest.java
@@ -16,15 +16,16 @@
  */
 package org.apache.qpid.jms.policy;
 
-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.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.qpid.jms.JmsDestination;
 import org.apache.qpid.jms.JmsQueue;
 import org.apache.qpid.jms.JmsTopic;
 import org.apache.qpid.jms.message.JmsMessageSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for the Default Redelivery Policy object.
@@ -127,10 +128,12 @@
         assertEquals(JmsMessageSupport.MODIFIED_FAILED_UNDELIVERABLE, policy.getOutcome());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testSetOutcomeWithInvalidIntValue() {
-        JmsDefaultRedeliveryPolicy policy = new JmsDefaultRedeliveryPolicy();
-        policy.setOutcome(100);
+        assertThrows(IllegalArgumentException.class, () -> {
+            JmsDefaultRedeliveryPolicy policy = new JmsDefaultRedeliveryPolicy();
+            policy.setOutcome(100);
+        });
     }
 
     @Test
@@ -166,10 +169,12 @@
         assertEquals(JmsMessageSupport.ACCEPTED, policy.getOutcome());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testSetOutcomeWithInvaliStringValue() {
-        JmsDefaultRedeliveryPolicy policy = new JmsDefaultRedeliveryPolicy();
-        policy.setOutcome("FOO");
+        assertThrows(IllegalArgumentException.class, () -> {
+            JmsDefaultRedeliveryPolicy policy = new JmsDefaultRedeliveryPolicy();
+            policy.setOutcome("FOO");
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerClosedTest.java
index 90bf1c3..9ae4e81 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerClosedTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.qpid.jms.producer;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.Destination;
 import jakarta.jms.JMSException;
 import jakarta.jms.Message;
@@ -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;
 
 /**
  * Test the contract of MessageProducer that has been closed.
@@ -46,90 +50,136 @@
     }
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         producer = createProducer();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testClose() throws Exception {
         producer.close();
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testSetDisableMessageIDFails() throws Exception {
-        producer.setDisableMessageID(true);
+        assertThrows(JMSException.class, () -> {
+            producer.setDisableMessageID(true);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetDisableMessageIDFails() throws Exception {
-        producer.getDisableMessageID();
+        assertThrows(JMSException.class, () -> {
+            producer.getDisableMessageID();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testSetDisableMessageTimestampFails() throws Exception {
-        producer.setDisableMessageTimestamp(false);
+        assertThrows(JMSException.class, () -> {
+            producer.setDisableMessageTimestamp(false);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetDisableMessageTimestampFails() throws Exception {
-        producer.getDisableMessageTimestamp();
+        assertThrows(JMSException.class, () -> {
+            producer.getDisableMessageTimestamp();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testSetDeliveryModeFails() throws Exception {
-        producer.setDeliveryMode(1);
+        assertThrows(JMSException.class, () -> {
+            producer.setDeliveryMode(1);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetDeliveryModeFails() throws Exception {
-        producer.getDeliveryMode();
+        assertThrows(JMSException.class, () -> {
+            producer.getDeliveryMode();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testSetPriorityFails() throws Exception {
-        producer.setPriority(1);
+        assertThrows(JMSException.class, () -> {
+            producer.setPriority(1);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetPriorityFails() throws Exception {
-        producer.getPriority();
+        assertThrows(JMSException.class, () -> {
+            producer.getPriority();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testSetTimeToLiveFails() throws Exception {
-        producer.setTimeToLive(1);
+        assertThrows(JMSException.class, () -> {
+            producer.setTimeToLive(1);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetTimeToLiveFails() throws Exception {
-        producer.getTimeToLive();
+        assertThrows(JMSException.class, () -> {
+            producer.getTimeToLive();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetDestinationFails() throws Exception {
-        producer.getDestination();
+        assertThrows(JMSException.class, () -> {
+            producer.getDestination();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testSendFails() throws Exception {
-        producer.send(message);
+        assertThrows(JMSException.class, () -> {
+            producer.send(message);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testSendWithDestinationFails() throws Exception {
-        producer.send(destination, message);
+        assertThrows(JMSException.class, () -> {
+            producer.send(destination, message);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testSendWithModePriorityTTLFails() throws Exception {
-        producer.send(message, 1, 3, 111);
+        assertThrows(JMSException.class, () -> {
+            producer.send(message, 1, 3, 111);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testSendWithDestinationModePriorityTTLFails() throws Exception {
-        producer.send(destination, message, 1, 3, 111);
+        assertThrows(JMSException.class, () -> {
+            producer.send(destination, message, 1, 3, 111);
+        });
     }
 }
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerFailedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerFailedTest.java
index b167f5e..8d313a8 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerFailedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerFailedTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.qpid.jms.producer;
 
-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/producer/JmsMessageProducerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java
index 848d0e5..8da1a7f 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.producer;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-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.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -51,9 +51,11 @@
 import org.apache.qpid.jms.provider.ProviderException;
 import org.apache.qpid.jms.provider.mock.MockRemotePeer;
 import org.apache.qpid.jms.test.Wait;
-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.junit.jupiter.api.Timeout;
 import org.mockito.Mockito;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -70,16 +72,16 @@
     private final MockRemotePeer remotePeer = new MockRemotePeer();
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         remotePeer.start();
         connection = createConnectionToMockProvider();
         session = (JmsSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         try {
             remotePeer.terminate();
@@ -88,20 +90,23 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testMultipleCloseCallsNoErrors() throws Exception {
         MessageProducer producer = session.createProducer(null);
         producer.close();
         producer.close();
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testCreateProducerWithNullDestination() throws Exception {
         MessageProducer producer = session.createProducer(null);
         assertNull(producer.getDestination());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testGetDisableMessageID() throws Exception {
         MessageProducer producer = session.createProducer(null);
         assertFalse(producer.getDisableMessageID());
@@ -109,7 +114,8 @@
         assertTrue(producer.getDisableMessageID());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testGetDisableTimeStamp() throws Exception {
         MessageProducer producer = session.createProducer(null);
         assertFalse(producer.getDisableMessageTimestamp());
@@ -117,7 +123,8 @@
         assertTrue(producer.getDisableMessageTimestamp());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testPriorityConfiguration() throws Exception {
         MessageProducer producer = session.createProducer(null);
         assertEquals(Message.DEFAULT_PRIORITY, producer.getPriority());
@@ -125,7 +132,8 @@
         assertEquals(9, producer.getPriority());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testPriorityConfigurationWithInvalidPriorityValues() throws Exception {
         MessageProducer producer = session.createProducer(null);
         assertEquals(Message.DEFAULT_PRIORITY, producer.getPriority());
@@ -144,7 +152,8 @@
         assertEquals(Message.DEFAULT_PRIORITY, producer.getPriority());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testTimeToLiveConfiguration() throws Exception {
         MessageProducer producer = session.createProducer(null);
         assertEquals(Message.DEFAULT_TIME_TO_LIVE, producer.getTimeToLive());
@@ -152,7 +161,8 @@
         assertEquals(1000, producer.getTimeToLive());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDeliveryModeConfiguration() throws Exception {
         MessageProducer producer = session.createProducer(null);
         assertEquals(Message.DEFAULT_DELIVERY_MODE, producer.getDeliveryMode());
@@ -160,7 +170,8 @@
         assertEquals(DeliveryMode.NON_PERSISTENT, producer.getDeliveryMode());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDeliveryModeConfigurationWithInvalidMode() throws Exception {
         MessageProducer producer = session.createProducer(null);
         assertEquals(Message.DEFAULT_DELIVERY_MODE, producer.getDeliveryMode());
@@ -179,7 +190,8 @@
         assertEquals(Message.DEFAULT_DELIVERY_MODE, producer.getDeliveryMode());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDeliveryDelayConfiguration() throws Exception {
         MessageProducer producer = session.createProducer(null);
         assertEquals(Message.DEFAULT_DELIVERY_DELAY, producer.getDeliveryDelay());
@@ -187,7 +199,8 @@
         assertEquals(2000, producer.getDeliveryDelay());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testAnonymousProducerThrowsUOEWhenExplictDestinationNotProvided() throws Exception {
         JmsMessageProducer producer = (JmsMessageProducer) session.createProducer(null);
 
@@ -221,12 +234,14 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testExplicitQueueProducerThrowsIDEWhenNullDestinationIsProvidedOnSend() throws Exception {
         doExplicitProducerThrowsIDEWhenNullDestinationIsProvidedOnSendTestImpl(new JmsQueue("explicitQueueDest"));
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testExplicitTopicProducerThrowsIDEWhenInvalidDestinationIsProvidedOnSend() throws Exception {
         doExplicitProducerThrowsIDEWhenNullDestinationIsProvidedOnSendTestImpl(new JmsTopic("explicitTopicDest"));
     }
@@ -265,7 +280,8 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testExplicitProducerThrowsUOEWhenExplictDestinationIsProvided() throws Exception {
         JmsDestination dest = new JmsQueue("explicitDestination");
         JmsMessageProducer producer = (JmsMessageProducer) session.createProducer(dest);
@@ -300,7 +316,8 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testAnonymousDestinationProducerThrowsIDEWhenNullDestinationIsProvided() throws Exception {
         JmsMessageProducer producer = (JmsMessageProducer) session.createProducer(null);
 
@@ -334,7 +351,8 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testAnonymousProducerThrowsIAEWhenNullCompletionListenerProvided() throws Exception {
         JmsMessageProducer producer = (JmsMessageProducer) session.createProducer(null);
         JmsDestination dest = new JmsQueue("explicitDestination");
@@ -356,7 +374,8 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testExplicitProducerThrowsIAEWhenNullCompletionListenerIsProvided() throws Exception {
         JmsDestination dest = new JmsQueue("explicitDestination");
         JmsMessageProducer producer = (JmsMessageProducer) session.createProducer(dest);
@@ -377,7 +396,8 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testAnonymousProducerThrowsMFEWhenNullMessageProvided() throws Exception {
         JmsDestination dest = new JmsQueue("explicitDestination");
         JmsMessageProducer producer = (JmsMessageProducer) session.createProducer(null);
@@ -411,7 +431,8 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testExplicitProducerThrowsMFEWhenNullMessageProvided() throws Exception {
         JmsDestination dest = new JmsQueue("explicitDestination");
         JmsMessageProducer producer = (JmsMessageProducer) session.createProducer(dest);
@@ -445,7 +466,8 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testInOrderSendAcksCompletionsReturnInOrder() throws Exception {
         final int MESSAGE_COUNT = 3;
 
@@ -461,30 +483,31 @@
 
         sendMessages(MESSAGE_COUNT, producer, listener);
 
-        assertTrue("Not all sends made it to the remote", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return remotePeer.getPendingCompletions(destination).size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all sends made it to the remote");
 
         remotePeer.completeAllPendingSends(destination);
 
-        assertTrue("Not all completions triggered", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return listener.getCompletedSends().size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all completions triggered");
 
         assertMessageCompletedInOrder(MESSAGE_COUNT, listener);
 
         connection.close();
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testReversedOrderSendAcksCompletionsReturnInOrder() throws Exception {
         final int MESSAGE_COUNT = 3;
 
@@ -500,13 +523,13 @@
 
         sendMessages(MESSAGE_COUNT, producer, listener);
 
-        assertTrue("Not all sends made it to the remote", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return remotePeer.getPendingCompletions(destination).size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all sends made it to the remote");
 
         List<JmsOutboundMessageDispatch> pending = remotePeer.getPendingCompletions(destination);
         assertEquals(MESSAGE_COUNT, pending.size());
@@ -517,20 +540,21 @@
             remotePeer.completePendingSend(envelope);
         }
 
-        assertTrue("Not all completions triggered", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return listener.getCompletedSends().size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all completions triggered");
 
         assertMessageCompletedInOrder(MESSAGE_COUNT, listener);
 
         connection.close();
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testInOrderSendFailuresCompletionsReturnInOrder() throws Exception {
         final int MESSAGE_COUNT = 3;
 
@@ -545,29 +569,30 @@
         final MyCompletionListener listener = new MyCompletionListener();
 
         sendMessages(MESSAGE_COUNT, producer, listener);
-        assertTrue("Not all messages sent", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return remotePeer.getPendingCompletions(destination).size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all messages sent");
         remotePeer.failAllPendingSends(destination, new ProviderException("Could not send message"));
 
-        assertTrue("Not all completions triggered", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return listener.getFailedSends().size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all completions triggered");
 
         assertMessageFailedInOrder(MESSAGE_COUNT, listener);
 
         connection.close();
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testReversedOrderSendAcksFailuresReturnInOrder() throws Exception {
         final int MESSAGE_COUNT = 3;
 
@@ -583,13 +608,13 @@
 
         sendMessages(MESSAGE_COUNT, producer, listener);
 
-        assertTrue("Not all sends made it to the remote", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return remotePeer.getPendingCompletions(destination).size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all sends made it to the remote");
 
         List<JmsOutboundMessageDispatch> pending = remotePeer.getPendingCompletions(destination);
         assertEquals(MESSAGE_COUNT, pending.size());
@@ -600,20 +625,21 @@
             remotePeer.failPendingSend(envelope, new ProviderException("Failed to send message"));
         }
 
-        assertTrue("Not all failures triggered", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return listener.getFailedSends().size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all failures triggered");
 
         assertMessageFailedInOrder(MESSAGE_COUNT, listener);
 
         connection.close();
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testInterleavedCompletionsReturnedInOrder() throws Exception {
         final int MESSAGE_COUNT = 3;
 
@@ -629,13 +655,13 @@
 
         sendMessages(MESSAGE_COUNT, producer, listener);
 
-        assertTrue("Not all sends made it to the remote", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return remotePeer.getPendingCompletions(destination).size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all sends made it to the remote");
 
         List<JmsOutboundMessageDispatch> pending = remotePeer.getPendingCompletions(destination);
         assertEquals(MESSAGE_COUNT, pending.size());
@@ -652,20 +678,21 @@
             }
         }
 
-        assertTrue("Not all completions triggered", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return listener.getCombinedSends().size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all completions triggered");
 
         assertTotalCompletionOrder(MESSAGE_COUNT, listener);
 
         connection.close();
     }
 
-    @Test(timeout = 15000)
+    @Test
+    @Timeout(15)
     public void testCompletionListenerOnCompleteCallsProducerCloseThrowsISE() throws Exception {
         final int MESSAGE_COUNT = 1;
 
@@ -699,22 +726,23 @@
 
         sendMessages(MESSAGE_COUNT, producer, listener);
 
-        assertTrue("Not all sends made it to the remote", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return remotePeer.getPendingCompletions(destination).size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all sends made it to the remote");
 
         remotePeer.completeAllPendingSends(destination);
 
-        assertTrue("Completion never got expected ISE", done.await(10, TimeUnit.SECONDS));
+        assertTrue(done.await(10, TimeUnit.SECONDS), "Completion never got expected ISE");
 
         connection.close();
     }
 
-    @Test(timeout = 15000)
+    @Test
+    @Timeout(15)
     public void testCompletionListenerOnExceptionCallsProducerCloseThrowsISE() throws Exception {
         final int MESSAGE_COUNT = 1;
 
@@ -747,17 +775,17 @@
 
         sendMessages(MESSAGE_COUNT, producer, listener);
 
-        assertTrue("Not all sends made it to the remote", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return remotePeer.getPendingCompletions(destination).size() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all sends made it to the remote");
 
         remotePeer.failAllPendingSends(destination, new ProviderException("Could not send message"));
 
-        assertTrue("Completion never got expected ISE", done.await(10, TimeUnit.SECONDS));
+        assertTrue(done.await(10, TimeUnit.SECONDS), "Completion never got expected ISE");
 
         connection.close();
     }
@@ -772,26 +800,26 @@
     }
 
     private void assertMessageCompletedInOrder(int expected, MyCompletionListener listener) throws Exception {
-        assertEquals("Did not get expected number of completions", expected, listener.completed.size());
+        assertEquals(expected, listener.completed.size(), "Did not get expected number of completions");
         for (int i = 0; i < listener.completed.size(); ++i) {
             int sequence = listener.completed.get(i).getIntProperty("sequence");
-            assertEquals("Did not complete expected message: " + i + " got: " + sequence, i, sequence);
+            assertEquals(i, sequence, "Did not complete expected message: " + i + " got: " + sequence);
         }
     }
 
     private void assertMessageFailedInOrder(int expected, MyCompletionListener listener) throws Exception {
-        assertEquals("Did not get expected number of failures", expected, listener.failed.size());
+        assertEquals(expected, listener.failed.size(), "Did not get expected number of failures");
         for (int i = 0; i < listener.failed.size(); ++i) {
             int sequence = listener.failed.get(i).getIntProperty("sequence");
-            assertEquals("Did not fail expected message: " + i + " got: " + sequence, i, sequence);
+            assertEquals(i, sequence, "Did not fail expected message: " + i + " got: " + sequence);
         }
     }
 
     private void assertTotalCompletionOrder(int expected, MyCompletionListener listener) throws Exception {
-        assertEquals("Did not get expected number of failures", expected, listener.combinedResult.size());
+        assertEquals(expected, listener.combinedResult.size(), "Did not get expected number of failures");
         for (int i = 0; i < listener.combinedResult.size(); ++i) {
             int sequence = listener.combinedResult.get(i).getIntProperty("sequence");
-            assertEquals("Did not fail expected message: " + i + " got: " + sequence, i, sequence);
+            assertEquals(i, sequence, "Did not fail expected message: " + i + " got: " + sequence);
         }
     }
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
index f741815..652fb8d 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
@@ -22,12 +22,12 @@
 import static org.hamcrest.Matchers.both;
 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
-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;
@@ -72,9 +72,11 @@
 import org.apache.qpid.jms.meta.JmsSessionId;
 import org.apache.qpid.jms.provider.mock.MockRemotePeer;
 import org.hamcrest.Matcher;
-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.junit.jupiter.api.Timeout;
 import org.mockito.Mockito;
 
 /**
@@ -119,16 +121,16 @@
     private final String JMS_TYPE_STRING = "TestType";
 
     @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 {
         try {
             context.close();
@@ -791,7 +793,8 @@
         assertEquals(DeliveryMode.NON_PERSISTENT, producer.getDeliveryMode());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDeliveryModeConfigurationWithInvalidMode() throws Exception {
         JMSProducer producer = context.createProducer();
 
@@ -852,7 +855,8 @@
         assertEquals(4, producer.getPriority());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testPriorityConfigurationWithInvalidPriorityValues() throws Exception {
         JMSProducer producer = context.createProducer();
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderClosedTest.java
index 247f50f..d79b4f2 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderClosedTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.qpid.jms.producer;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.Queue;
 import jakarta.jms.QueueConnection;
 import jakarta.jms.QueueSender;
@@ -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,50 +40,71 @@
     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);
         sender = session.createSender(destination);
         sender.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 testGetDeliveryModeFails() throws Exception {
-        sender.getDeliveryMode();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            sender.getDeliveryMode();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetDestinationFails() throws Exception {
-        sender.getDestination();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            sender.getDestination();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetQueueFails() throws Exception {
-        sender.getQueue();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            sender.getQueue();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetDisableMessageIDFails() throws Exception {
-        sender.getDisableMessageID();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            sender.getDisableMessageID();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetDisableMessageTimestampFails() throws Exception {
-        sender.getDisableMessageTimestamp();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            sender.getDisableMessageTimestamp();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetTimeToLiveFails() throws Exception {
-        sender.getTimeToLive();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            sender.getTimeToLive();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetPriorityFails() throws Exception {
-        sender.getPriority();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            sender.getPriority();
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderTest.java
index 1856fdb..dfe3fd3 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.producer;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import jakarta.jms.Destination;
 import jakarta.jms.InvalidDestinationException;
@@ -32,9 +32,11 @@
 import org.apache.qpid.jms.JmsQueueSession;
 import org.apache.qpid.jms.message.JmsOutboundMessageDispatch;
 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.junit.jupiter.api.Timeout;
 
 public class JmsQueueSenderTest extends JmsConnectionTestSupport {
 
@@ -42,16 +44,16 @@
     private final MockRemotePeer remotePeer = new MockRemotePeer();
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         remotePeer.start();
         connection = createConnectionToMockProvider();
         session = (JmsQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         try {
             remotePeer.terminate();
@@ -60,7 +62,8 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testMultipleCloseCallsNoErrors() throws Exception {
         Queue queue = session.createQueue(getTestName());
         QueueSender sender = session.createSender(queue);
@@ -68,14 +71,16 @@
         sender.close();
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testGetQueue() throws Exception {
         Queue queue = session.createQueue(getTestName());
         QueueSender sender = session.createSender(queue);
         assertSame(queue, sender.getQueue());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testSendToQueueWithNullOnExplicitQueueSender() throws Exception {
         Queue queue = session.createQueue(getTestName());
         QueueSender sender = session.createSender(null);
@@ -89,7 +94,8 @@
         assertEquals(queue, destination);
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testSendToQueueWithDeliveryOptsWithNullOnExplicitQueueSender() throws Exception {
         Queue queue = session.createQueue(getTestName());
         QueueSender sender = session.createSender(null);
@@ -103,7 +109,8 @@
         assertEquals(queue, destination);
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testSendToQueueWithNullOnExplicitQueueSenderThrowsInvalidDestinationException() throws Exception {
         Queue queue = session.createQueue(getTestName());
         QueueSender sender = session.createSender(queue);
@@ -116,7 +123,8 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testSendToQueueWithDeliveryOptsWithNullOnExplicitQueueSenderThrowsInvalidDestinationException() throws Exception {
         Queue queue = session.createQueue(getTestName());
         QueueSender sender = session.createSender(queue);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherClosedTest.java
index 6627bce..d06d391 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherClosedTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.qpid.jms.producer;
 
+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.TopicSession;
 
 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,50 +40,71 @@
     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);
         publisher = session.createPublisher(destination);
         publisher.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 testGetDeliveryModeFails() throws Exception {
-        publisher.getDeliveryMode();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            publisher.getDeliveryMode();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetDestinationFails() throws Exception {
-        publisher.getDestination();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            publisher.getDestination();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetTopicFails() throws Exception {
-        publisher.getTopic();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            publisher.getTopic();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetDisableMessageIDFails() throws Exception {
-        publisher.getDisableMessageID();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            publisher.getDisableMessageID();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetDisableMessageTimestampFails() throws Exception {
-        publisher.getDisableMessageTimestamp();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            publisher.getDisableMessageTimestamp();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetTimeToLiveFails() throws Exception {
-        publisher.getTimeToLive();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            publisher.getTimeToLive();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testGetPriorityFails() throws Exception {
-        publisher.getPriority();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            publisher.getPriority();
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherTest.java
index 13f21ca..6df7326 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.producer;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import jakarta.jms.Destination;
 import jakarta.jms.InvalidDestinationException;
@@ -32,9 +32,11 @@
 import org.apache.qpid.jms.JmsTopicSession;
 import org.apache.qpid.jms.message.JmsOutboundMessageDispatch;
 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.junit.jupiter.api.Timeout;
 
 public class JmsTopicPublisherTest extends JmsConnectionTestSupport {
 
@@ -42,16 +44,16 @@
     private final MockRemotePeer remotePeer = new MockRemotePeer();
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         remotePeer.start();
         connection = createConnectionToMockProvider();
         session = (JmsTopicSession) connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         try {
             remotePeer.terminate();
@@ -60,7 +62,8 @@
         }
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testMultipleCloseCallsNoErrors() throws Exception {
         Topic topic = session.createTopic(getTestName());
         TopicPublisher publisher = session.createPublisher(topic);
@@ -68,14 +71,16 @@
         publisher.close();
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testGetTopic() throws Exception {
         Topic topic = session.createTopic(getTestName());
         TopicPublisher publisher = session.createPublisher(topic);
         assertSame(topic, publisher.getTopic());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testPublishMessage() throws Exception {
         Topic topic = session.createTopic(getTestName());
         TopicPublisher publisher = session.createPublisher(topic);
@@ -89,7 +94,8 @@
         assertEquals(topic, destination);
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testPublishMessageOnProvidedTopic() throws Exception {
         Topic topic = session.createTopic(getTestName());
         TopicPublisher publisher = session.createPublisher(null);
@@ -103,7 +109,8 @@
         assertEquals(topic, destination);
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testPublishMessageOnProvidedTopicWhenNotAnonymous() throws Exception {
         Topic topic = session.createTopic(getTestName());
         TopicPublisher publisher = session.createPublisher(topic);
@@ -120,7 +127,8 @@
         } catch (InvalidDestinationException ide) {}
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testPublishMessageWithDeliveryOptions() throws Exception {
         Topic topic = session.createTopic(getTestName());
         TopicPublisher publisher = session.createPublisher(topic);
@@ -134,7 +142,8 @@
         assertEquals(topic, destination);
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testPublishMessageWithOptionsOnProvidedTopic() throws Exception {
         Topic topic = session.createTopic(getTestName());
         TopicPublisher publisher = session.createPublisher(null);
@@ -148,7 +157,8 @@
         assertEquals(topic, destination);
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testPublishMessageWithOptionsOnProvidedTopicWhenNotAnonymous() throws Exception {
         Topic topic = session.createTopic(getTestName());
         TopicPublisher publisher = session.createPublisher(topic);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/NoOpAsyncResultTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/NoOpAsyncResultTest.java
index 28bb3b3..9fe0b6c 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/NoOpAsyncResultTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/NoOpAsyncResultTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.provider;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class NoOpAsyncResultTest {
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderFutureFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderFutureFactoryTest.java
index 8cd03ce..7714b36 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderFutureFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderFutureFactoryTest.java
@@ -16,16 +16,16 @@
  */
 package org.apache.qpid.jms.provider;
 
-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.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ProviderFutureFactoryTest {
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderFutureTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderFutureTest.java
index 419e8e3..ef8705e 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderFutureTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderFutureTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.provider;
 
-import static org.junit.Assert.assertFalse;
-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.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -29,32 +29,31 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
+import org.junit.jupiter.api.Timeout;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
-@RunWith(Parameterized.class)
 public class ProviderFutureTest {
 
-    private final ProviderFutureFactory futuresFactory;
+    private ProviderFutureFactory futuresFactory;
 
-    @Parameters(name = "{index}: futureType={0}")
     public static Collection<Object> data() {
         return Arrays.asList(new Object[] {
                  "conservative", "balanced", "progressive" }
            );
     }
 
-    public ProviderFutureTest(String futureTypeName) {
+    public void initProviderFutureTest(String futureTypeName) {
         Map<String, String> options = new HashMap<>();
         options.put("futureType", futureTypeName);
 
         futuresFactory = ProviderFutureFactory.create(options);
     }
 
-    @Test
-    public void testIsComplete() {
+    @MethodSource("data")
+    @ParameterizedTest(name = "{index}: futureType={0}")
+    public void testIsComplete(String futureTypeName) {
+        initProviderFutureTest(futureTypeName);
         ProviderFuture future = futuresFactory.createFuture();
 
         assertFalse(future.isComplete());
@@ -62,8 +61,11 @@
         assertTrue(future.isComplete());
     }
 
-    @Test(timeout = 10000)
-    public void testOnSuccess() {
+    @MethodSource("data")
+    @ParameterizedTest(name = "{index}: futureType={0}")
+    @Timeout(10)
+    public void testOnSuccess(String futureTypeName) {
+        initProviderFutureTest(futureTypeName);
         ProviderFuture future = futuresFactory.createFuture();
 
         future.onSuccess();
@@ -74,8 +76,11 @@
         }
     }
 
-    @Test(timeout = 90000)
-    public void testTimedSync() {
+    @MethodSource("data")
+    @ParameterizedTest(name = "{index}: futureType={0}")
+    @Timeout(90)
+    public void testTimedSync(String futureTypeName) {
+        initProviderFutureTest(futureTypeName);
         ProviderFuture future = futuresFactory.createFuture();
 
         try {
@@ -85,8 +90,11 @@
         }
     }
 
-    @Test(timeout = 10000)
-    public void testOnFailure() {
+    @MethodSource("data")
+    @ParameterizedTest(name = "{index}: futureType={0}")
+    @Timeout(10)
+    public void testOnFailure(String futureTypeName) {
+        initProviderFutureTest(futureTypeName);
         ProviderFuture future = futuresFactory.createFuture();
         ProviderException ex = new ProviderException("Failed");
 
@@ -99,8 +107,11 @@
         }
     }
 
-    @Test(timeout = 10000)
-    public void testOnSuccessCallsSynchronization() {
+    @MethodSource("data")
+    @ParameterizedTest(name = "{index}: futureType={0}")
+    @Timeout(10)
+    public void testOnSuccessCallsSynchronization(String futureTypeName) {
+        initProviderFutureTest(futureTypeName);
         final AtomicBoolean syncCalled = new AtomicBoolean(false);
         ProviderFuture future = futuresFactory.createFuture(new ProviderSynchronization() {
 
@@ -121,11 +132,14 @@
             fail("Should throw an error");
         }
 
-        assertTrue("Synchronization not called", syncCalled.get());
+        assertTrue(syncCalled.get(), "Synchronization not called");
     }
 
-    @Test(timeout = 10000)
-    public void testOnFailureCallsSynchronization() {
+    @MethodSource("data")
+    @ParameterizedTest(name = "{index}: futureType={0}")
+    @Timeout(10)
+    public void testOnFailureCallsSynchronization(String futureTypeName) {
+        initProviderFutureTest(futureTypeName);
         final AtomicBoolean syncCalled = new AtomicBoolean(false);
         ProviderFuture future = futuresFactory.createFuture(new ProviderSynchronization() {
 
@@ -149,11 +163,14 @@
             assertSame(cause, ex);
         }
 
-        assertTrue("Synchronization not called", syncCalled.get());
+        assertTrue(syncCalled.get(), "Synchronization not called");
     }
 
-    @Test(timeout = 10000)
-    public void testSuccessfulStateIsFixed() {
+    @MethodSource("data")
+    @ParameterizedTest(name = "{index}: futureType={0}")
+    @Timeout(10)
+    public void testSuccessfulStateIsFixed(String futureTypeName) {
+        initProviderFutureTest(futureTypeName);
         ProviderFuture future = futuresFactory.createFuture();
         ProviderException ex = new ProviderException("Failed");
 
@@ -166,8 +183,11 @@
         }
     }
 
-    @Test(timeout = 10000)
-    public void testFailedStateIsFixed() {
+    @MethodSource("data")
+    @ParameterizedTest(name = "{index}: futureType={0}")
+    @Timeout(10)
+    public void testFailedStateIsFixed(String futureTypeName) {
+        initProviderFutureTest(futureTypeName);
         ProviderFuture future = futuresFactory.createFuture();
         ProviderException ex = new ProviderException("Failed");
 
@@ -181,8 +201,11 @@
         }
     }
 
-    @Test(timeout = 10000)
-    public void testSyncHandlesInterruption() throws InterruptedException {
+    @MethodSource("data")
+    @ParameterizedTest(name = "{index}: futureType={0}")
+    @Timeout(10)
+    public void testSyncHandlesInterruption(String futureTypeName) throws InterruptedException {
+        initProviderFutureTest(futureTypeName);
         ProviderFuture future = futuresFactory.createFuture();
 
         final CountDownLatch syncing = new CountDownLatch(1);
@@ -214,8 +237,11 @@
         assertTrue(interrupted.get());
     }
 
-    @Test(timeout = 10000)
-    public void testTimedSyncHandlesInterruption() throws InterruptedException {
+    @MethodSource("data")
+    @ParameterizedTest(name = "{index}: futureType={0}")
+    @Timeout(10)
+    public void testTimedSyncHandlesInterruption(String futureTypeName) throws InterruptedException {
+        initProviderFutureTest(futureTypeName);
         ProviderFuture future = futuresFactory.createFuture();
 
         final CountDownLatch syncing = new CountDownLatch(1);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderWrapperTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderWrapperTest.java
index 65b0b17..90a1bbf 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderWrapperTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/ProviderWrapperTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.qpid.jms.provider;
 
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.URI;
 
@@ -32,7 +32,7 @@
 import org.apache.qpid.jms.meta.JmsTransactionInfo;
 import org.apache.qpid.jms.provider.ProviderConstants.ACK_TYPE;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 public class ProviderWrapperTest extends QpidJmsTestCase{
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/WrappedAsyncResultTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/WrappedAsyncResultTest.java
index 287b873..940ad47 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/WrappedAsyncResultTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/WrappedAsyncResultTest.java
@@ -16,13 +16,13 @@
  */
 package org.apache.qpid.jms.provider;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Collections;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class WrappedAsyncResultTest {
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderFactoryTest.java
index 0955767..1b40c26 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderFactoryTest.java
@@ -16,9 +16,10 @@
  */
 package org.apache.qpid.jms.provider.amqp;
 
-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.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
 import java.net.URI;
@@ -27,9 +28,11 @@
 import org.apache.qpid.jms.provider.Provider;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.jms.test.testpeer.TestAmqpPeer;
-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.junit.jupiter.api.Timeout;
 
 /**
  * Test basic functionality of the AmqpProviderFactory
@@ -40,14 +43,15 @@
     private URI peerURI;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         testPeer = new TestAmqpPeer();
         peerURI = new URI("amqp://localhost:" + testPeer.getServerPort());
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         if (testPeer != null) {
             testPeer.close();
@@ -55,42 +59,52 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testGetName() throws IOException, Exception {
         AmqpProviderFactory factory = new AmqpProviderFactory();
         assertEquals("AMQP", factory.getName());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProvider() throws IOException, Exception {
         Provider provider = AmqpProviderFactory.create(peerURI);
         assertNotNull(provider);
         assertTrue(provider instanceof AmqpProvider);
     }
 
-    @Test(timeout = 20000, expected=IllegalArgumentException.class)
+    @Test
+    @Timeout(20)
     public void testCreateProviderFailsWithBadOption() throws IOException, Exception {
-        URI badOptionsURI = new URI(peerURI.toString() + "?amqp.badOption=true");
-        AmqpProviderFactory.create(badOptionsURI);
+        assertThrows(IllegalArgumentException.class, () -> {
+            URI badOptionsURI = new URI(peerURI.toString() + "?amqp.badOption=true");
+            AmqpProviderFactory.create(badOptionsURI);
+        });
     }
 
-    @Test(timeout = 20000, expected=IOException.class)
+    @Test
+    @Timeout(20)
     public void testCreateProviderFailsWithMissingScheme() throws IOException, Exception {
-        URI missingSchemeURI = new URI(null, null, peerURI.getHost(), peerURI.getPort(), null, null, null);
-        AmqpProviderFactory.create(missingSchemeURI);
+        assertThrows(IOException.class, () -> {
+            URI missingSchemeURI = new URI(null, null, peerURI.getHost(), peerURI.getPort(), null, null, null);
+            AmqpProviderFactory.create(missingSchemeURI);
+        });
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProviderHasDefaultIdleTimeoutValue() throws IOException, Exception {
         Provider provider = AmqpProviderFactory.create(new URI(peerURI.toString()));
         assertNotNull(provider);
         assertTrue(provider instanceof AmqpProvider);
         AmqpProvider amqpProvider = (AmqpProvider) provider;
 
-        assertTrue("No default idle timeout", amqpProvider.getIdleTimeout() > 0);
+        assertTrue(amqpProvider.getIdleTimeout() > 0, "No default idle timeout");
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProviderAppliesIdleTimeoutURIOption() throws IOException, Exception {
         int timeout = 54321;
         Provider provider = AmqpProviderFactory.create(new URI(peerURI.toString() + "?amqp.idleTimeout=" + timeout));
@@ -98,10 +112,11 @@
         assertTrue(provider instanceof AmqpProvider);
         AmqpProvider amqpProvider = (AmqpProvider) provider;
 
-        assertEquals("idle timeout option was not applied", timeout, amqpProvider.getIdleTimeout());
+        assertEquals(timeout, amqpProvider.getIdleTimeout(), "idle timeout option was not applied");
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProviderAppliesMaxFrameSizeURIOption() throws IOException, Exception {
         int frameSize = 274893;
         Provider provider = AmqpProviderFactory.create(new URI(peerURI.toString() + "?amqp.maxFrameSize=" + frameSize));
@@ -109,10 +124,11 @@
         assertTrue(provider instanceof AmqpProvider);
         AmqpProvider amqpProvider = (AmqpProvider) provider;
 
-        assertEquals("maxFrameSize option was not applied", frameSize, amqpProvider.getMaxFrameSize());
+        assertEquals(frameSize, amqpProvider.getMaxFrameSize(), "maxFrameSize option was not applied");
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProviderAppliesOptions() throws IOException, Exception {
         URI configuredURI = new URI(peerURI.toString() +
             "?amqp.traceFrames=true" +
@@ -129,7 +145,8 @@
         assertEquals(32, amqpProvider.getChannelMax());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProviderEncodedVhost() throws IOException, Exception {
         URI configuredURI = new URI(peerURI.toString() +
             "?amqp.vhost=" + URLEncoder.encode("v+host", "utf-8"));
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderTest.java
index 074b038..d00bfa1 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpProviderTest.java
@@ -16,12 +16,13 @@
  */
 package org.apache.qpid.jms.provider.amqp;
 
-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.net.URI;
 import java.net.URISyntaxException;
@@ -42,9 +43,11 @@
 import org.apache.qpid.jms.test.testpeer.TestAmqpPeer;
 import org.apache.qpid.jms.util.IdGenerator;
 import org.apache.qpid.proton.engine.impl.TransportImpl;
-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.junit.jupiter.api.Timeout;
 
 /**
  * Test some basic functionality of the AmqpProvider
@@ -59,13 +62,14 @@
     private JmsConnectionInfo connectionInfo;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         connectionInfo = new JmsConnectionInfo(new JmsConnectionId("ID:TEST-Connection:1"));
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         if (provider != null) {
             provider.close();
@@ -73,54 +77,65 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCreate() throws Exception {
         provider = new AmqpProviderFactory().createProvider(getDefaultURI());
     }
 
-    @Test(timeout=20000, expected=RuntimeException.class)
+    @Test
+    @Timeout(20)
     public void testGetMessageFactoryTrowsWhenNotConnected() throws Exception {
-        provider = new AmqpProviderFactory().createProvider(getDefaultURI());
-        provider.getMessageFactory();
+        assertThrows(RuntimeException.class, () -> {
+            provider = new AmqpProviderFactory().createProvider(getDefaultURI());
+            provider.getMessageFactory();
+        });
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testUnInitializedProviderReturnsDefaultConnectTimeout() throws Exception {
         provider = new AmqpProviderFactory().createProvider(getDefaultURI());
         assertEquals(JmsConnectionInfo.DEFAULT_CONNECT_TIMEOUT, provider.getConnectTimeout());
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testUnInitializedProviderReturnsDefaultCloseTimeout() throws Exception {
         provider = new AmqpProviderFactory().createProvider(getDefaultURI());
         assertEquals(JmsConnectionInfo.DEFAULT_CLOSE_TIMEOUT, provider.getCloseTimeout());
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testUnInitializedProviderReturnsDefaultSendTimeout() throws Exception {
         provider = new AmqpProviderFactory().createProvider(getDefaultURI());
         assertEquals(JmsConnectionInfo.DEFAULT_SEND_TIMEOUT, provider.getSendTimeout());
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testUnInitializedProviderReturnsDefaultRequestTimeout() throws Exception {
         provider = new AmqpProviderFactory().createProvider(getDefaultURI());
         assertEquals(JmsConnectionInfo.DEFAULT_REQUEST_TIMEOUT, provider.getRequestTimeout());
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testGetDefaultDrainTimeout() throws Exception {
         provider = new AmqpProviderFactory().createProvider(getDefaultURI());
         assertEquals(TimeUnit.MINUTES.toMillis(1), provider.getDrainTimeout());
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testGetDefaultIdleTimeout() throws Exception {
         provider = new AmqpProviderFactory().createProvider(getDefaultURI());
         assertEquals(TimeUnit.MINUTES.toMillis(1), provider.getIdleTimeout());
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testEnableTraceFrames() throws Exception {
         provider = new AmqpProviderFactory().createProvider(getDefaultURI());
         TransportImpl transport = (TransportImpl) provider.getProtonTransport();
@@ -130,7 +145,8 @@
         assertNotNull(transport.getProtocolTracer());
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testCreateFailsWithUnknownProtocol() throws Exception {
         try {
             AmqpProviderFactory factory = new AmqpProviderFactory();
@@ -141,7 +157,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConnectThrowsWhenNoPeer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
             URI peerURI = getPeerURI(testPeer);
@@ -156,7 +173,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testDisableSaslLayer() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
 
@@ -175,7 +193,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSetIdleTimeout() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
             testPeer.expectSaslAnonymous();
@@ -200,7 +219,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSetMaxFrameSize() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
             testPeer.expectSaslAnonymous();
@@ -225,7 +245,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSkipSetMaxFrameSize() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
             testPeer.expectSaslAnonymous();
@@ -249,7 +270,9 @@
             testPeer.waitForAllHandlersToComplete(1000);
         }
     }
-    @Test(timeout=20000)
+
+    @Test
+    @Timeout(20)
     public void testStartThrowsIfNoListenerSet() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
             testPeer.expectSaslAnonymous();
@@ -284,7 +307,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testToString() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
             testPeer.expectSaslAnonymous();
@@ -303,7 +327,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testClosedProviderThrowsIOException() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
             testPeer.expectSaslAnonymous();
@@ -336,7 +361,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTimeoutsSetFromConnectionInfo() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
             final long CONNECT_TIMEOUT = TimeUnit.SECONDS.toMillis(4);
@@ -376,22 +402,26 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testErrorDuringCreateResourceFailsRequest() throws Exception {
         doErrorDuringOperationFailsRequestTestImpl(Op.CREATE);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testErrorDuringStartResourceFailsRequest() throws Exception {
         doErrorDuringOperationFailsRequestTestImpl(Op.START);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testErrorDuringStopResourceFailsRequest() throws Exception {
         doErrorDuringOperationFailsRequestTestImpl(Op.STOP);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testErrorDuringDestroyResourceFailsRequest() throws Exception {
         doErrorDuringOperationFailsRequestTestImpl(Op.DESTROY);
     }
@@ -420,7 +450,7 @@
                 }
             };
 
-            assertFalse("Error should not yet be thrown", errorThrown.get());
+            assertFalse(errorThrown.get(), "Error should not yet be thrown");
             ProviderFuture request = provider.newProviderFuture();
 
             switch(operation) {
@@ -447,7 +477,7 @@
                 // Expected
             }
 
-            assertTrue("Error should have been thrown", errorThrown.get());
+            assertTrue(errorThrown.get(), "Error should have been thrown");
 
             provider.close();
 
@@ -455,22 +485,26 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateResourceFailsWhenNoConnectCalled() throws Exception {
         doErrorDuringOperationFailsWhenNoConnectCalledTestImpl(Op.CREATE);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testStartResourceFailsWhenNoConnectCalled() throws Exception {
         doErrorDuringOperationFailsWhenNoConnectCalledTestImpl(Op.START);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testStopResourceFailsWhenNoConnectCalled() throws Exception {
         doErrorDuringOperationFailsWhenNoConnectCalledTestImpl(Op.STOP);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDestroyResourceFailsWhenNoConnectCalled() throws Exception {
         doErrorDuringOperationFailsWhenNoConnectCalledTestImpl(Op.DESTROY);
     }
@@ -495,7 +529,7 @@
                 }
             };
 
-            assertFalse("Error should not have been thrown", errorThrown.get());
+            assertFalse(errorThrown.get(), "Error should not have been thrown");
             ProviderFuture request = provider.newProviderFuture();
 
             switch(operation) {
@@ -535,7 +569,7 @@
                 throw new IllegalArgumentException("Unexpected operation given");
             }
 
-            assertFalse("Error should not have been thrown", errorThrown.get());
+            assertFalse(errorThrown.get(), "Error should not have been thrown");
 
             provider.close();
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSaslAuthenticatorTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSaslAuthenticatorTest.java
index 22630c3..815cc9d 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSaslAuthenticatorTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSaslAuthenticatorTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.provider.amqp;
 
-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.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.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
@@ -42,8 +42,8 @@
 import org.apache.qpid.proton.engine.Sasl.SaslOutcome;
 import org.apache.qpid.proton.engine.Sasl.SaslState;
 import org.apache.qpid.proton.engine.Transport;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.stubbing.Answer;
 
 public class AmqpSaslAuthenticatorTest {
@@ -57,7 +57,7 @@
     private final Sasl sasl = mock(Sasl.class);
     private final Transport transport = mock(Transport.class);
 
-    @Before
+    @BeforeEach
     public void setUp() {
         when(sasl.getState()).thenReturn(SaslState.PN_SASL_IDLE);
         when(sasl.getRemoteMechanisms()).thenReturn(new String[]{MECHANISM_NAME});
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSubscriptionTrackerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSubscriptionTrackerTest.java
index 70b0167..1f9f1fb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSubscriptionTrackerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSubscriptionTrackerTest.java
@@ -19,10 +19,10 @@
 package org.apache.qpid.jms.provider.amqp;
 
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.SUB_NAME_DELIMITER;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-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.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -31,7 +31,7 @@
 import org.apache.qpid.jms.JmsTopic;
 import org.apache.qpid.jms.meta.JmsConsumerId;
 import org.apache.qpid.jms.meta.JmsConsumerInfo;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AmqpSubscriptionTrackerTest {
 
@@ -97,21 +97,21 @@
 
         // For the first shared sub name
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, true, true, true);
-        assertEquals("Unexpected first sub link name", subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
+        assertEquals(subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
         JmsConsumerInfo sub1consumer2 = createConsumerInfo(subscriptionName1, topicName, true, true, true);
-        assertEquals("Unexpected second sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "2", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer2));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "2", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer2), "Unexpected second sub link name");
 
         // For the second shared sub name
         JmsConsumerInfo sub2consumer1 = createConsumerInfo(subscriptionName2, topicName, true, true, true);
-        assertEquals("Unexpected first sub link name", subscriptionName2, tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer1));
+        assertEquals(subscriptionName2, tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer1), "Unexpected first sub link name");
         JmsConsumerInfo sub2consumer2 = createConsumerInfo(subscriptionName2, topicName, true, true, true);
-        assertEquals("Unexpected second sub link name", subscriptionName2 + SUB_NAME_DELIMITER + "2", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer2));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "2", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer2), "Unexpected second sub link name");
 
         // Register a third subscriber for a subscription, after removing the first subscriber for the subscription.
         // Validate the new link name isn't the same as the second subscribers (which is still using its name...)
         tracker.consumerRemoved(sub2consumer1);
         JmsConsumerInfo sub2consumer3 = createConsumerInfo(subscriptionName2, topicName, true, true, true);
-        assertEquals("Unexpected third subscriber link name", subscriptionName2 + SUB_NAME_DELIMITER + "3", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer3));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "3", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer3), "Unexpected third subscriber link name");
     }
 
     @Test
@@ -123,7 +123,7 @@
 
         // For the first shared sub name with selector 'color = red'
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, true, true, "color = red", true);
-        assertEquals("Unexpected first sub link name", subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
+        assertEquals(subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
 
         // For the next shared sub name with selector 'color = blue'
         JmsConsumerInfo sub1consumer2 = createConsumerInfo(subscriptionName1, topicName, true, true, "color = blue", true);
@@ -145,7 +145,7 @@
         tracker.consumerRemoved(sub1consumer1);
 
         JmsConsumerInfo sub1consumer4 = createConsumerInfo(subscriptionName1, topicName, true, true, true);
-        assertEquals("Unexpected first sub link name", subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer4));
+        assertEquals(subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer4), "Unexpected first sub link name");
 
         // Try adding the second consumer again with selector "color = blue"
         try {
@@ -164,7 +164,7 @@
 
         // For the first shared sub name on Topic
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, true, true, true);
-        assertEquals("Unexpected first sub link name", subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
+        assertEquals(subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
 
         // For the next shared sub name on different Topic
         JmsConsumerInfo sub1consumer2 = createConsumerInfo(subscriptionName1, topicName + "-Alt", true, true, true);
@@ -185,21 +185,21 @@
 
         // For the first shared sub name
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, true, true, false);
-        assertEquals("Unexpected first sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "global", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "global", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
         JmsConsumerInfo sub1consumer2 = createConsumerInfo(subscriptionName1, topicName, true, true, false);
-        assertEquals("Unexpected second sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "global2", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer2));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "global2", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer2), "Unexpected second sub link name");
 
         // For the second shared sub name
         JmsConsumerInfo sub2consumer1 = createConsumerInfo(subscriptionName2, topicName, true, true, false);
-        assertEquals("Unexpected first sub link name", subscriptionName2 + SUB_NAME_DELIMITER + "global", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer1));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "global", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer1), "Unexpected first sub link name");
         JmsConsumerInfo sub2consumer2 = createConsumerInfo(subscriptionName2, topicName, true, true, false);
-        assertEquals("Unexpected second sub link name", subscriptionName2 + SUB_NAME_DELIMITER + "global2", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer2));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "global2", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer2), "Unexpected second sub link name");
 
         // Register a third subscriber for a subscription, after removing the first subscriber for the subscription.
         // Validate the new link name isn't the same as the second subscribers (which is still using its name...)
         tracker.consumerRemoved(sub2consumer1);
         JmsConsumerInfo sub2consumer3 = createConsumerInfo(subscriptionName2, topicName, true, true, false);
-        assertEquals("Unexpected third subscriber link name", subscriptionName2 + SUB_NAME_DELIMITER + "global3", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer3));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "global3", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer3), "Unexpected third subscriber link name");
     }
 
     @Test
@@ -211,30 +211,30 @@
         AmqpSubscriptionTracker tracker = new AmqpSubscriptionTracker();
 
         // For the first shared sub name
-        assertFalse("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName1));
+        assertFalse(tracker.isActiveSharedVolatileSub(subscriptionName1), "Should be active shared volatile sub");
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, true, false, true);
-        assertEquals("Unexpected first sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
-        assertTrue("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName1));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
+        assertTrue(tracker.isActiveSharedVolatileSub(subscriptionName1), "Should be active shared volatile sub");
         JmsConsumerInfo sub1consumer2 = createConsumerInfo(subscriptionName1, topicName, true, false, true);
-        assertEquals("Unexpected second sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "volatile2", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer2));
-        assertTrue("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName1));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "volatile2", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer2), "Unexpected second sub link name");
+        assertTrue(tracker.isActiveSharedVolatileSub(subscriptionName1), "Should be active shared volatile sub");
 
         // For the second shared sub name
-        assertFalse("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName2));
+        assertFalse(tracker.isActiveSharedVolatileSub(subscriptionName2), "Should be active shared volatile sub");
         JmsConsumerInfo sub2consumer1 = createConsumerInfo(subscriptionName2, topicName, true, false, true);
-        assertEquals("Unexpected first sub link name", subscriptionName2 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer1));
-        assertTrue("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName2));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer1), "Unexpected first sub link name");
+        assertTrue(tracker.isActiveSharedVolatileSub(subscriptionName2), "Should be active shared volatile sub");
         JmsConsumerInfo sub2consumer2 = createConsumerInfo(subscriptionName2, topicName, true, false, true);
-        assertEquals("Unexpected second sub link name", subscriptionName2 + SUB_NAME_DELIMITER + "volatile2", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer2));
-        assertTrue("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName2));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "volatile2", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer2), "Unexpected second sub link name");
+        assertTrue(tracker.isActiveSharedVolatileSub(subscriptionName2), "Should be active shared volatile sub");
 
         // Register a third subscriber for a subscription, after removing the first subscriber for the subscription.
         // Validate the new link name isn't the same as the second subscribers (which is still using its name...)
         tracker.consumerRemoved(sub2consumer1);
-        assertTrue("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName2));
+        assertTrue(tracker.isActiveSharedVolatileSub(subscriptionName2), "Should be active shared volatile sub");
         JmsConsumerInfo sub2consumer3 = createConsumerInfo(subscriptionName2, topicName, true, false, true);
-        assertEquals("Unexpected third subscriber link name", subscriptionName2 + SUB_NAME_DELIMITER + "volatile3", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer3));
-        assertTrue("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName2));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "volatile3", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer3), "Unexpected third subscriber link name");
+        assertTrue(tracker.isActiveSharedVolatileSub(subscriptionName2), "Should be active shared volatile sub");
     }
 
     @Test
@@ -246,7 +246,7 @@
 
         // For the first shared sub name with selector 'color = red'
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, true, false, "color = red", true);
-        assertEquals("Unexpected first sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
 
         // For the next shared sub name with selector 'color = blue'
         JmsConsumerInfo sub1consumer2 = createConsumerInfo(subscriptionName1, topicName, true, false, "color = blue", true);
@@ -267,7 +267,7 @@
         // Remove the consumer and add the third one which has no selector
         tracker.consumerRemoved(sub1consumer1);
 
-        assertEquals("Unexpected second sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer3));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer3), "Unexpected second sub link name");
 
         // Try adding the second consumer again with selector "color = blue"
         try {
@@ -286,7 +286,7 @@
 
         // For the first shared sub name with Topic
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, true, false, true);
-        assertEquals("Unexpected first sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
 
         // For the next shared sub name with different Topic
         JmsConsumerInfo sub1consumer2 = createConsumerInfo(subscriptionName1, topicName + "-alt", true, false, true);
@@ -306,26 +306,26 @@
         AmqpSubscriptionTracker tracker = new AmqpSubscriptionTracker();
 
         // For the first shared sub name
-        assertFalse("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName1));
+        assertFalse(tracker.isActiveSharedVolatileSub(subscriptionName1), "Should be active shared volatile sub");
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, true, false, false);
-        assertEquals("Unexpected first sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "global-volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "global-volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
         JmsConsumerInfo sub1consumer2 = createConsumerInfo(subscriptionName1, topicName, true, false, false);
-        assertEquals("Unexpected second sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "global-volatile2", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer2));
-        assertTrue("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName1));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "global-volatile2", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer2), "Unexpected second sub link name");
+        assertTrue(tracker.isActiveSharedVolatileSub(subscriptionName1), "Should be active shared volatile sub");
 
         // For the second shared sub name
-        assertFalse("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName2));
+        assertFalse(tracker.isActiveSharedVolatileSub(subscriptionName2), "Should be active shared volatile sub");
         JmsConsumerInfo sub2consumer1 = createConsumerInfo(subscriptionName2, topicName, true, false, false);
-        assertEquals("Unexpected first sub link name", subscriptionName2 + SUB_NAME_DELIMITER + "global-volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer1));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "global-volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer1), "Unexpected first sub link name");
         JmsConsumerInfo sub2consumer2 = createConsumerInfo(subscriptionName2, topicName, true, false, false);
-        assertEquals("Unexpected second sub link name", subscriptionName2 + SUB_NAME_DELIMITER + "global-volatile2", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer2));
-        assertTrue("Should be active shard volatile sub", tracker.isActiveSharedVolatileSub(subscriptionName2));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "global-volatile2", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer2), "Unexpected second sub link name");
+        assertTrue(tracker.isActiveSharedVolatileSub(subscriptionName2), "Should be active shared volatile sub");
 
         // Register a third subscriber for a subscription, after removing the first subscriber for the subscription.
         // Validate the new link name isn't the same as the second subscribers (which is still using its name...)
         tracker.consumerRemoved(sub2consumer1);
         JmsConsumerInfo sub2consumer3 = createConsumerInfo(subscriptionName2, topicName, true, false, false);
-        assertEquals("Unexpected third subscriber link name", subscriptionName2 + SUB_NAME_DELIMITER + "global-volatile3", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer3));
+        assertEquals(subscriptionName2 + SUB_NAME_DELIMITER + "global-volatile3", tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer3), "Unexpected third subscriber link name");
     }
 
     @Test
@@ -336,25 +336,25 @@
 
         AmqpSubscriptionTracker tracker = new AmqpSubscriptionTracker();
 
-        // For the first shared sub name
-        assertFalse("Should be active shard volatile sub", tracker.isActiveExclusiveDurableSub(subscriptionName1));
+        // For the first sub name
+        assertFalse(tracker.isActiveExclusiveDurableSub(subscriptionName1), "Should not be active durable sub");
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, false, true, true);
-        assertEquals("Unexpected first sub link name", subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
-        assertTrue("Should be active shard volatile sub", tracker.isActiveExclusiveDurableSub(subscriptionName1));
+        assertEquals(subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
+        assertTrue(tracker.isActiveExclusiveDurableSub(subscriptionName1), "Should be active durable sub");
         // This shouldn't happen, checks elsewhere should stop requests for an exclusive durable sub link
         // name if its already in use, but check we get the same name anyway even with an existing registration.
         JmsConsumerInfo sub1consumer2 = createConsumerInfo(subscriptionName1, topicName, false, true, true);
-        assertEquals("Unexpected second sub link name", subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer2));
+        assertEquals(subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer2), "Unexpected second sub link name");
 
-        // For the second shared sub name
-        assertFalse("Should be active shard volatile sub", tracker.isActiveExclusiveDurableSub(subscriptionName2));
+        // For the second sub name
+        assertFalse(tracker.isActiveExclusiveDurableSub(subscriptionName2), "Should not be active durable sub");
         JmsConsumerInfo sub2consumer1 = createConsumerInfo(subscriptionName2, topicName, false, true, true);
-        assertEquals("Unexpected first sub link name", subscriptionName2, tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer1));
-        assertTrue("Should be active shard volatile sub", tracker.isActiveExclusiveDurableSub(subscriptionName2));
+        assertEquals(subscriptionName2, tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer1), "Unexpected first sub link name");
+        assertTrue(tracker.isActiveExclusiveDurableSub(subscriptionName2), "Should be active durable sub");
         // This shouldn't happen, checks elsewhere should stop requests for an exclusive durable sub link
         // name if its already in use, but check we get the same name anyway even with an existing registration.
         JmsConsumerInfo sub2consumer2 = createConsumerInfo(subscriptionName2, topicName, false, true, true);
-        assertEquals("Unexpected second sub link name", subscriptionName2, tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer2));
+        assertEquals(subscriptionName2, tracker.reserveNextSubscriptionLinkName(subscriptionName2, sub2consumer2), "Unexpected second sub link name");
     }
 
     @Test
@@ -476,7 +476,7 @@
 
         // For the first shared sub name
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, true, true, true);
-        assertEquals("Unexpected first sub link name", subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
+        assertEquals(subscriptionName1, tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
 
         // Create another shared sub that is not registered and remove it
         JmsConsumerInfo sub2consumer1 = createConsumerInfo(subscriptionName2, topicName, true, true, true);
@@ -503,7 +503,7 @@
 
         // For the first shared sub name
         JmsConsumerInfo sub1consumer1 = createConsumerInfo(subscriptionName1, topicName, true, false, true);
-        assertEquals("Unexpected first sub link name", subscriptionName1 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1));
+        assertEquals(subscriptionName1 + SUB_NAME_DELIMITER + "volatile1", tracker.reserveNextSubscriptionLinkName(subscriptionName1, sub1consumer1), "Unexpected first sub link name");
 
         // Create another shared sub that is not registered and remove it
         JmsConsumerInfo sub2consumer1 = createConsumerInfo(subscriptionName2, topicName, true, false, true);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSupportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSupportTest.java
index 5153903..95f9e4b 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSupportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpSupportTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.provider.amqp;
 
-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.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 java.net.URI;
 import java.net.URISyntaxException;
@@ -31,7 +31,7 @@
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.transport.AmqpError;
 import org.apache.qpid.proton.amqp.transport.ErrorCondition;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 public class AmqpSupportTest {
@@ -65,7 +65,7 @@
         URI redirection = pre.getRedirectionURI();
 
         assertEquals(5672, redirection.getPort());
-        assertTrue("localhost.localdomain", redirection.getQuery().contains("amqp.vhost=localhost.localdomain"));
+        assertTrue(redirection.getQuery().contains("amqp.vhost=localhost.localdomain"), "localhost.localdomain");
         assertEquals("localhost", redirection.getHost());
         assertEquals("amqp", redirection.getScheme());
         assertEquals("/websocket", redirection.getPath());
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpTransferTagGeneratorTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpTransferTagGeneratorTest.java
index 4acbbf8..1c428a6 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpTransferTagGeneratorTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/AmqpTransferTagGeneratorTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.provider.amqp;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-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.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.DataInputStream;
@@ -29,8 +29,8 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests for the AMQP Transfer Tag Generator
@@ -165,7 +165,7 @@
         }
     }
 
-    @Ignore("Used to test performance")
+    @Disabled("Used to test performance")
     @Test
     public void testTagGeneratorOverTime() {
         final AmqpTransferTagGenerator tagGen = new AmqpTransferTagGenerator(true);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpCodecTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpCodecTest.java
index 788b500..d86e711 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpCodecTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpCodecTest.java
@@ -21,11 +21,12 @@
 package org.apache.qpid.jms.provider.amqp.message;
 
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.encodeMessage;
-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.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
 import java.nio.charset.Charset;
@@ -65,8 +66,9 @@
 import org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
 import org.apache.qpid.proton.message.Message;
 import org.apache.qpid.proton.message.impl.MessageImpl;
-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.mockito.Mockito;
 
 import io.netty.buffer.ByteBuf;
@@ -76,10 +78,10 @@
     private AmqpConsumer mockConsumer;
     private AmqpConnection mockConnection;
 
-    @Before
+    @BeforeEach
     @Override
-    public void setUp() throws Exception {
-        super.setUp();
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         JmsConsumerId consumerId = new JmsConsumerId("ID:MOCK:1", 1, 1);
         mockConnection = Mockito.mock(AmqpConnection.class);
@@ -165,13 +167,13 @@
         message.setBody(new AmqpValue("test"));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsTextMessage.class, jmsMessage.getClass(), "Unexpected message class type");
         assertEquals(DeliveryMode.PERSISTENT, jmsMessage.getJMSDeliveryMode());
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsTextMessageFacade.class, facade.getClass(), "Unexpected facade class type");
         assertTrue(facade.isPersistent());
     }
 
@@ -182,13 +184,13 @@
         message.setBody(new AmqpValue("test"));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsTextMessage.class, jmsMessage.getClass(), "Unexpected message class type");
         assertEquals(8, jmsMessage.getJMSPriority());
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsTextMessageFacade.class, facade.getClass(), "Unexpected facade class type");
         assertEquals(8, facade.getPriority());
     }
 
@@ -199,12 +201,12 @@
         message.setBody(new AmqpValue("test"));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsTextMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
-        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, jmsMessage.getFacade().getClass());
+        assertEquals(AmqpJmsTextMessageFacade.class, jmsMessage.getFacade().getClass(), "Unexpected facade class type");
         AmqpJmsTextMessageFacade facade = (AmqpJmsTextMessageFacade) jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
+        assertNotNull(facade, "Facade should not be null");
         assertTrue(facade.getAmqpHeader().isFirstAcquirer());
     }
 
@@ -215,12 +217,12 @@
         message.setBody(new AmqpValue("test"));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsTextMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
-        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, jmsMessage.getFacade().getClass());
+        assertEquals(AmqpJmsTextMessageFacade.class, jmsMessage.getFacade().getClass(), "Unexpected facade class type");
         AmqpJmsTextMessageFacade facade = (AmqpJmsTextMessageFacade) jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
+        assertNotNull(facade, "Facade should not be null");
         assertEquals(65535, facade.getAmqpHeader().getTimeToLive());
     }
 
@@ -231,13 +233,13 @@
         message.setBody(new AmqpValue("test"));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsTextMessage.class, jmsMessage.getClass(), "Unexpected message class type");
         assertTrue(jmsMessage.getJMSRedelivered());
 
-        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, jmsMessage.getFacade().getClass());
+        assertEquals(AmqpJmsTextMessageFacade.class, jmsMessage.getFacade().getClass(), "Unexpected facade class type");
         AmqpJmsTextMessageFacade facade = (AmqpJmsTextMessageFacade) jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
+        assertNotNull(facade, "Facade should not be null");
         assertEquals(2, facade.getRedeliveryCount());
         assertEquals(2, facade.getAmqpHeader().getDeliveryCount());
         assertEquals(UnsignedInteger.valueOf(2), facade.getHeader().getDeliveryCount());
@@ -253,17 +255,19 @@
      *
      * @throws Exception if an error occurs during the test.
      */
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateMessageFromUnknownMessageTypeAnnotationValueThrows() throws Exception {
-        Message message = Proton.message();
+        assertThrows(IOException.class, () -> {
+            Message message = Proton.message();
 
-        Map<Symbol, Object> map = new HashMap<Symbol, Object>();
-        map.put(AmqpMessageSupport.JMS_MSG_TYPE, (byte) -1);
+            Map<Symbol, Object> map = new HashMap<Symbol, Object>();
+            map.put(AmqpMessageSupport.JMS_MSG_TYPE, (byte) -1);
 
-        MessageAnnotations messageAnnotations = new MessageAnnotations(map);
-        message.setMessageAnnotations(messageAnnotations);
+            MessageAnnotations messageAnnotations = new MessageAnnotations(map);
+            message.setMessageAnnotations(messageAnnotations);
 
-        AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message));
+            AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message));
+        });
     }
 
     /**
@@ -284,12 +288,12 @@
         message.setMessageAnnotations(messageAnnotations);
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -310,12 +314,12 @@
         message.setMessageAnnotations(messageAnnotations);
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsBytesMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsBytesMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsBytesMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsBytesMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -336,12 +340,12 @@
         message.setMessageAnnotations(messageAnnotations);
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsTextMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsTextMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -385,18 +389,18 @@
         }
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsObjectMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsObjectMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsObjectMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsObjectMessageFacade.class, facade.getClass(), "Unexpected facade class type");
 
         AmqpObjectTypeDelegate delegate = ((AmqpJmsObjectMessageFacade) facade).getDelegate();
         if (setJavaSerializedContentType) {
-            assertTrue("Unexpected delegate type: " + delegate, delegate instanceof AmqpSerializedObjectDelegate);
+            assertTrue(delegate instanceof AmqpSerializedObjectDelegate, "Unexpected delegate type: " + delegate);
         } else {
-            assertTrue("Unexpected delegate type: " + delegate, delegate instanceof AmqpTypedObjectDelegate);
+            assertTrue(delegate instanceof AmqpTypedObjectDelegate, "Unexpected delegate type: " + delegate);
         }
     }
 
@@ -418,12 +422,12 @@
         message.setMessageAnnotations(messageAnnotations);
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsStreamMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsStreamMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsStreamMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsStreamMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     // =============== Without The Message Type Annotation =========
@@ -444,12 +448,12 @@
         message.setContentType(AmqpMessageSupport.OCTET_STREAM_CONTENT_TYPE.toString());
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsBytesMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsBytesMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsBytesMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsBytesMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -465,12 +469,12 @@
         assertNull(message.getContentType());
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsBytesMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsBytesMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsBytesMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsBytesMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -486,15 +490,15 @@
         message.setContentType(AmqpMessageSupport.SERIALIZED_JAVA_OBJECT_CONTENT_TYPE.toString());
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsObjectMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsObjectMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsObjectMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsObjectMessageFacade.class, facade.getClass(), "Unexpected facade class type");
 
         AmqpObjectTypeDelegate delegate = ((AmqpJmsObjectMessageFacade) facade).getDelegate();
-        assertTrue("Unexpected delegate type: " + delegate, delegate instanceof AmqpSerializedObjectDelegate);
+        assertTrue(delegate instanceof AmqpSerializedObjectDelegate, "Unexpected delegate type: " + delegate);
     }
 
     @Test
@@ -503,12 +507,12 @@
         message.setContentType("text/plain");
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsTextMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsTextMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -523,12 +527,12 @@
         message.setContentType("unknown-content-type");
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     // --------- Data Body Section ---------
@@ -548,12 +552,12 @@
         message.setContentType(AmqpMessageSupport.OCTET_STREAM_CONTENT_TYPE.toString());
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsBytesMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsBytesMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsBytesMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsBytesMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -570,12 +574,12 @@
         message.setContentType("unknown-content-type");
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsBytesMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsBytesMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsBytesMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsBytesMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -594,12 +598,12 @@
         assertNull(message.getContentType());
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsBytesMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsBytesMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsBytesMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsBytesMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -617,15 +621,15 @@
         message.setContentType(AmqpMessageSupport.SERIALIZED_JAVA_OBJECT_CONTENT_TYPE.toString());
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsObjectMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsObjectMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsObjectMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsObjectMessageFacade.class, facade.getClass(), "Unexpected facade class type");
 
         AmqpObjectTypeDelegate delegate = ((AmqpJmsObjectMessageFacade) facade).getDelegate();
-        assertTrue("Unexpected delegate type: " + delegate, delegate instanceof AmqpSerializedObjectDelegate);
+        assertTrue(delegate instanceof AmqpSerializedObjectDelegate, "Unexpected delegate type: " + delegate);
     }
 
     /**
@@ -730,15 +734,15 @@
         message.setContentType(contentType);
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsTextMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsTextMessageFacade.class, facade.getClass(), "Unexpected facade class type");
 
         AmqpJmsTextMessageFacade textFacade = (AmqpJmsTextMessageFacade) facade;
-        assertEquals("Unexpected character set", expectedCharset, textFacade.getCharset());
+        assertEquals(expectedCharset, textFacade.getCharset(), "Unexpected character set");
     }
 
     // --------- AmqpValue Body Section ---------
@@ -755,12 +759,12 @@
         message.setBody(new AmqpValue("content"));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsTextMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsTextMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -775,12 +779,12 @@
         message.setBody(new AmqpValue(null));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsTextMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsTextMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsTextMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsTextMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -796,15 +800,15 @@
         message.setBody(new AmqpValue(map));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsObjectMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsObjectMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsObjectMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsObjectMessageFacade.class, facade.getClass(), "Unexpected facade class type");
 
         AmqpObjectTypeDelegate delegate = ((AmqpJmsObjectMessageFacade) facade).getDelegate();
-        assertTrue("Unexpected delegate type: " + delegate, delegate instanceof AmqpTypedObjectDelegate);
+        assertTrue(delegate instanceof AmqpTypedObjectDelegate, "Unexpected delegate type: " + delegate);
     }
 
     /**
@@ -820,15 +824,15 @@
         message.setBody(new AmqpValue(list));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsObjectMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsObjectMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsObjectMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsObjectMessageFacade.class, facade.getClass(), "Unexpected facade class type");
 
         AmqpObjectTypeDelegate delegate = ((AmqpJmsObjectMessageFacade) facade).getDelegate();
-        assertTrue("Unexpected delegate type: " + delegate, delegate instanceof AmqpTypedObjectDelegate);
+        assertTrue(delegate instanceof AmqpTypedObjectDelegate, "Unexpected delegate type: " + delegate);
     }
 
     /**
@@ -844,12 +848,12 @@
         message.setBody(new AmqpValue(binary));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsBytesMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsBytesMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsBytesMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsBytesMessageFacade.class, facade.getClass(), "Unexpected facade class type");
     }
 
     /**
@@ -864,15 +868,15 @@
         message.setBody(new AmqpValue(UUID.randomUUID()));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsObjectMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsObjectMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsObjectMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsObjectMessageFacade.class, facade.getClass(), "Unexpected facade class type");
 
         AmqpObjectTypeDelegate delegate = ((AmqpJmsObjectMessageFacade) facade).getDelegate();
-        assertTrue("Unexpected delegate type: " + delegate, delegate instanceof AmqpTypedObjectDelegate);
+        assertTrue(delegate instanceof AmqpTypedObjectDelegate, "Unexpected delegate type: " + delegate);
     }
 
     // --------- AmqpSequence Body Section ---------
@@ -890,15 +894,15 @@
         message.setBody(new AmqpSequence(list));
 
         JmsMessage jmsMessage = AmqpCodec.decodeMessage(mockConsumer, encodeMessage(message)).asJmsMessage();
-        assertNotNull("Message should not be null", jmsMessage);
-        assertEquals("Unexpected message class type", JmsObjectMessage.class, jmsMessage.getClass());
+        assertNotNull(jmsMessage, "Message should not be null");
+        assertEquals(JmsObjectMessage.class, jmsMessage.getClass(), "Unexpected message class type");
 
         JmsMessageFacade facade = jmsMessage.getFacade();
-        assertNotNull("Facade should not be null", facade);
-        assertEquals("Unexpected facade class type", AmqpJmsObjectMessageFacade.class, facade.getClass());
+        assertNotNull(facade, "Facade should not be null");
+        assertEquals(AmqpJmsObjectMessageFacade.class, facade.getClass(), "Unexpected facade class type");
 
         AmqpObjectTypeDelegate delegate = ((AmqpJmsObjectMessageFacade) facade).getDelegate();
-        assertTrue("Unexpected delegate type: " + delegate, delegate instanceof AmqpTypedObjectDelegate);
+        assertTrue(delegate instanceof AmqpTypedObjectDelegate, "Unexpected delegate type: " + delegate);
     }
 
     //----- Message Annotation Handling --------------------------------------//
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpDestinationHelperTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpDestinationHelperTest.java
index 8d63ab2..1534eb4 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpDestinationHelperTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpDestinationHelperTest.java
@@ -27,12 +27,13 @@
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.LEGACY_TEMPORARY_ATTRIBUTE;
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.LEGACY_TOPIC_ATTRIBUTE;
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.LEGACY_TO_TYPE_MSG_ANNOTATION_SYMBOL;
-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.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.HashSet;
 import java.util.Set;
@@ -43,7 +44,7 @@
 import org.apache.qpid.jms.JmsTemporaryTopic;
 import org.apache.qpid.jms.JmsTopic;
 import org.apache.qpid.jms.provider.amqp.AmqpConnection;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 public class AmqpDestinationHelperTest {
@@ -699,15 +700,19 @@
         Mockito.verify(message).removeMessageAnnotation(JMS_DEST_TYPE_MSG_ANNOTATION_SYMBOL);
     }
 
-    @Test(expected=NullPointerException.class)
+    @Test
     public void testSetToAddressFromDestinationWithNullDestinationAndNullMessage() {
-        AmqpDestinationHelper.setToAddressFromDestination(null, null);
+        assertThrows(NullPointerException.class, () -> {
+            AmqpDestinationHelper.setToAddressFromDestination(null, null);
+        });
     }
 
-    @Test(expected=NullPointerException.class)
+    @Test
     public void testSetToAddressFromDestinationWithNullMessage() {
-        JmsDestination destination = new JmsQueue("testAddress");
-        AmqpDestinationHelper.setToAddressFromDestination(null, destination);
+        assertThrows(NullPointerException.class, () -> {
+            JmsDestination destination = new JmsQueue("testAddress");
+            AmqpDestinationHelper.setToAddressFromDestination(null, destination);
+        });
     }
 
     @Test
@@ -811,15 +816,19 @@
         Mockito.verify(message).removeMessageAnnotation(JMS_REPLY_TO_TYPE_MSG_ANNOTATION_SYMBOL);
     }
 
-    @Test(expected=NullPointerException.class)
+    @Test
     public void testSetReplyToAddressFromDestinationWithNullDestinationAndNullMessage() {
-        AmqpDestinationHelper.setReplyToAddressFromDestination(null, null);
+        assertThrows(NullPointerException.class, () -> {
+            AmqpDestinationHelper.setReplyToAddressFromDestination(null, null);
+        });
     }
 
-    @Test(expected=NullPointerException.class)
+    @Test
     public void testSetReplyToAddressFromDestinationWithNullMessage() {
-        JmsDestination destination = new JmsQueue("testAddress");
-        AmqpDestinationHelper.setReplyToAddressFromDestination(null, destination);
+        assertThrows(NullPointerException.class, () -> {
+            JmsDestination destination = new JmsQueue("testAddress");
+            AmqpDestinationHelper.setReplyToAddressFromDestination(null, destination);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpHeaderTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpHeaderTest.java
index b786fd0..57b0afb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpHeaderTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpHeaderTest.java
@@ -16,16 +16,16 @@
  */
 package org.apache.qpid.jms.provider.amqp.message;
 
-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 org.apache.qpid.proton.amqp.UnsignedByte;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 import org.apache.qpid.proton.amqp.messaging.Header;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test the AmqpHeader implementation
@@ -102,7 +102,7 @@
     public void testGetHeaderReturnsNullWhenAllDefault() {
         AmqpHeader header = new AmqpHeader();
 
-        assertNull("Header should not have been created as values are defaulted", header.getHeader());
+        assertNull(header.getHeader(), "Header should not have been created as values are defaulted");
     }
 
     @Test
@@ -111,7 +111,7 @@
         amqpHeader.setDurable(true);
 
         Header header = amqpHeader.getHeader();
-        assertNotNull("Header should have been created as values are not all defaulted", header);
+        assertNotNull(header, "Header should have been created as values are not all defaulted");
         assertTrue(header.getDurable());
     }
 
@@ -122,7 +122,7 @@
         amqpHeader.setDeliveryCount(count);
 
         Header header = amqpHeader.getHeader();
-        assertNotNull("Header should have been created as values are not all defaulted", header);
+        assertNotNull(header, "Header should have been created as values are not all defaulted");
         assertEquals(UnsignedInteger.valueOf(count), header.getDeliveryCount());
     }
 
@@ -133,7 +133,7 @@
         amqpHeader.setPriority(priority);
 
         Header header = amqpHeader.getHeader();
-        assertNotNull("Header should have been created as values are not all defaulted", header);
+        assertNotNull(header, "Header should have been created as values are not all defaulted");
         assertEquals(UnsignedByte.valueOf(priority), header.getPriority());
     }
 
@@ -144,7 +144,7 @@
         amqpHeader.setTimeToLive(ttl);
 
         Header header = amqpHeader.getHeader();
-        assertNotNull("Header should have been created as values are not all defaulted", header);
+        assertNotNull(header, "Header should have been created as values are not all defaulted");
         assertEquals(UnsignedInteger.valueOf(ttl), header.getTtl());
     }
 
@@ -154,7 +154,7 @@
         amqpHeader.setFirstAcquirer(true);
 
         Header header = amqpHeader.getHeader();
-        assertNotNull("Header should have been created as values are not all defaulted", header);
+        assertNotNull(header, "Header should have been created as values are not all defaulted");
         assertTrue(header.getFirstAcquirer());
     }
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
index f77c814..a315ce6 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
@@ -17,13 +17,13 @@
 package org.apache.qpid.jms.provider.amqp.message;
 
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_BYTES_MESSAGE;
-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.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -41,7 +41,7 @@
 import org.apache.qpid.proton.amqp.messaging.Properties;
 import org.apache.qpid.proton.amqp.messaging.Section;
 import org.apache.qpid.proton.message.Message;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 import io.netty.buffer.ByteBufInputStream;
@@ -63,7 +63,7 @@
 
         MessageAnnotations annotations = amqpBytesMessageFacade.getMessageAnnotations();
 
-        assertNull("MessageAnnotations section was present", annotations);
+        assertNull(annotations, "MessageAnnotations section was present");
 
         assertEquals(JMS_BYTES_MESSAGE, amqpBytesMessageFacade.getJmsMsgType());
     }
@@ -76,14 +76,14 @@
         assertNotNull(byteArrayInputStream);
 
         // try to read a byte, it should return -1 bytes read, i.e EOS.
-        assertEquals("Expected input stream to be at end but data was returned", END_OF_STREAM, byteArrayInputStream.read(new byte[1]));
+        assertEquals(END_OF_STREAM, byteArrayInputStream.read(new byte[1]), "Expected input stream to be at end but data was returned");
     }
 
     @Test
     public void testGetBodyLengthUsingNewMessage() throws Exception {
         AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createNewBytesMessageFacade();
 
-        assertEquals("Message reports unexpected length", 0, amqpBytesMessageFacade.getBodyLength());
+        assertEquals(0, amqpBytesMessageFacade.getBodyLength(), "Message reports unexpected length");
     }
 
     // ---------- test for normal message operations -------------------------//
@@ -98,7 +98,7 @@
 
         amqpBytesMessageFacade.reset();
 
-        assertEquals("Message reports unexpected length", bytes.length, amqpBytesMessageFacade.getBodyLength());
+        assertEquals(bytes.length, amqpBytesMessageFacade.getBodyLength(), "Message reports unexpected length");
     }
 
     @Test
@@ -107,7 +107,7 @@
 
         OutputStream os1 = amqpBytesMessageFacade.getOutputStream();
         OutputStream os2 = amqpBytesMessageFacade.getOutputStream();
-        assertSame("Got different output streams", os1, os2);
+        assertSame(os1, os2, "Got different output streams");
     }
 
     @Test
@@ -116,7 +116,7 @@
 
         InputStream is1 = amqpBytesMessageFacade.getInputStream();
         InputStream is2 = amqpBytesMessageFacade.getInputStream();
-        assertSame("Got different input streams", is1, is2);
+        assertSame(is1, is2, "Got different input streams");
     }
 
     /**
@@ -183,7 +183,7 @@
         assertNotNull(properties.getContentType());
 
         String contentType = properties.getContentType().toString();
-        assertNotNull("content type should be set", contentType);
+        assertNotNull(contentType, "content type should be set");
         assertEquals("application/octet-stream", contentType);
     }
 
@@ -224,8 +224,8 @@
 
         amqpBytesMessageFacade.clearBody();
 
-        assertTrue("Expected no message content from facade", amqpBytesMessageFacade.getBodyLength() == 0);
-        assertEquals("Expected no data from facade, but got some", END_OF_STREAM, amqpBytesMessageFacade.getInputStream().read(new byte[1]));
+        assertTrue(amqpBytesMessageFacade.getBodyLength() == 0, "Expected no message content from facade");
+        assertEquals(END_OF_STREAM, amqpBytesMessageFacade.getInputStream().read(new byte[1]), "Expected no data from facade, but got some");
 
         assertDataBodyAsExpected(amqpBytesMessageFacade.getBody(), 0);
     }
@@ -243,7 +243,7 @@
 
         amqpBytesMessageFacade.clearBody();
 
-        assertEquals("Expected no data from facade, but got some", END_OF_STREAM, amqpBytesMessageFacade.getInputStream().read(new byte[1]));
+        assertEquals(END_OF_STREAM, amqpBytesMessageFacade.getInputStream().read(new byte[1]), "Expected no data from facade, but got some");
 
         assertDataBodyAsExpected(amqpBytesMessageFacade.getBody(), 0);
     }
@@ -301,7 +301,7 @@
         assertNotNull(byteArrayInputStream);
 
         // try to read a byte, it should return -1 bytes read, i.e EOS.
-        assertEquals("Expected input stream to be at end but data was returned", END_OF_STREAM, byteArrayInputStream.read(new byte[1]));
+        assertEquals(END_OF_STREAM, byteArrayInputStream.read(new byte[1]), "Expected input stream to be at end but data was returned");
     }
 
     @Test
@@ -311,7 +311,7 @@
         message.setBody(new Data(new Binary(new byte[length])));
         AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Message reports unexpected length", length, amqpBytesMessageFacade.getBodyLength());
+        assertEquals(length, amqpBytesMessageFacade.getBodyLength(), "Message reports unexpected length");
     }
 
     @Test
@@ -321,7 +321,7 @@
         message.setBody(new AmqpValue(new Binary(new byte[length])));
         AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Message reports unexpected length", length, amqpBytesMessageFacade.getBodyLength());
+        assertEquals(length, amqpBytesMessageFacade.getBodyLength(), "Message reports unexpected length");
     }
 
     @Test
@@ -330,7 +330,7 @@
         message.setBody(new AmqpValue(new Binary(new byte[0])));
         AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Message reports unexpected length", 0, amqpBytesMessageFacade.getBodyLength());
+        assertEquals(0, amqpBytesMessageFacade.getBodyLength(), "Message reports unexpected length");
     }
 
     @Test
@@ -339,7 +339,7 @@
         message.setBody(new AmqpValue(null));
         AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Message reports unexpected length", 0, amqpBytesMessageFacade.getBodyLength());
+        assertEquals(0, amqpBytesMessageFacade.getBodyLength(), "Message reports unexpected length");
     }
 
     @Test
@@ -358,7 +358,7 @@
         assertTrue(Arrays.equals(bytes, receivedBytes));
 
         // verify no more bytes remain, i.e EOS
-        assertEquals("Expected input stream to be at end but data was returned", END_OF_STREAM, bytesStream.read(new byte[1]));
+        assertEquals(END_OF_STREAM, bytesStream.read(new byte[1]), "Expected input stream to be at end but data was returned");
     }
 
     @Test
@@ -378,7 +378,7 @@
         assertTrue(Arrays.equals(bytes, receivedBytes));
 
         // verify no more bytes remain, i.e EOS
-        assertEquals("Expected input stream to be at end but data was returned", END_OF_STREAM, bytesStream.read(new byte[1]));
+        assertEquals(END_OF_STREAM, bytesStream.read(new byte[1]), "Expected input stream to be at end but data was returned");
     }
 
     @Test
@@ -390,8 +390,8 @@
         InputStream bytesStream = amqpBytesMessageFacade.getInputStream();
         assertNotNull(bytesStream);
 
-        assertEquals("Message reports unexpected length", 0, amqpBytesMessageFacade.getBodyLength());
-        assertEquals("Expected input stream to be at end but data was returned", END_OF_STREAM, bytesStream.read(new byte[1]));
+        assertEquals(0, amqpBytesMessageFacade.getBodyLength(), "Message reports unexpected length");
+        assertEquals(END_OF_STREAM, bytesStream.read(new byte[1]), "Expected input stream to be at end but data was returned");
     }
 
     @Test
@@ -459,18 +459,18 @@
         // Retrieve the new Binary from the underlying message, check they match
         // (the backing arrays may be different length so not checking arrayEquals)
         Data body = (Data) amqpBytesMessageFacade.getBody();
-        assertEquals("Underlying message data section did not contain the expected bytes", new Binary(replacement), body.getValue());
+        assertEquals(new Binary(replacement), body.getValue(), "Underlying message data section did not contain the expected bytes");
 
-        assertEquals("expected body length to match replacement bytes", replacement.length, amqpBytesMessageFacade.getBodyLength());
+        assertEquals(replacement.length, amqpBytesMessageFacade.getBodyLength(), "expected body length to match replacement bytes");
 
         // retrieve the new bytes via an InputStream, check they match expected
         byte[] receivedBytes = new byte[replacement.length];
         InputStream bytesStream = amqpBytesMessageFacade.getInputStream();
         bytesStream.read(receivedBytes);
-        assertTrue("Retrieved bytes from input steam did not match expected bytes", Arrays.equals(replacement, receivedBytes));
+        assertTrue(Arrays.equals(replacement, receivedBytes), "Retrieved bytes from input steam did not match expected bytes");
 
         // verify no more bytes remain, i.e EOS
-        assertEquals("Expected input stream to be at end but data was returned", END_OF_STREAM, bytesStream.read(new byte[1]));
+        assertEquals(END_OF_STREAM, bytesStream.read(new byte[1]), "Expected input stream to be at end but data was returned");
     }
 
     @Test
@@ -604,11 +604,11 @@
     //--------- utility methods ----------
 
     private void assertDataBodyAsExpected(Section body, int length) {
-        assertNotNull("Expected body section to be present", body);
-        assertEquals("Unexpected body section type", Data.class, body.getClass());
+        assertNotNull(body, "Expected body section to be present");
+        assertEquals(Data.class, body.getClass(), "Unexpected body section type");
         Binary value = ((Data) body).getValue();
         assertNotNull(value);
-        assertEquals("Unexpected body length", length, value.getLength());
+        assertEquals(length, value.getLength(), "Unexpected body length");
     }
 
     private InputStream substituteMockInputStream(AmqpJmsBytesMessageFacade bytesMessage) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMapMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMapMessageFacadeTest.java
index da9130c..2a7a00d 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMapMessageFacadeTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMapMessageFacadeTest.java
@@ -17,12 +17,12 @@
 package org.apache.qpid.jms.provider.amqp.message;
 
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_MAP_MESSAGE;
-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.Enumeration;
@@ -34,7 +34,7 @@
 import org.apache.qpid.proton.amqp.messaging.AmqpValue;
 import org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
 import org.apache.qpid.proton.message.Message;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for the AmqpJmsMapMessageFacade class
@@ -49,7 +49,7 @@
 
         MessageAnnotations annotations = amqpMapMessageFacade.getMessageAnnotations();
 
-        assertNull("MessageAnnotations section was present", annotations);
+        assertNull(annotations, "MessageAnnotations section was present");
 
         assertEquals(JMS_MAP_MESSAGE, amqpMapMessageFacade.getJmsMsgType());
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java
index 0288eb5..5dc9312 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacadeTest.java
@@ -21,14 +21,15 @@
 package org.apache.qpid.jms.provider.amqp.message;
 
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_MESSAGE;
-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.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.assertNotNull;
+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.nio.ByteBuffer;
 import java.util.Arrays;
@@ -64,7 +65,7 @@
 import org.apache.qpid.proton.amqp.messaging.Properties;
 import org.apache.qpid.proton.codec.Data;
 import org.apache.qpid.proton.message.Message;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 public class AmqpJmsMessageFacadeTest extends AmqpJmsMessageTypesTestCase  {
@@ -87,32 +88,36 @@
     public void testNewMessageHasUnderlyingHeaderSectionWithDurableTrue() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNotNull("Expected message to have Header section", amqpMessageFacade.getHeader());
-        assertTrue("Durable not as expected", amqpMessageFacade.getAmqpHeader().isDurable());
+        assertNotNull(amqpMessageFacade.getHeader(), "Expected message to have Header section");
+        assertTrue(amqpMessageFacade.getAmqpHeader().isDurable(), "Durable not as expected");
     }
 
     // --- ttl field  ---
 
-    @Test(expected = MessageFormatException.class)
+    @Test
     public void testSetAmqpTimeToLiveRejectsNegatives() throws Exception {
-        AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
+        assertThrows(MessageFormatException.class, () -> {
+            AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        amqpMessageFacade.setAmqpTimeToLiveOverride(-1L);
+            amqpMessageFacade.setAmqpTimeToLiveOverride(-1L);
+        });
     }
 
-    @Test(expected = MessageFormatException.class)
+    @Test
     public void testSetAmqpTimeToLiveRejectsValuesFromTwoToThirtyTwo() throws Exception {
-        AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
-        // check values over 2^32 - 1 are rejected
-        amqpMessageFacade.setAmqpTimeToLiveOverride(0X100000000L);
+        assertThrows(MessageFormatException.class, () -> {
+            AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
+            // check values over 2^32 - 1 are rejected
+            amqpMessageFacade.setAmqpTimeToLiveOverride(0X100000000L);
+        });
     }
 
     @Test
     public void testNewMessageHasUnderlyingHeaderSectionWithNoTtlSet() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNotNull("Expected message to have Header section", amqpMessageFacade.getHeader());
-        assertNull("Ttl field should not be set", amqpMessageFacade.getHeader().getTtl());
+        assertNotNull(amqpMessageFacade.getHeader(), "Expected message to have Header section");
+        assertNull(amqpMessageFacade.getHeader().getTtl(), "Ttl field should not be set");
     }
 
     @Test
@@ -130,15 +135,15 @@
 
         long expiration = amqpMessageFacade.getExpiration();
 
-        assertTrue("Should have sythesized expiration based on current time + ttl", start + ttl <= expiration);
-        assertTrue("Should have sythesized expiration based on current time + ttl", expiration <= end + ttl);
+        assertTrue(start + ttl <= expiration, "Should have sythesized expiration based on current time + ttl");
+        assertTrue(expiration <= end + ttl, "Should have sythesized expiration based on current time + ttl");
 
         long expiration2 = amqpMessageFacade.getExpiration();
-        assertEquals("Second retrieval should return same result", expiration, expiration2);
+        assertEquals(expiration, expiration2, "Second retrieval should return same result");
 
         amqpMessageFacade = amqpMessageFacade.copy();
         long expiration3 = amqpMessageFacade.getExpiration();
-        assertEquals("Thrid retrieval from copy should return same result", expiration, expiration3);
+        assertEquals(expiration, expiration3, "Thrid retrieval from copy should return same result");
     }
 
     @Test
@@ -147,15 +152,15 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertFalse("Should not have a ttl override", amqpMessageFacade.hasAmqpTimeToLiveOverride());
+        assertFalse(amqpMessageFacade.hasAmqpTimeToLiveOverride(), "Should not have a ttl override");
         assertEquals(0, amqpMessageFacade.getAmqpTimeToLiveOverride());
 
         amqpMessageFacade.setAmqpTimeToLiveOverride(ttl);
 
-        assertTrue("Should have a ttl override", amqpMessageFacade.hasAmqpTimeToLiveOverride());
+        assertTrue(amqpMessageFacade.hasAmqpTimeToLiveOverride(), "Should have a ttl override");
         assertEquals(ttl, amqpMessageFacade.getAmqpTimeToLiveOverride());
         // check value on underlying TTL field is NOT set
-        assertNull("TTL field on underlying message should NOT be set", amqpMessageFacade.getHeader().getTtl());
+        assertNull(amqpMessageFacade.getHeader().getTtl(), "TTL field on underlying message should NOT be set");
     }
 
     @Test
@@ -166,13 +171,13 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("TTL has been unset already", origTtl, message.getTtl());
+        assertEquals(origTtl, message.getTtl(), "TTL has been unset already");
 
         amqpMessageFacade.onSend(0);
 
         // check value on underlying TTL field is NOT set
-        assertEquals("TTL has not been cleared", 0, amqpMessageFacade.getAmqpHeader().getTimeToLive());
-        assertNull("Underlying Header should be null, no values set to non-defaults", amqpMessageFacade.getHeader());
+        assertEquals(0, amqpMessageFacade.getAmqpHeader().getTimeToLive(), "TTL has not been cleared");
+        assertNull(amqpMessageFacade.getHeader(), "Underlying Header should be null, no values set to non-defaults");
     }
 
     @Test
@@ -184,13 +189,13 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("TTL has been unset already", origTtl, message.getTtl());
+        assertEquals(origTtl, message.getTtl(), "TTL has been unset already");
 
         amqpMessageFacade.onSend(newTtl);
 
         // check value on underlying TTL field is NOT set
-        assertEquals("TTL has not been overriden", newTtl, amqpMessageFacade.getAmqpHeader().getTimeToLive());
-        assertEquals("TTL field on underlying message should be set", UnsignedInteger.valueOf(newTtl), amqpMessageFacade.getHeader().getTtl());
+        assertEquals(newTtl, amqpMessageFacade.getAmqpHeader().getTimeToLive(), "TTL has not been overriden");
+        assertEquals(UnsignedInteger.valueOf(newTtl), amqpMessageFacade.getHeader().getTtl(), "TTL field on underlying message should be set");
     }
 
     @Test
@@ -205,7 +210,7 @@
         amqpMessageFacade.onSend(producerTtl);
 
         // check value on underlying TTL field is set to the override
-        assertEquals("TTL has not been overriden", overrideTtl, amqpMessageFacade.getAmqpHeader().getTimeToLive());
+        assertEquals(overrideTtl, amqpMessageFacade.getAmqpHeader().getTimeToLive(), "TTL has not been overriden");
     }
 
     // --- delivery count  ---
@@ -215,7 +220,7 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
         // JMS delivery count starts at one.
-        assertEquals("expected delivery count value not found", 1, amqpMessageFacade.getDeliveryCount());
+        assertEquals(1, amqpMessageFacade.getDeliveryCount(), "expected delivery count value not found");
 
         // Redelivered state inferred from delivery count
         assertFalse(amqpMessageFacade.isRedelivered());
@@ -227,9 +232,9 @@
         Message message = Proton.message();
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNull("expected no header section to exist", message.getHeader());
+        assertNull(message.getHeader(), "expected no header section to exist");
         // JMS delivery count starts at one.
-        assertEquals("expected delivery count value not found", 1, amqpMessageFacade.getDeliveryCount());
+        assertEquals(1, amqpMessageFacade.getDeliveryCount(), "expected delivery count value not found");
 
         // Redelivered state inferred from delivery count
         assertFalse(amqpMessageFacade.isRedelivered());
@@ -245,7 +250,7 @@
         message.setHeader(header);
 
         // JMS delivery count starts at one.
-        assertEquals("expected delivery count value not found", 1, amqpMessageFacade.getDeliveryCount());
+        assertEquals(1, amqpMessageFacade.getDeliveryCount(), "expected delivery count value not found");
 
         // Redelivered state inferred from delivery count
         assertFalse(amqpMessageFacade.isRedelivered());
@@ -262,7 +267,7 @@
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
         // JMS delivery count starts at one.
-        assertEquals("expected delivery count value not found", 2, amqpMessageFacade.getDeliveryCount());
+        assertEquals(2, amqpMessageFacade.getDeliveryCount(), "expected delivery count value not found");
 
         // Redelivered state inferred from delivery count
         assertTrue(amqpMessageFacade.isRedelivered());
@@ -323,7 +328,7 @@
     public void testSetRedeliveryCountToZeroWhenNoHeadersNoNPE() {
         Message message = Proton.message();
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
-        assertNull("expected no header section to exist", message.getHeader());
+        assertNull(message.getHeader(), "expected no header section to exist");
         amqpMessageFacade.setRedeliveryCount(0);
     }
 
@@ -333,7 +338,7 @@
     public void testGetPriorityIs4ForNewMessage() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertEquals("expected priority value not found", 4, amqpMessageFacade.getPriority());
+        assertEquals(4, amqpMessageFacade.getPriority(), "expected priority value not found");
     }
 
     /**
@@ -344,8 +349,8 @@
         Message message = Proton.message();
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNull("expected no header section to exist", message.getHeader());
-        assertEquals("expected priority value not found", 4, amqpMessageFacade.getPriority());
+        assertNull(message.getHeader(), "expected no header section to exist");
+        assertEquals(4, amqpMessageFacade.getPriority(), "expected priority value not found");
     }
 
     /**
@@ -361,7 +366,7 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("expected priority value not found", 4, amqpMessageFacade.getPriority());
+        assertEquals(4, amqpMessageFacade.getPriority(), "expected priority value not found");
     }
 
     /**
@@ -379,7 +384,7 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("expected priority value not found", priority, amqpMessageFacade.getPriority());
+        assertEquals(priority, amqpMessageFacade.getPriority(), "expected priority value not found");
     }
 
     /**
@@ -398,7 +403,7 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("expected priority value not found", 9, amqpMessageFacade.getPriority());
+        assertEquals(9, amqpMessageFacade.getPriority(), "expected priority value not found");
     }
 
     /**
@@ -417,7 +422,7 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("expected priority value not found", 9, amqpMessageFacade.getPriority());
+        assertEquals(9, amqpMessageFacade.getPriority(), "expected priority value not found");
     }
 
     /**
@@ -431,8 +436,8 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setPriority(priority);
 
-        assertEquals("expected priority value not found", priority, amqpMessageFacade.getPriority());
-        assertEquals("expected priority value not found", UnsignedByte.valueOf(priority), amqpMessageFacade.getHeader().getPriority());
+        assertEquals(priority, amqpMessageFacade.getPriority(), "expected priority value not found");
+        assertEquals(UnsignedByte.valueOf(priority), amqpMessageFacade.getHeader().getPriority(), "expected priority value not found");
     }
 
     /**
@@ -444,8 +449,8 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setPriority(-1);
 
-        assertEquals("expected priority value not found", 0, amqpMessageFacade.getPriority());
-        assertEquals("expected priority value not found", UnsignedByte.valueOf((byte) 0), amqpMessageFacade.getHeader().getPriority());
+        assertEquals(0, amqpMessageFacade.getPriority(), "expected priority value not found");
+        assertEquals(UnsignedByte.valueOf((byte) 0), amqpMessageFacade.getHeader().getPriority(), "expected priority value not found");
     }
 
     /**
@@ -457,8 +462,8 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setPriority(11);
 
-        assertEquals("expected priority value not found", 9, amqpMessageFacade.getPriority());
-        assertEquals("expected priority value not found", UnsignedByte.valueOf((byte) 9), amqpMessageFacade.getHeader().getPriority());
+        assertEquals(9, amqpMessageFacade.getPriority(), "expected priority value not found");
+        assertEquals(UnsignedByte.valueOf((byte) 9), amqpMessageFacade.getHeader().getPriority(), "expected priority value not found");
     }
 
     /**
@@ -471,12 +476,12 @@
         Message message = Proton.message();
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNull("expected no header section to exist", message.getHeader());
+        assertNull(message.getHeader(), "expected no header section to exist");
 
         amqpMessageFacade.setPriority(Message.DEFAULT_PRIORITY);
 
-        assertNull("expected no header section to exist", message.getHeader());
-        assertEquals("expected priority to be default", Message.DEFAULT_PRIORITY, amqpMessageFacade.getPriority());
+        assertNull(message.getHeader(), "expected no header section to exist");
+        assertEquals(Message.DEFAULT_PRIORITY, amqpMessageFacade.getPriority(), "expected priority to be default");
     }
 
     /**
@@ -496,10 +501,10 @@
         amqpMessageFacade.setPriority(Message.DEFAULT_PRIORITY);
 
         //check the expected value is still returned
-        assertEquals("expected priority value not returned", Message.DEFAULT_PRIORITY, amqpMessageFacade.getPriority());
+        assertEquals(Message.DEFAULT_PRIORITY, amqpMessageFacade.getPriority(), "expected priority value not returned");
 
         //check the underlying header field was actually cleared rather than set to Message.DEFAULT_PRIORITY
-        assertNull("underlying header priority field was not cleared", amqpMessageFacade.getHeader());
+        assertNull(amqpMessageFacade.getHeader(), "underlying header priority field was not cleared");
     }
 
     // ====== AMQP Properties Section =======
@@ -517,7 +522,7 @@
     public void testGetGroupIdIsNullForNewMessage() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNull("expected GroupId to be null on new message", amqpMessageFacade.getGroupId());
+        assertNull(amqpMessageFacade.getGroupId(), "expected GroupId to be null on new message");
     }
 
     /**
@@ -533,7 +538,7 @@
 
         amqpMessageFacade.setGroupId(null);
 
-        assertNull("properties section was created", amqpMessageFacade.getProperties());
+        assertNull(amqpMessageFacade.getProperties(), "properties section was created");
     }
 
     /**
@@ -550,10 +555,10 @@
 
         amqpMessageFacade.setGroupId(groupId);
 
-        assertNotNull("properties section was not created", amqpMessageFacade.getProperties());
-        assertEquals("value was not set for GroupId as expected", groupId, amqpMessageFacade.getProperties().getGroupId());
+        assertNotNull(amqpMessageFacade.getProperties(), "properties section was not created");
+        assertEquals(groupId, amqpMessageFacade.getProperties().getGroupId(), "value was not set for GroupId as expected");
 
-        assertEquals("value was not set for GroupId as expected", groupId, amqpMessageFacade.getGroupId());
+        assertEquals(groupId, amqpMessageFacade.getGroupId(), "value was not set for GroupId as expected");
     }
 
     /**
@@ -569,8 +574,8 @@
         amqpMessageFacade.setGroupId(groupId);
         amqpMessageFacade.setGroupId(null);
 
-        assertNull("value was not cleared for GroupId as expected", amqpMessageFacade.getProperties().getGroupId());
-        assertNull("value was not cleared for GroupId as expected", amqpMessageFacade.getGroupId());
+        assertNull(amqpMessageFacade.getProperties().getGroupId(), "value was not cleared for GroupId as expected");
+        assertNull(amqpMessageFacade.getGroupId(), "value was not cleared for GroupId as expected");
     }
 
     // --- reply-to-group-id field ---
@@ -584,7 +589,7 @@
     public void testGetReplyToGroupIdIsNullForNewMessage() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNull("expected ReplyToGroupId to be null on new message", amqpMessageFacade.getReplyToGroupId());
+        assertNull(amqpMessageFacade.getReplyToGroupId(), "expected ReplyToGroupId to be null on new message");
     }
 
     /**
@@ -596,7 +601,7 @@
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
         String replyToGroupId = amqpMessageFacade.getReplyToGroupId();
-        assertNull("expected ReplyToGroupId to be null on message without properties section", replyToGroupId);
+        assertNull(replyToGroupId, "expected ReplyToGroupId to be null on message without properties section");
     }
 
     /**
@@ -612,7 +617,7 @@
 
         amqpMessageFacade.setReplyToGroupId(null);
 
-        assertNull("properties section was created", amqpMessageFacade.getProperties());
+        assertNull(amqpMessageFacade.getProperties(), "properties section was created");
     }
 
     /**
@@ -630,7 +635,7 @@
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
         String replyToGroupId = amqpMessageFacade.getReplyToGroupId();
-        assertNull("expected ReplyToGroupId to be null on message with properties section but no reply-to-group-id", replyToGroupId);
+        assertNull(replyToGroupId, "expected ReplyToGroupId to be null on message with properties section but no reply-to-group-id");
     }
 
     /**
@@ -650,8 +655,8 @@
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
         String actual = amqpMessageFacade.getReplyToGroupId();
-        assertNotNull("expected ReplyToGroupId on message was not found", actual);
-        assertEquals("expected ReplyToGroupId on message was not found", replyToGroupId, actual);
+        assertNotNull(actual, "expected ReplyToGroupId on message was not found");
+        assertEquals(replyToGroupId, actual, "expected ReplyToGroupId on message was not found");
     }
 
     /**
@@ -666,8 +671,8 @@
 
         amqpMessageFacade.setReplyToGroupId(replyToGroupId);
 
-        assertNotNull("expected ReplyToGroupId on message was not found", amqpMessageFacade.getProperties().getReplyToGroupId());
-        assertEquals("expected ReplyToGroupId on message was not found", replyToGroupId, amqpMessageFacade.getProperties().getReplyToGroupId());
+        assertNotNull(amqpMessageFacade.getProperties().getReplyToGroupId(), "expected ReplyToGroupId on message was not found");
+        assertEquals(replyToGroupId, amqpMessageFacade.getProperties().getReplyToGroupId(), "expected ReplyToGroupId on message was not found");
     }
 
     @Test
@@ -678,11 +683,11 @@
 
         amqpMessageFacade.setReplyToGroupId(replyToGroupId);
 
-        assertNotNull("expected ReplyToGroupId on message was not found", amqpMessageFacade.getProperties().getReplyToGroupId());
-        assertEquals("expected ReplyToGroupId on message was not found", replyToGroupId, amqpMessageFacade.getProperties().getReplyToGroupId());
+        assertNotNull(amqpMessageFacade.getProperties().getReplyToGroupId(), "expected ReplyToGroupId on message was not found");
+        assertEquals(replyToGroupId, amqpMessageFacade.getProperties().getReplyToGroupId(), "expected ReplyToGroupId on message was not found");
 
         amqpMessageFacade.setReplyToGroupId(null);
-        assertNull("expected ReplyToGroupId on message to be null", amqpMessageFacade.getProperties().getReplyToGroupId());
+        assertNull(amqpMessageFacade.getProperties().getReplyToGroupId(), "expected ReplyToGroupId on message to be null");
     }
 
     /**
@@ -698,8 +703,8 @@
 
         amqpMessageFacade.setReplyToGroupId(replyToGroupId);
 
-        assertNotNull("expected ReplyToGroupId on message was not found", amqpMessageFacade.getReplyToGroupId());
-        assertEquals("expected ReplyToGroupId on message was not found", replyToGroupId, amqpMessageFacade.getReplyToGroupId());
+        assertNotNull(amqpMessageFacade.getReplyToGroupId(), "expected ReplyToGroupId on message was not found");
+        assertEquals(replyToGroupId, amqpMessageFacade.getReplyToGroupId(), "expected ReplyToGroupId on message was not found");
     }
 
     // --- group-sequence field ---
@@ -711,8 +716,8 @@
         int groupSequence = 5;
         amqpMessageFacade.setGroupSequence(groupSequence);
 
-        assertEquals("underlying message should have groupSequence field value", groupSequence, amqpMessageFacade.getProperties().getGroupSequence().longValue());
-        assertEquals("GroupSequence not as expected", groupSequence, amqpMessageFacade.getGroupSequence());
+        assertEquals(groupSequence, amqpMessageFacade.getProperties().getGroupSequence().longValue(), "underlying message should have groupSequence field value");
+        assertEquals(groupSequence, amqpMessageFacade.getGroupSequence(), "GroupSequence not as expected");
     }
 
     /**
@@ -729,8 +734,8 @@
         UnsignedInteger mapped = UnsignedInteger.valueOf(MAX_UINT - delta);
         amqpMessageFacade.setGroupSequence(-1 - delta);
 
-        assertEquals("underlying message should have no groupSequence field value",mapped, amqpMessageFacade.getProperties().getGroupSequence());
-        assertEquals("GroupSequence not as expected", -1 - delta, amqpMessageFacade.getGroupSequence());
+        assertEquals(mapped, amqpMessageFacade.getProperties().getGroupSequence(), "underlying message should have no groupSequence field value");
+        assertEquals(-1 - delta, amqpMessageFacade.getGroupSequence(), "GroupSequence not as expected");
     }
 
     @Test
@@ -744,7 +749,7 @@
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
         // The unsigned int value >= 2^31 will be represented as a negative, and so should begin from minimum signed int value
-        assertEquals("GroupSequence not as expected", Integer.MIN_VALUE, amqpMessageFacade.getGroupSequence());
+        assertEquals(Integer.MIN_VALUE, amqpMessageFacade.getGroupSequence(), "GroupSequence not as expected");
     }
 
     @Test
@@ -758,7 +763,7 @@
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
         // The unsigned int value 2^32-1 will be represented as a negative, and should be the largest such value, -1
-        assertEquals("GroupSequence not as expected", -1, amqpMessageFacade.getGroupSequence());
+        assertEquals(-1, amqpMessageFacade.getGroupSequence(), "GroupSequence not as expected");
     }
 
     @Test
@@ -769,7 +774,7 @@
         amqpMessageFacade.setGroupSequence(0);
 
         // assertNull("underlying message should have no groupSequence field value", amqpMessageFacade.getAmqpMessage().getProperties().getGroupSequence());
-        assertEquals("GroupSequence should be 0", 0, amqpMessageFacade.getGroupSequence());
+        assertEquals(0, amqpMessageFacade.getGroupSequence(), "GroupSequence should be 0");
     }
 
     @Test
@@ -778,8 +783,8 @@
 
         amqpMessageFacade.setGroupSequence(0);
 
-        assertNull("underlying message should still have no properties setion", amqpMessageFacade.getProperties());
-        assertEquals("GroupSequence should be 0", 0, amqpMessageFacade.getGroupSequence());
+        assertNull(amqpMessageFacade.getProperties(), "underlying message should still have no properties setion");
+        assertEquals(0, amqpMessageFacade.getGroupSequence(), "GroupSequence should be 0");
     }
 
     // --- to field ---
@@ -913,7 +918,7 @@
     public void testGetCorrelationIdIsNullOnNewMessage() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNull("Expected correlationId to be null on new message", amqpMessageFacade.getCorrelationId());
+        assertNull(amqpMessageFacade.getCorrelationId(), "Expected correlationId to be null on new message");
     }
 
     /**
@@ -928,8 +933,8 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setCorrelationId(testCorrelationId);
 
-        assertEquals("correlationId value on underlying AMQP message not as expected", testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId());
-        assertEquals("Expected correlationId not returned", testCorrelationId, amqpMessageFacade.getCorrelationId());
+        assertEquals(testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId(), "correlationId value on underlying AMQP message not as expected");
+        assertEquals(testCorrelationId, amqpMessageFacade.getCorrelationId(), "Expected correlationId not returned");
     }
 
     /**
@@ -944,8 +949,8 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setCorrelationId(testCorrelationId);
 
-        assertEquals("correlationId value on underlying AMQP message not as expected", testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId());
-        assertEquals("Expected correlationId not returned from facade", testCorrelationId, amqpMessageFacade.getCorrelationId());
+        assertEquals(testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId(), "correlationId value on underlying AMQP message not as expected");
+        assertEquals(testCorrelationId, amqpMessageFacade.getCorrelationId(), "Expected correlationId not returned from facade");
     }
 
     /**
@@ -960,8 +965,8 @@
         amqpMessageFacade.setCorrelationId("cid");
         amqpMessageFacade.setCorrelationId(null);
 
-        assertNull("Unexpected correlationId value on underlying AMQP message", amqpMessageFacade.getCorrelationId());
-        assertNull("Expected correlationId bytes to be null", amqpMessageFacade.getCorrelationId());
+        assertNull(amqpMessageFacade.getCorrelationId(), "Unexpected correlationId value on underlying AMQP message");
+        assertNull(amqpMessageFacade.getCorrelationId(), "Expected correlationId bytes to be null");
     }
 
     /**
@@ -998,8 +1003,8 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setCorrelationId(converted);
 
-        assertEquals("Unexpected correlationId value on underlying AMQP message", testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId());
-        assertEquals("Expected correlationId not returned", converted, amqpMessageFacade.getCorrelationId());
+        assertEquals(testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId(), "Unexpected correlationId value on underlying AMQP message");
+        assertEquals(converted, amqpMessageFacade.getCorrelationId(), "Expected correlationId not returned");
     }
 
     /**
@@ -1026,8 +1031,8 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setCorrelationId(converted);
 
-        assertEquals("Unexpected correlationId value on underlying AMQP message", testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId());
-        assertEquals("Expected correlationId not returned", converted, amqpMessageFacade.getCorrelationId());
+        assertEquals(testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId(), "Unexpected correlationId value on underlying AMQP message");
+        assertEquals(converted, amqpMessageFacade.getCorrelationId(), "Expected correlationId not returned");
     }
 
     /**
@@ -1058,8 +1063,8 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setCorrelationId(converted);
 
-        assertEquals("Unexpected correlationId value on underlying AMQP message", testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId());
-        assertEquals("Expected correlationId not returned", converted, amqpMessageFacade.getCorrelationId());
+        assertEquals(testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId(), "Unexpected correlationId value on underlying AMQP message");
+        assertEquals(converted, amqpMessageFacade.getCorrelationId(), "Expected correlationId not returned");
     }
 
     /**
@@ -1075,8 +1080,8 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setCorrelationIdBytes(bytes);
 
-        assertEquals("Unexpected correlationId value on underlying AMQP message", testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId());
-        assertArrayEquals("Expected correlationId bytes not returned", bytes, amqpMessageFacade.getCorrelationIdBytes());
+        assertEquals(testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId(), "Unexpected correlationId value on underlying AMQP message");
+        assertArrayEquals(bytes, amqpMessageFacade.getCorrelationIdBytes(), "Expected correlationId bytes not returned");
     }
 
     /**
@@ -1093,22 +1098,22 @@
         amqpMessageFacade.setCorrelationIdBytes(bytes);
         amqpMessageFacade.setCorrelationIdBytes(null);
 
-        assertNull("Unexpected correlationId value on underlying AMQP message", amqpMessageFacade.getCorrelationId());
-        assertNull("Expected correlationId bytes to be null", amqpMessageFacade.getCorrelationIdBytes());
+        assertNull(amqpMessageFacade.getCorrelationId(), "Unexpected correlationId value on underlying AMQP message");
+        assertNull(amqpMessageFacade.getCorrelationIdBytes(), "Expected correlationId bytes to be null");
     }
 
     @Test
     public void testSetCorrelationIdBytesNullDoesNotCreateProperties() throws Exception {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setCorrelationIdBytes(null);
-        assertNull("Unexpected Properties Object in AMQP message", amqpMessageFacade.getProperties());
+        assertNull(amqpMessageFacade.getProperties(), "Unexpected Properties Object in AMQP message");
     }
 
     @Test
     public void testGetCorrelationIdBytesOnNewMessage() throws Exception {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNull("Expected correlationId bytes to be null", amqpMessageFacade.getCorrelationIdBytes());
+        assertNull(amqpMessageFacade.getCorrelationIdBytes(), "Expected correlationId bytes to be null");
     }
 
     @Test
@@ -1145,8 +1150,8 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Unexpected correlationId value on underlying AMQP message", testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId());
-        assertArrayEquals("Expected correlationId bytes not returned", bytes, amqpMessageFacade.getCorrelationIdBytes());
+        assertEquals(testCorrelationId, amqpMessageFacade.getProperties().getCorrelationId(), "Unexpected correlationId value on underlying AMQP message");
+        assertArrayEquals(bytes, amqpMessageFacade.getCorrelationIdBytes(), "Expected correlationId bytes not returned");
     }
 
     /**
@@ -1171,10 +1176,10 @@
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
         String result = amqpMessageFacade.getCorrelationId();
-        assertNotNull("Expected a correlationId on received message", result);
-        assertEquals("Incorrect correlationId value received", expected, result);
+        assertNotNull(result, "Expected a correlationId on received message");
+        assertEquals(expected, result, "Incorrect correlationId value received");
         if(!appSpecificCorrelationId) {
-            assertTrue("Should have have 'ID:' prefix", result.startsWith(AmqpMessageIdHelper.JMS_ID_PREFIX));
+            assertTrue(result.startsWith(AmqpMessageIdHelper.JMS_ID_PREFIX), "Should have have 'ID:' prefix");
         }
     }
 
@@ -1193,8 +1198,8 @@
 
         amqpMessageFacade.setMessageId(testMessageId);
 
-        assertEquals("Expected messageId not returned", testMessageId, amqpMessageFacade.getMessageId());
-        assertEquals("ID strings were not equal", testMessageId, amqpMessageFacade.getMessageId());
+        assertEquals(testMessageId, amqpMessageFacade.getMessageId(), "Expected messageId not returned");
+        assertEquals(testMessageId, amqpMessageFacade.getMessageId(), "ID strings were not equal");
     }
 
     /**
@@ -1211,7 +1216,7 @@
 
         amqpMessageFacade.setMessageId(testMessageId);
 
-        assertEquals("underlying messageId value not as expected", testMessageId, amqpMessageFacade.getMessageId());
+        assertEquals(testMessageId, amqpMessageFacade.getMessageId(), "underlying messageId value not as expected");
     }
 
     /**
@@ -1228,12 +1233,12 @@
 
         amqpMessageFacade.setMessageId(testMessageId);
 
-        assertNotNull("messageId should not be null", amqpMessageFacade.getMessageId());
+        assertNotNull(amqpMessageFacade.getMessageId(), "messageId should not be null");
 
         amqpMessageFacade.setMessageId(null);
 
-        assertNull("Expected messageId to be null", amqpMessageFacade.getMessageId());
-        assertNull("ID was not null", amqpMessageFacade.getMessageId());
+        assertNull(amqpMessageFacade.getMessageId(), "Expected messageId to be null");
+        assertNull(amqpMessageFacade.getMessageId(), "ID was not null");
     }
 
     /**
@@ -1306,9 +1311,9 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNotNull("Expected a messageId on received message", amqpMessageFacade.getMessageId());
+        assertNotNull(amqpMessageFacade.getMessageId(), "Expected a messageId on received message");
 
-        assertEquals("Incorrect messageId value received", expected, amqpMessageFacade.getMessageId());
+        assertEquals(expected, amqpMessageFacade.getMessageId(), "Incorrect messageId value received");
     }
 
     private Binary createBinaryId() {
@@ -1326,7 +1331,7 @@
     @Test
     public void testGetProviderMessageIdObjectOnNewMessage() throws Exception {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
-        assertNull("Expected messageId not returned", amqpMessageFacade.getProviderMessageIdObject());
+        assertNull(amqpMessageFacade.getProviderMessageIdObject(), "Expected messageId not returned");
     }
 
     /**
@@ -1342,8 +1347,8 @@
 
         amqpMessageFacade.setProviderMessageIdObject(testMessageId);
 
-        assertEquals("Expected messageId not returned", testMessageId, amqpMessageFacade.getProviderMessageIdObject());
-        assertEquals("ID strings were not equal", testMessageId, amqpMessageFacade.getProviderMessageIdObject());
+        assertEquals(testMessageId, amqpMessageFacade.getProviderMessageIdObject(), "Expected messageId not returned");
+        assertEquals(testMessageId, amqpMessageFacade.getProviderMessageIdObject(), "ID strings were not equal");
     }
 
     @Test
@@ -1353,22 +1358,22 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
         amqpMessageFacade.setProviderMessageIdObject(testMessageId);
-        assertEquals("Expected messageId not returned", testMessageId, amqpMessageFacade.getProviderMessageIdObject());
+        assertEquals(testMessageId, amqpMessageFacade.getProviderMessageIdObject(), "Expected messageId not returned");
 
         amqpMessageFacade.setProviderMessageIdObject(null);
-        assertNull("Expected messageId not returned", amqpMessageFacade.getProviderMessageIdObject());
+        assertNull(amqpMessageFacade.getProviderMessageIdObject(), "Expected messageId not returned");
     }
 
     @Test
     public void testSetProviderMessageIdObjectNullDoesNotCreateProperties() throws Exception {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNull("Expected null value not returned", amqpMessageFacade.getProperties());
+        assertNull(amqpMessageFacade.getProperties(), "Expected null value not returned");
 
         amqpMessageFacade.setProviderMessageIdObject(null);
 
-        assertNull("Expected null value not returned", amqpMessageFacade.getProviderMessageIdObject());
-        assertNull("Expected null value not returned", amqpMessageFacade.getProperties());
+        assertNull(amqpMessageFacade.getProviderMessageIdObject(), "Expected null value not returned");
+        assertNull(amqpMessageFacade.getProperties(), "Expected null value not returned");
     }
 
     // --- creation-time field  ---
@@ -1377,20 +1382,20 @@
     public void testSetCreationTimeOnNewNewMessage() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNull("Expected null Properties section", amqpMessageFacade.getProperties());
+        assertNull(amqpMessageFacade.getProperties(), "Expected null Properties section");
 
         long expected = 1;
         amqpMessageFacade.setTimestamp(expected);
 
-        assertEquals("Unexpected timestamp value", expected, amqpMessageFacade.getTimestamp());
-        assertEquals("Expected creation-time field to be set on new Properties section", new Date(expected), amqpMessageFacade.getProperties().getCreationTime());
+        assertEquals(expected, amqpMessageFacade.getTimestamp(), "Unexpected timestamp value");
+        assertEquals(new Date(expected), amqpMessageFacade.getProperties().getCreationTime(), "Expected creation-time field to be set on new Properties section");
     }
 
     @Test
     public void testGetTimestampIsZeroForNewMessage() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertEquals("Expected no timestamp", 0, amqpMessageFacade.getTimestamp());
+        assertEquals(0, amqpMessageFacade.getTimestamp(), "Expected no timestamp");
     }
 
     @Test
@@ -1401,8 +1406,8 @@
 
         amqpMessageFacade.setTimestamp(timestamp);
 
-        assertEquals("Expected creation-time field to be set", timestamp.longValue(), amqpMessageFacade.getProperties().getCreationTime().getTime());
-        assertEquals("Expected timestamp", timestamp.longValue(), amqpMessageFacade.getTimestamp());
+        assertEquals(timestamp.longValue(), amqpMessageFacade.getProperties().getCreationTime().getTime(), "Expected creation-time field to be set");
+        assertEquals(timestamp.longValue(), amqpMessageFacade.getTimestamp(), "Expected timestamp");
     }
 
     @Test
@@ -1411,8 +1416,8 @@
 
         amqpMessageFacade.setTimestamp(0);
 
-        assertNull("underlying message should have no properties section", amqpMessageFacade.getProperties());
-        assertEquals("Timestamp should not be set", 0, amqpMessageFacade.getTimestamp());
+        assertNull(amqpMessageFacade.getProperties(), "underlying message should have no properties section");
+        assertEquals(0, amqpMessageFacade.getTimestamp(), "Timestamp should not be set");
     }
 
     @Test
@@ -1424,8 +1429,8 @@
 
         amqpMessageFacade.setTimestamp(0);
 
-        assertNull("Expected creation-time to be null", amqpMessageFacade.getProperties().getCreationTime());
-        assertEquals("Expected no timestamp", 0, amqpMessageFacade.getTimestamp());
+        assertNull(amqpMessageFacade.getProperties().getCreationTime(), "Expected creation-time to be null");
+        assertEquals(0, amqpMessageFacade.getTimestamp(), "Expected no timestamp");
     }
 
     // --- absolute-expiry-time field  ---
@@ -1434,7 +1439,7 @@
     public void testGetExpirationIsZeroForNewMessage() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertEquals("Expected no expiration", 0, amqpMessageFacade.getExpiration());
+        assertEquals(0, amqpMessageFacade.getExpiration(), "Expected no expiration");
     }
 
     @Test
@@ -1445,19 +1450,19 @@
 
         amqpMessageFacade.setExpiration(timestamp);
 
-        assertEquals("Expected absolute-expiry-time to be set", timestamp.longValue(), amqpMessageFacade.getProperties().getAbsoluteExpiryTime().getTime());
-        assertEquals("Expected expiration to be set", timestamp.longValue(), amqpMessageFacade.getExpiration());
+        assertEquals(timestamp.longValue(), amqpMessageFacade.getProperties().getAbsoluteExpiryTime().getTime(), "Expected absolute-expiry-time to be set");
+        assertEquals(timestamp.longValue(), amqpMessageFacade.getExpiration(), "Expected expiration to be set");
     }
 
     @Test
     public void testSetExpirationZeroOnNewMessageDoesNotCreatePropertiesSection() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNull("Expected properties section not to exist", amqpMessageFacade.getProperties());
+        assertNull(amqpMessageFacade.getProperties(), "Expected properties section not to exist");
 
         amqpMessageFacade.setExpiration(0);
 
-        assertNull("Expected properties section still not to exist", amqpMessageFacade.getProperties());
+        assertNull(amqpMessageFacade.getProperties(), "Expected properties section still not to exist");
     }
 
     @Test
@@ -1469,8 +1474,8 @@
 
         amqpMessageFacade.setExpiration(0);
 
-        assertNull("Expected absolute-expiry-time to be null", amqpMessageFacade.getProperties().getAbsoluteExpiryTime());
-        assertEquals("Expected no expiration", 0, amqpMessageFacade.getExpiration());
+        assertNull(amqpMessageFacade.getProperties().getAbsoluteExpiryTime(), "Expected absolute-expiry-time to be null");
+        assertEquals(0, amqpMessageFacade.getExpiration(), "Expected no expiration");
     }
 
     // --- user-id field  ---
@@ -1479,7 +1484,7 @@
     public void testGetUserIdIsNullForNewMessage() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNull("expected userid to be null on new message", amqpMessageFacade.getUserId());
+        assertNull(amqpMessageFacade.getUserId(), "expected userid to be null on new message");
     }
 
     @Test
@@ -1495,8 +1500,8 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNotNull("Expected a userid on received message", amqpMessageFacade.getUserId());
-        assertEquals("Incorrect messageId value received", userIdString, amqpMessageFacade.getUserId());
+        assertNotNull(amqpMessageFacade.getUserId(), "Expected a userid on received message");
+        assertEquals(userIdString, amqpMessageFacade.getUserId(), "Incorrect messageId value received");
     }
 
     @Test
@@ -1511,7 +1516,7 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNull("Expected a userid on received message", amqpMessageFacade.getUserId());
+        assertNull(amqpMessageFacade.getUserId(), "Expected a userid on received message");
     }
 
     /**
@@ -1529,9 +1534,9 @@
 
         amqpMessageFacade.setUserId(userIdString);
 
-        assertNotNull("properties section was not created", amqpMessageFacade.getProperties());
-        assertTrue("bytes were not set as expected for userid", Arrays.equals(bytes, amqpMessageFacade.getProperties().getUserId().getArray()));
-        assertEquals("userid not as expected", userIdString, amqpMessageFacade.getUserId());
+        assertNotNull(amqpMessageFacade.getProperties(), "properties section was not created");
+        assertTrue(Arrays.equals(bytes, amqpMessageFacade.getProperties().getUserId().getArray()), "bytes were not set as expected for userid");
+        assertEquals(userIdString, amqpMessageFacade.getUserId(), "userid not as expected");
     }
 
     /**
@@ -1547,9 +1552,9 @@
         amqpMessageFacade.setUserId(userIdString);
         amqpMessageFacade.setUserId(null);
 
-        assertNotNull("properties section was not created", amqpMessageFacade.getProperties());
-        assertNull("bytes were not cleared as expected for userid", amqpMessageFacade.getProperties().getUserId());
-        assertNull("userid not as expected", amqpMessageFacade.getUserId());
+        assertNotNull(amqpMessageFacade.getProperties(), "properties section was not created");
+        assertNull(amqpMessageFacade.getProperties().getUserId(), "bytes were not cleared as expected for userid");
+        assertNull(amqpMessageFacade.getUserId(), "userid not as expected");
     }
 
     @Test
@@ -1558,8 +1563,8 @@
 
         amqpMessageFacade.setUserId(null);
 
-        assertNull("underlying message should still have no properties setion", amqpMessageFacade.getProperties());
-        assertEquals("UserId should be null", null, amqpMessageFacade.getUserId());
+        assertNull(amqpMessageFacade.getProperties(), "underlying message should still have no properties setion");
+        assertEquals(null, amqpMessageFacade.getUserId(), "UserId should be null");
     }
 
     // --- user-id-bytes field  ---
@@ -1568,7 +1573,7 @@
     public void testGetUserIdBytesIsNullForNewMessage() {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNull("expected userid bytes to be null on new message", amqpMessageFacade.getUserIdBytes());
+        assertNull(amqpMessageFacade.getUserIdBytes(), "expected userid bytes to be null on new message");
     }
 
     @Test
@@ -1586,8 +1591,8 @@
 
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNotNull("Expected a userid on received message", amqpMessageFacade.getUserIdBytes());
-        assertArrayEquals("Incorrect userid bytes value received", bytes, amqpMessageFacade.getUserIdBytes());
+        assertNotNull(amqpMessageFacade.getUserIdBytes(), "Expected a userid on received message");
+        assertArrayEquals(bytes, amqpMessageFacade.getUserIdBytes(), "Incorrect userid bytes value received");
     }
 
     /**
@@ -1605,9 +1610,9 @@
 
         amqpMessageFacade.setUserIdBytes(bytes);
 
-        assertNotNull("properties section was not created", amqpMessageFacade.getProperties());
-        assertTrue("bytes were not set as expected for userid", Arrays.equals(bytes, amqpMessageFacade.getProperties().getUserId().getArray()));
-        assertArrayEquals("userid bytes not as expected", bytes, amqpMessageFacade.getUserIdBytes());
+        assertNotNull(amqpMessageFacade.getProperties(), "properties section was not created");
+        assertTrue(Arrays.equals(bytes, amqpMessageFacade.getProperties().getUserId().getArray()), "bytes were not set as expected for userid");
+        assertArrayEquals(bytes, amqpMessageFacade.getUserIdBytes(), "userid bytes not as expected");
     }
 
     /**
@@ -1625,13 +1630,13 @@
         amqpMessageFacade.setUserIdBytes(bytes);
         amqpMessageFacade.setUserIdBytes(null);
 
-        assertNotNull("properties section was not created", amqpMessageFacade.getProperties());
-        assertNull("bytes were not cleared as expected for userid", amqpMessageFacade.getProperties().getUserId());
-        assertNull("userid bytes not as expected", amqpMessageFacade.getUserIdBytes());
+        assertNotNull(amqpMessageFacade.getProperties(), "properties section was not created");
+        assertNull(amqpMessageFacade.getProperties().getUserId(), "bytes were not cleared as expected for userid");
+        assertNull(amqpMessageFacade.getUserIdBytes(), "userid bytes not as expected");
     }
 
-   @Test
-   public void testSetUserIdBytesEmptyOnMessageWithExistingUserId() throws Exception {
+    @Test
+    public void testSetUserIdBytesEmptyOnMessageWithExistingUserId() throws Exception {
        String userIdString = "testValue";
        byte[] bytes = userIdString.getBytes("UTF-8");
 
@@ -1640,9 +1645,9 @@
        amqpMessageFacade.setUserIdBytes(bytes);
        amqpMessageFacade.setUserIdBytes(new byte[0]);
 
-       assertNotNull("properties section was not created", amqpMessageFacade.getProperties());
-       assertNull("bytes were not cleared as expected for userid", amqpMessageFacade.getProperties().getUserId());
-       assertNull("userid bytes not as expected", amqpMessageFacade.getUserIdBytes());
+       assertNotNull(amqpMessageFacade.getProperties(), "properties section was not created");
+       assertNull(amqpMessageFacade.getProperties().getUserId(), "bytes were not cleared as expected for userid");
+       assertNull(amqpMessageFacade.getUserIdBytes(), "userid bytes not as expected");
    }
 
     @Test
@@ -1651,8 +1656,8 @@
 
         amqpMessageFacade.setUserIdBytes(null);
 
-        assertNull("underlying message should still have no properties setion", amqpMessageFacade.getProperties());
-        assertEquals("UserId should be null", null, amqpMessageFacade.getUserIdBytes());
+        assertNull(amqpMessageFacade.getProperties(), "underlying message should still have no properties setion");
+        assertEquals(null, amqpMessageFacade.getUserIdBytes(), "UserId should be null");
     }
 
     // ====== AMQP Message Annotations =======
@@ -1825,7 +1830,7 @@
     @Test
     public void testGetJMSTypeIsNullOnNewMessage() throws Exception {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
-        assertNull("did not expect a JMSType value to be present", amqpMessageFacade.getType());
+        assertNull(amqpMessageFacade.getType(), "did not expect a JMSType value to be present");
     }
 
     @Test
@@ -1834,8 +1839,9 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setType(jmsType);
 
-        assertEquals("Subject should be set to the provded JMSType string", jmsType,
-                        amqpMessageFacade.getProperties().getSubject());
+        assertEquals(jmsType,
+                        amqpMessageFacade.getProperties().getSubject(),
+                        "Subject should be set to the provded JMSType string");
     }
 
     @Test
@@ -1844,20 +1850,21 @@
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
         amqpMessageFacade.setType(jmsType);
-        assertEquals("Subject should be set to the provded JMSType string", jmsType,
-                        amqpMessageFacade.getProperties().getSubject());
+        assertEquals(jmsType,
+                        amqpMessageFacade.getProperties().getSubject(),
+                        "Subject should be set to the provded JMSType string");
         amqpMessageFacade.setType(null);
-        assertNull("Subject should be clear", amqpMessageFacade.getProperties().getSubject());
+        assertNull(amqpMessageFacade.getProperties().getSubject(), "Subject should be clear");
     }
 
     @Test
     public void testSetTypeNullWhenNoPropertiesDoesNotCreateProperties() throws Exception {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        assertNull("Should not be any Properties object by default", amqpMessageFacade.getProperties());
+        assertNull(amqpMessageFacade.getProperties(), "Should not be any Properties object by default");
         amqpMessageFacade.setType(null);
-        assertNull("Subject should be clear", amqpMessageFacade.getProperties());
-        assertNull("Should be no Type", amqpMessageFacade.getType());
+        assertNull(amqpMessageFacade.getProperties(), "Subject should be clear");
+        assertNull(amqpMessageFacade.getType(), "Should be no Type");
     }
 
     /**
@@ -1874,7 +1881,7 @@
         message.setSubject(myJMSType);
         AmqpJmsMessageFacade amqpMessageFacade = createReceivedMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("JMSType value was not as expected", myJMSType, amqpMessageFacade.getType());
+        assertEquals(myJMSType, amqpMessageFacade.getType(), "JMSType value was not as expected");
     }
 
     // ====== Content Type =======
@@ -1882,14 +1889,14 @@
     @Test
     public void testGetContentTypeIsNullOnNewMessage() throws Exception {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
-        assertNull("did not expect a JMSType value to be present", amqpMessageFacade.getContentType());
+        assertNull(amqpMessageFacade.getContentType(), "did not expect a JMSType value to be present");
     }
 
     @Test
     public void testGetContentTypeIsNullOnMessageWithEmptyPropertiesObject() throws Exception {
         AmqpJmsMessageFacade amqpMessageFacade = createNewMessageFacade();
         amqpMessageFacade.setProperties(new Properties());
-        assertNull("did not expect a JMSType value to be present", amqpMessageFacade.getContentType());
+        assertNull(amqpMessageFacade.getContentType(), "did not expect a JMSType value to be present");
     }
 
     // ====== AMQP Application Properties =======
@@ -2021,11 +2028,13 @@
         assertEquals(TEST_VALUE_STRING_A, underlyingApplicationProps.get(TEST_PROP_A));
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testSetPropertyUsingNullKeyCausesIAE() throws Exception {
-        JmsMessageFacade amqpMessageFacade = createNewMessageFacade();
+        assertThrows(IllegalArgumentException.class, () -> {
+            JmsMessageFacade amqpMessageFacade = createNewMessageFacade();
 
-        amqpMessageFacade.setProperty(null, "value");
+            amqpMessageFacade.setProperty(null, "value");
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFactoryTest.java
index f915f6f..336d7ee 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFactoryTest.java
@@ -22,12 +22,12 @@
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_OBJECT_MESSAGE;
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_STREAM_MESSAGE;
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_TEXT_MESSAGE;
-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.ObjectOutputStream;
@@ -52,7 +52,7 @@
 import org.apache.qpid.jms.meta.JmsConnectionInfo;
 import org.apache.qpid.jms.provider.amqp.AmqpConnection;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-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/provider/amqp/message/AmqpJmsMessagePropertyIntercepterTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepterTest.java
index 2f64bc9..58b7964 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepterTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessagePropertyIntercepterTest.java
@@ -19,12 +19,12 @@
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_AMQP_REPLY_TO_GROUP_ID;
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_AMQP_TTL;
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_AMQP_TYPED_ENCODING;
-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.anySet;
 
 import java.util.Set;
@@ -32,7 +32,7 @@
 import jakarta.jms.JMSException;
 import jakarta.jms.MessageFormatException;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageTypesTestCase.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageTypesTestCase.java
index dede595..3e2c1fc 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageTypesTestCase.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageTypesTestCase.java
@@ -26,17 +26,18 @@
 import org.apache.qpid.jms.provider.amqp.AmqpConsumer;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.proton.message.Message;
-import org.junit.Before;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestInfo;
 import org.mockito.Mockito;
 
 public class AmqpJmsMessageTypesTestCase extends QpidJmsTestCase {
 
     private JmsDestination consumerDestination;
 
-    @Before
+    @BeforeEach
     @Override
-    public void setUp() throws Exception {
-        super.setUp();
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         consumerDestination = new JmsTopic("TestTopic");
     };
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacadeTest.java
index 5a3b9af..89af579 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacadeTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsObjectMessageFacadeTest.java
@@ -17,15 +17,15 @@
 package org.apache.qpid.jms.provider.amqp.message;
 
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_OBJECT_MESSAGE;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-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.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.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -40,7 +40,7 @@
 import org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
 import org.apache.qpid.proton.amqp.messaging.Section;
 import org.apache.qpid.proton.message.Message;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests for class AmqpJmsObjectMessageFacade
@@ -55,7 +55,7 @@
 
         MessageAnnotations annotations = amqpObjectMessageFacade.getMessageAnnotations();
 
-        assertNull("MessageAnnotations section was present", annotations);
+        assertNull(annotations, "MessageAnnotations section was present");
         assertEquals(JMS_OBJECT_MESSAGE, amqpObjectMessageFacade.getJmsMsgType());
     }
 
@@ -90,11 +90,11 @@
         AmqpJmsObjectMessageFacade amqpObjectMessageFacade = createNewObjectMessageFacade(amqpTyped);
         amqpObjectMessageFacade.onSend(0);
 
-        assertNotNull("Message body should be presents", amqpObjectMessageFacade.getBody());
+        assertNotNull(amqpObjectMessageFacade.getBody(), "Message body should be presents");
         if(amqpTyped) {
-            assertSame("Expected existing body section to be replaced", AmqpTypedObjectDelegate.NULL_OBJECT_BODY, amqpObjectMessageFacade.getBody());
+            assertSame(AmqpTypedObjectDelegate.NULL_OBJECT_BODY, amqpObjectMessageFacade.getBody(), "Expected existing body section to be replaced");
         } else {
-            assertSame("Expected existing body section to be replaced", AmqpSerializedObjectDelegate.NULL_OBJECT_BODY, amqpObjectMessageFacade.getBody());
+            assertSame(AmqpSerializedObjectDelegate.NULL_OBJECT_BODY, amqpObjectMessageFacade.getBody(), "Expected existing body section to be replaced");
         }
     }
 
@@ -124,7 +124,7 @@
         Section section = amqpObjectMessageFacade.getBody();
         assertNotNull(section);
         assertEquals(Data.class, section.getClass());
-        assertArrayEquals("Underlying message data section did not contain the expected bytes", bytes, ((Data) section).getValue().getArray());
+        assertArrayEquals(bytes, ((Data) section).getValue().getArray(), "Underlying message data section did not contain the expected bytes");
     }
 
     /**
@@ -144,7 +144,7 @@
         Section section = amqpObjectMessageFacade.getBody();
         assertNotNull(section);
         assertEquals(AmqpValue.class, section.getClass());
-        assertEquals("Underlying message body did not contain the expected content", content, ((AmqpValue) section).getValue());
+        assertEquals(content, ((AmqpValue) section).getValue(), "Underlying message body did not contain the expected content");
     }
 
     /**
@@ -161,10 +161,10 @@
 
         AmqpJmsObjectMessageFacade amqpObjectMessageFacade = createReceivedObjectMessageFacade(createMockAmqpConsumer(), protonMessage);
 
-        assertNotNull("Expected existing body section to be found", amqpObjectMessageFacade.getBody());
+        assertNotNull(amqpObjectMessageFacade.getBody(), "Expected existing body section to be found");
         amqpObjectMessageFacade.setObject(null);
-        assertSame("Expected existing body section to be replaced", AmqpSerializedObjectDelegate.NULL_OBJECT_BODY, amqpObjectMessageFacade.getBody());
-        assertNull("Expected null object", amqpObjectMessageFacade.getObject());
+        assertSame(AmqpSerializedObjectDelegate.NULL_OBJECT_BODY, amqpObjectMessageFacade.getBody(), "Expected existing body section to be replaced");
+        assertNull(amqpObjectMessageFacade.getObject(), "Expected null object");
     }
 
     /**
@@ -181,10 +181,10 @@
 
         AmqpJmsObjectMessageFacade amqpObjectMessageFacade = createReceivedObjectMessageFacade(createMockAmqpConsumer(), protonMessage);
 
-        assertNotNull("Expected existing body section to be found", amqpObjectMessageFacade.getBody());
+        assertNotNull(amqpObjectMessageFacade.getBody(), "Expected existing body section to be found");
         amqpObjectMessageFacade.clearBody();
-        assertSame("Expected existing body section to be replaced", AmqpSerializedObjectDelegate.NULL_OBJECT_BODY, amqpObjectMessageFacade.getBody());
-        assertNull("Expected null object", amqpObjectMessageFacade.getObject());
+        assertSame(AmqpSerializedObjectDelegate.NULL_OBJECT_BODY, amqpObjectMessageFacade.getBody(), "Expected existing body section to be replaced");
+        assertNull(amqpObjectMessageFacade.getObject(), "Expected null object");
     }
 
     /**
@@ -203,24 +203,24 @@
 
         // verify we get a different-but-equal object back
         Serializable serialized = amqpObjectMessageFacade.getObject();
-        assertTrue("Unexpected object type returned", serialized instanceof Map<?, ?>);
+        assertTrue(serialized instanceof Map<?, ?>, "Unexpected object type returned");
         Map<?, ?> returnedObject1 = (Map<?, ?>) serialized;
-        assertNotSame("Expected different objects, due to snapshot being taken", origMap, returnedObject1);
-        assertEquals("Expected equal objects, due to snapshot being taken", origMap, returnedObject1);
+        assertNotSame(origMap, returnedObject1, "Expected different objects, due to snapshot being taken");
+        assertEquals(origMap, returnedObject1, "Expected equal objects, due to snapshot being taken");
 
         // mutate the original object
         origMap.put("key2", "value2");
 
         // verify we get a different-but-equal object back when compared to the previously retrieved object
         Serializable serialized2 = amqpObjectMessageFacade.getObject();
-        assertTrue("Unexpected object type returned", serialized2 instanceof Map<?, ?>);
+        assertTrue(serialized2 instanceof Map<?, ?>, "Unexpected object type returned");
         Map<?, ?> returnedObject2 = (Map<?, ?>) serialized2;
-        assertNotSame("Expected different objects, due to snapshot being taken", origMap, returnedObject2);
-        assertEquals("Expected equal objects, due to snapshot being taken", returnedObject1, returnedObject2);
+        assertNotSame(origMap, returnedObject2, "Expected different objects, due to snapshot being taken");
+        assertEquals(returnedObject1, returnedObject2, "Expected equal objects, due to snapshot being taken");
 
         // verify the mutated map is a different and not equal object
-        assertNotSame("Expected different objects, due to snapshot being taken", returnedObject1, returnedObject2);
-        assertNotEquals("Expected objects to differ, due to snapshot being taken", origMap, returnedObject2);
+        assertNotSame(returnedObject1, returnedObject2, "Expected different objects, due to snapshot being taken");
+        assertNotEquals(origMap, returnedObject2, "Expected objects to differ, due to snapshot being taken");
     }
 
     // ---------- test handling of received messages -------------------------//
@@ -242,7 +242,7 @@
         }
         AmqpJmsObjectMessageFacade amqpObjectMessageFacade = createReceivedObjectMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNull("Expected null object", amqpObjectMessageFacade.getObject());
+        assertNull(amqpObjectMessageFacade.getObject(), "Expected null object");
     }
 
     @Test
@@ -253,7 +253,7 @@
 
         AmqpJmsObjectMessageFacade amqpObjectMessageFacade = createReceivedObjectMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNull("Expected null object", amqpObjectMessageFacade.getObject());
+        assertNull(amqpObjectMessageFacade.getObject(), "Expected null object");
     }
 
     @Test
@@ -305,24 +305,24 @@
 
         // verify we get a different-but-equal object back
         Serializable serialized = amqpObjectMessageFacade.getObject();
-        assertTrue("Unexpected object type returned", serialized instanceof Map<?, ?>);
+        assertTrue(serialized instanceof Map<?, ?>, "Unexpected object type returned");
         Map<String, String> returnedObject1 = (Map<String, String>) serialized;
-        assertNotSame("Expected different objects, due to snapshot being taken", origMap, returnedObject1);
-        assertEquals("Expected equal objects, due to snapshot being taken", origMap, returnedObject1);
+        assertNotSame(origMap, returnedObject1, "Expected different objects, due to snapshot being taken");
+        assertEquals(origMap, returnedObject1, "Expected equal objects, due to snapshot being taken");
 
         // verify we get a different-but-equal object back when compared to the previously retrieved object
         Serializable serialized2 = amqpObjectMessageFacade.getObject();
-        assertTrue("Unexpected object type returned", serialized2 instanceof Map<?, ?>);
+        assertTrue(serialized2 instanceof Map<?, ?>, "Unexpected object type returned");
         Map<String, String> returnedObject2 = (Map<String, String>) serialized2;
-        assertNotSame("Expected different objects, due to snapshot being taken", returnedObject1, returnedObject2);
-        assertEquals("Expected equal objects, due to snapshot being taken", returnedObject1, returnedObject2);
+        assertNotSame(returnedObject1, returnedObject2, "Expected different objects, due to snapshot being taken");
+        assertEquals(returnedObject1, returnedObject2, "Expected equal objects, due to snapshot being taken");
 
         // mutate the first returned object
         returnedObject1.put("key2", "value2");
 
         // verify the mutated map is a different and not equal object
-        assertNotSame("Expected different objects, due to snapshot being taken", returnedObject1, returnedObject2);
-        assertNotEquals("Expected objects to differ, due to snapshot being taken", returnedObject1, returnedObject2);
+        assertNotSame(returnedObject1, returnedObject2, "Expected different objects, due to snapshot being taken");
+        assertNotEquals(returnedObject1, returnedObject2, "Expected objects to differ, due to snapshot being taken");
     }
 
     private static byte[] getSerializedBytes(Serializable value) throws IOException {
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsStreamMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsStreamMessageFacadeTest.java
index 8fc89da..12b82d9 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsStreamMessageFacadeTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsStreamMessageFacadeTest.java
@@ -21,12 +21,13 @@
 package org.apache.qpid.jms.provider.amqp.message;
 
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_STREAM_MESSAGE;
-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.ArrayList;
 import java.util.List;
@@ -40,14 +41,14 @@
 import org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
 import org.apache.qpid.proton.amqp.messaging.Section;
 import org.apache.qpid.proton.message.Message;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AmqpJmsStreamMessageFacadeTest extends AmqpJmsMessageTypesTestCase {
 
     @Test
     public void testNewMessageToSendReportsNoBody() throws Exception {
         AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createNewStreamMessageFacade();
-        assertFalse("Message should report no body", amqpStreamMessageFacade.hasBody());
+        assertFalse(amqpStreamMessageFacade.hasBody(), "Message should report no body");
     }
 
     @Test
@@ -56,7 +57,7 @@
 
         MessageAnnotations annotations = amqpStreamMessageFacade.getMessageAnnotations();
 
-        assertNull("MessageAnnotations section was not present", annotations);
+        assertNull(annotations, "MessageAnnotations section was not present");
         assertEquals(JMS_STREAM_MESSAGE, amqpStreamMessageFacade.getJmsMsgType());
     }
 
@@ -66,20 +67,24 @@
 
         Section body = amqpStreamMessageFacade.getBody();
 
-        assertNotNull("Body section was not present", body);
-        assertTrue("Body section was not of expected type: " + body.getClass(), body instanceof AmqpSequence);
+        assertNotNull(body, "Body section was not present");
+        assertTrue(body instanceof AmqpSequence, "Body section was not of expected type: " + body.getClass());
     }
 
-    @Test(expected = MessageEOFException.class)
+    @Test
     public void testPeekWithNewMessageToSendThrowsMEOFE() throws Exception {
-        AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createNewStreamMessageFacade();
-        amqpStreamMessageFacade.peek();
+        assertThrows(MessageEOFException.class, () -> {
+            AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createNewStreamMessageFacade();
+            amqpStreamMessageFacade.peek();
+        });
     }
 
-    @Test(expected = MessageEOFException.class)
+    @Test
     public void testPopWithNewMessageToSendThrowsMEOFE() throws Exception {
-        AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createNewStreamMessageFacade();
-        amqpStreamMessageFacade.pop();
+        assertThrows(MessageEOFException.class, () -> {
+            AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createNewStreamMessageFacade();
+            amqpStreamMessageFacade.pop();
+        });
     }
 
     @Test
@@ -91,7 +96,7 @@
 
         AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createReceivedStreamMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Unexpected value retrieved", Boolean.FALSE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.FALSE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
     }
 
     @Test
@@ -103,7 +108,7 @@
 
         AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createReceivedStreamMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Unexpected value retrieved", Boolean.FALSE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.FALSE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
     }
 
     @Test
@@ -116,9 +121,9 @@
 
         AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createReceivedStreamMessageFacade(createMockAmqpConsumer(), message);
 
-        assertTrue("Message should report that it contains a body", amqpStreamMessageFacade.hasBody());
-        assertEquals("Unexpected value retrieved", Boolean.FALSE, amqpStreamMessageFacade.peek());
-        assertEquals("Unexpected value retrieved", Boolean.FALSE, amqpStreamMessageFacade.peek());
+        assertTrue(amqpStreamMessageFacade.hasBody(), "Message should report that it contains a body");
+        assertEquals(Boolean.FALSE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
+        assertEquals(Boolean.FALSE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
     }
 
     @Test
@@ -131,9 +136,9 @@
 
         AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createReceivedStreamMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Unexpected value retrieved", Boolean.FALSE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.FALSE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
         amqpStreamMessageFacade.pop();
-        assertEquals("Unexpected value retrieved", Boolean.TRUE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.TRUE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
     }
 
     @Test
@@ -146,15 +151,15 @@
 
         AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createReceivedStreamMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Unexpected value retrieved", Boolean.FALSE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.FALSE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
         amqpStreamMessageFacade.pop();
 
         amqpStreamMessageFacade.reset();
 
-        assertEquals("Unexpected value retrieved", Boolean.FALSE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.FALSE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
         amqpStreamMessageFacade.pop();
 
-        assertEquals("Unexpected value retrieved", Boolean.TRUE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.TRUE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
         amqpStreamMessageFacade.pop();
     }
 
@@ -168,9 +173,9 @@
 
         AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createReceivedStreamMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Unexpected value retrieved", Boolean.FALSE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.FALSE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
         amqpStreamMessageFacade.pop();
-        assertEquals("Unexpected value retrieved", Boolean.TRUE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.TRUE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
         amqpStreamMessageFacade.pop();
 
         try {
@@ -182,26 +187,26 @@
 
         amqpStreamMessageFacade.reset();
 
-        assertEquals("Unexpected value retrieved", Boolean.FALSE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.FALSE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
         amqpStreamMessageFacade.pop();
-        assertEquals("Unexpected value retrieved", Boolean.TRUE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.TRUE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
     }
 
     @Test
     public void testHasNext() throws Exception {
         AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createNewStreamMessageFacade();
 
-        assertFalse("unexpected value", amqpStreamMessageFacade.hasNext());
+        assertFalse(amqpStreamMessageFacade.hasNext(), "unexpected value");
 
         // add some things
         amqpStreamMessageFacade.put(Boolean.TRUE);
         amqpStreamMessageFacade.put(Boolean.FALSE);
 
-        assertTrue("unexpected value", amqpStreamMessageFacade.hasNext());
+        assertTrue(amqpStreamMessageFacade.hasNext(), "unexpected value");
         amqpStreamMessageFacade.pop();
-        assertTrue("unexpected value", amqpStreamMessageFacade.hasNext());
+        assertTrue(amqpStreamMessageFacade.hasNext(), "unexpected value");
         amqpStreamMessageFacade.pop();
-        assertFalse("unexpected value", amqpStreamMessageFacade.hasNext());
+        assertFalse(amqpStreamMessageFacade.hasNext(), "unexpected value");
     }
 
     @Test
@@ -213,7 +218,7 @@
         amqpStreamMessageFacade.put(Boolean.FALSE);
 
         // retrieve only some of it, leaving some unread
-        assertEquals("unexpected value", Boolean.TRUE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.TRUE, amqpStreamMessageFacade.peek(), "unexpected value");
         amqpStreamMessageFacade.pop();
 
         // clear
@@ -223,7 +228,7 @@
         amqpStreamMessageFacade.put(Character.valueOf('c'));
 
         // check we can get it alone before another IOOBE (i.e position was reset, other contents cleared)
-        assertEquals("unexpected value", Character.valueOf('c'), amqpStreamMessageFacade.peek());
+        assertEquals(Character.valueOf('c'), amqpStreamMessageFacade.peek(), "unexpected value");
         amqpStreamMessageFacade.pop();
 
         try {
@@ -243,7 +248,7 @@
 
         AmqpJmsStreamMessageFacade amqpStreamMessageFacade = createReceivedStreamMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("Unexpected value retrieved", Boolean.FALSE, amqpStreamMessageFacade.peek());
+        assertEquals(Boolean.FALSE, amqpStreamMessageFacade.peek(), "Unexpected value retrieved");
         amqpStreamMessageFacade.pop();
 
         try {
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsTextMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsTextMessageFacadeTest.java
index ae7cf6d..ccb5af9 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsTextMessageFacadeTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsTextMessageFacadeTest.java
@@ -17,12 +17,12 @@
 package org.apache.qpid.jms.provider.amqp.message;
 
 import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_TEXT_MESSAGE;
-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.nio.charset.Charset;
 import java.util.ArrayList;
@@ -35,7 +35,7 @@
 import org.apache.qpid.proton.amqp.messaging.AmqpValue;
 import org.apache.qpid.proton.amqp.messaging.Data;
 import org.apache.qpid.proton.message.Message;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests for class AmqpJmsTextMessageFacade
@@ -48,7 +48,7 @@
     public void testNewMessageToSendDoesNotContainMessageTypeAnnotation() throws Exception {
         AmqpJmsTextMessageFacade amqpTextMessageFacade = createNewTextMessageFacade();
 
-        assertNull("MessageAnnotations section was not present", amqpTextMessageFacade.getMessageAnnotations());
+        assertNull(amqpTextMessageFacade.getMessageAnnotations(), "MessageAnnotations section was not present");
         assertEquals(JMS_TEXT_MESSAGE, amqpTextMessageFacade.getJmsMsgType());
     }
 
@@ -134,7 +134,7 @@
         Message message = Message.Factory.create();
         AmqpJmsTextMessageFacade amqpTextMessageFacade = createReceivedTextMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNull("expected null string", amqpTextMessageFacade.getText());
+        assertNull(amqpTextMessageFacade.getText(), "expected null string");
     }
 
     @Test
@@ -144,7 +144,7 @@
 
         AmqpJmsTextMessageFacade amqpTextMessageFacade = createReceivedTextMessageFacade(createMockAmqpConsumer(), message);
 
-        assertNull("expected null string", amqpTextMessageFacade.getText());
+        assertNull(amqpTextMessageFacade.getText(), "expected null string");
     }
 
     @Test
@@ -156,7 +156,7 @@
         // have a null value in them, they would have an empty byte array, but just in case...
         AmqpJmsTextMessageFacade amqpTextMessageFacade = createReceivedTextMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("expected zero-length string", "", amqpTextMessageFacade.getText());
+        assertEquals("", amqpTextMessageFacade.getText(), "expected zero-length string");
     }
 
     @Test
@@ -170,7 +170,7 @@
         assertEquals(decoded, b.getLength());
         AmqpJmsTextMessageFacade amqpTextMessageFacade = createReceivedTextMessageFacade(createMockAmqpConsumer(), message);
 
-        assertEquals("expected zero-length string", "", amqpTextMessageFacade.getText());
+        assertEquals("", amqpTextMessageFacade.getText(), "expected zero-length string");
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageIdHelperTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageIdHelperTest.java
index d1240b6..44139c7 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageIdHelperTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageIdHelperTest.java
@@ -20,12 +20,12 @@
  */
 package org.apache.qpid.jms.provider.amqp.message;
 
-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;
 
@@ -33,7 +33,7 @@
 import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.UnsignedLong;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AmqpMessageIdHelperTest extends QpidJmsTestCase {
 
@@ -43,7 +43,7 @@
     @Test
     public void testHasIdPrefixWithPrefix() {
         String myId = "ID:something";
-        assertTrue("'ID:' prefix should have been identified", AmqpMessageIdHelper.hasMessageIdPrefix(myId));
+        assertTrue(AmqpMessageIdHelper.hasMessageIdPrefix(myId), "'ID:' prefix should have been identified");
     }
 
     /**
@@ -52,7 +52,7 @@
     @Test
     public void testHasIdPrefixWithIDButNoColonPrefix() {
         String myIdNoColon = "IDsomething";
-        assertFalse("'ID' prefix should not have been identified without trailing colon", AmqpMessageIdHelper.hasMessageIdPrefix(myIdNoColon));
+        assertFalse(AmqpMessageIdHelper.hasMessageIdPrefix(myIdNoColon), "'ID' prefix should not have been identified without trailing colon");
     }
 
     /**
@@ -61,7 +61,7 @@
     @Test
     public void testHasIdPrefixWithNull() {
         String nullString = null;
-        assertFalse("null string should not result in identification as having the prefix", AmqpMessageIdHelper.hasMessageIdPrefix(nullString));
+        assertFalse(AmqpMessageIdHelper.hasMessageIdPrefix(nullString), "null string should not result in identification as having the prefix");
     }
 
     /**
@@ -70,7 +70,7 @@
     @Test
     public void testHasIdPrefixWithoutPrefix() {
         String myNonId = "something";
-        assertFalse("string without 'ID:' anywhere should not have been identified as having the prefix", AmqpMessageIdHelper.hasMessageIdPrefix(myNonId));
+        assertFalse(AmqpMessageIdHelper.hasMessageIdPrefix(myNonId), "string without 'ID:' anywhere should not have been identified as having the prefix");
     }
 
     /**
@@ -79,7 +79,7 @@
     @Test
     public void testHasIdPrefixWithLowercaseID() {
         String myLowerCaseNonId = "id:something";
-        assertFalse("lowercase 'id:' prefix should not result in identification as having 'ID:' prefix", AmqpMessageIdHelper.hasMessageIdPrefix(myLowerCaseNonId));
+        assertFalse(AmqpMessageIdHelper.hasMessageIdPrefix(myLowerCaseNonId), "lowercase 'id:' prefix should not result in identification as having 'ID:' prefix");
     }
 
     /**
@@ -87,7 +87,7 @@
      */
     @Test
     public void testToMessageIdStringWithNull() {
-        assertNull("null string should have been returned", AmqpMessageIdHelper.toMessageIdString(null));
+        assertNull(AmqpMessageIdHelper.toMessageIdString(null), "null string should have been returned");
     }
 
     /**
@@ -105,8 +105,8 @@
 
     private void doToMessageIdTestImpl(Object idObject, String expected) {
         String idString = AmqpMessageIdHelper.toMessageIdString(idObject);
-        assertNotNull("null string should not have been returned", idString);
-        assertEquals("expected id string was not returned", expected, idString);
+        assertNotNull(idString, "null string should not have been returned");
+        assertEquals(expected, idString, "expected id string was not returned");
     }
 
     /**
@@ -311,7 +311,7 @@
      */
     @Test
     public void testToCorrelationIdStringWithNull() {
-        assertNull("null string should have been returned", AmqpMessageIdHelper.toCorrelationIdString(null));
+        assertNull(AmqpMessageIdHelper.toCorrelationIdString(null), "null string should have been returned");
     }
 
     /**
@@ -329,8 +329,8 @@
 
     private void doToCorrelationIDTestImpl(Object idObject, String expected) {
         String idString = AmqpMessageIdHelper.toCorrelationIdString(idObject);
-        assertNotNull("null string should not have been returned", idString);
-        assertEquals("expected id string was not returned", expected, idString);
+        assertNotNull(idString, "null string should not have been returned");
+        assertEquals(expected, idString, "expected id string was not returned");
     }
 
     /**
@@ -525,8 +525,8 @@
 
     private void doToIdObjectTestImpl(String idString, Object expected) throws IdConversionException {
         Object idObject = AmqpMessageIdHelper.toIdObject(idString);
-        assertNotNull("null object should not have been returned", idObject);
-        assertEquals("expected id object was not returned", expected, idObject);
+        assertNotNull(idObject, "null object should not have been returned");
+        assertEquals(expected, idObject, "expected id object was not returned");
     }
 
     /**
@@ -567,7 +567,7 @@
      */
     @Test
     public void testToIdObjectWithNull() throws Exception {
-        assertNull("null object should have been returned", AmqpMessageIdHelper.toIdObject(null));
+        assertNull(AmqpMessageIdHelper.toIdObject(null), "null object should have been returned");
     }
 
     /**
@@ -687,7 +687,7 @@
         } catch (IdConversionException iae) {
             // expected
             String msg = iae.getCause().getMessage();
-            assertTrue("Message was not as expected: " + msg, msg.contains("even length"));
+            assertTrue(msg.contains("even length"), "Message was not as expected: " + msg);
         }
     }
 
@@ -710,7 +710,7 @@
         } catch (IdConversionException ice) {
             // expected
             String msg = ice.getCause().getMessage();
-            assertTrue("Message was not as expected: " + msg, msg.contains("non-hex"));
+            assertTrue(msg.contains("non-hex"), "Message was not as expected: " + msg);
         }
 
         // char after '9', before 'A'
@@ -723,7 +723,7 @@
         } catch (IdConversionException ice) {
             // expected
             String msg = ice.getCause().getMessage();
-            assertTrue("Message was not as expected: " + msg, msg.contains("non-hex"));
+            assertTrue(msg.contains("non-hex"), "Message was not as expected: " + msg);
         }
 
         // char after 'F', before 'a'
@@ -736,7 +736,7 @@
         } catch (IdConversionException ice) {
             // expected
             String msg = ice.getCause().getMessage();
-            assertTrue("Message was not as expected: " + msg, msg.contains("non-hex"));
+            assertTrue(msg.contains("non-hex"), "Message was not as expected: " + msg);
         }
 
         // char after 'f'
@@ -749,7 +749,7 @@
         } catch (IdConversionException ice) {
             // expected
             String msg = ice.getCause().getMessage();
-            assertTrue("Message was not as expected: " + msg, msg.contains("non-hex"));
+            assertTrue(msg.contains("non-hex"), "Message was not as expected: " + msg);
         }
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupportTest.java
index 8a0c041..9f2cc2c 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpMessageSupportTest.java
@@ -16,17 +16,17 @@
  */
 package org.apache.qpid.jms.provider.amqp.message;
 
-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.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.HashMap;
 import java.util.Map;
 
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AmqpMessageSupportTest {
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpReadableBufferTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpReadableBufferTest.java
index 3eaa130..c575fad 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpReadableBufferTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpReadableBufferTest.java
@@ -16,19 +16,19 @@
  */
 package org.apache.qpid.jms.provider.amqp.message;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.ByteBuffer;
 import java.nio.charset.CharacterCodingException;
 import java.nio.charset.StandardCharsets;
 
 import org.apache.qpid.proton.codec.ReadableBuffer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpWritableBufferTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpWritableBufferTest.java
index 30a17e3..c964d64 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpWritableBufferTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpWritableBufferTest.java
@@ -16,16 +16,16 @@
  */
 package org.apache.qpid.jms.provider.amqp.message;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 
 import org.apache.qpid.proton.codec.ReadableBuffer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -150,9 +150,9 @@
         ReadableBuffer input = new ReadableBuffer.ByteBufferReader(buf);
 
         if(readOnly) {
-            assertFalse("Expected buffer not to hasArray()", input.hasArray());
+            assertFalse(input.hasArray(), "Expected buffer not to hasArray()");
         } else {
-            assertTrue("Expected buffer to hasArray()", input.hasArray());
+            assertTrue(input.hasArray(), "Expected buffer to hasArray()");
         }
 
         ByteBuf buffer = Unpooled.buffer(1024);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverIntegrationTest.java
index 5e8a998..53b58bb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverIntegrationTest.java
@@ -28,12 +28,12 @@
 import static org.hamcrest.Matchers.not;
 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.net.URI;
 import java.util.Enumeration;
@@ -99,8 +99,6 @@
 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.jms.util.StopWatch;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
@@ -108,15 +106,13 @@
 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.mockito.Mockito;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@RunWith(QpidJMSTestRunner.class)
 public class FailoverIntegrationTest extends QpidJmsTestCase {
 
     private static final Logger LOG = LoggerFactory.getLogger(FailoverIntegrationTest.class);
@@ -128,7 +124,8 @@
     private static final UnsignedByte SASL_SYS_PERM = UnsignedByte.valueOf((byte) 3);
     private static final UnsignedByte SASL_SYS_TEMP = UnsignedByte.valueOf((byte) 4);
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectThrowsSecurityViolationOnFailureFromOpen() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -149,14 +146,16 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectThrowsSecurityViolationOnFailureFromSaslWithClientID() throws Exception {
         doConnectThrowsSecurityViolationOnFailureFromSaslWithOrExplicitlyWithoutClientIDTestImpl(true, SASL_FAIL_AUTH);
         doConnectThrowsSecurityViolationOnFailureFromSaslWithOrExplicitlyWithoutClientIDTestImpl(true, SASL_SYS);
         doConnectThrowsSecurityViolationOnFailureFromSaslWithOrExplicitlyWithoutClientIDTestImpl(true, SASL_SYS_PERM);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectThrowsSecurityViolationOnFailureFromSaslExplicitlyWithoutClientID() throws Exception {
         doConnectThrowsSecurityViolationOnFailureFromSaslWithOrExplicitlyWithoutClientIDTestImpl(false, SASL_FAIL_AUTH);
         doConnectThrowsSecurityViolationOnFailureFromSaslWithOrExplicitlyWithoutClientIDTestImpl(false, SASL_SYS);
@@ -188,7 +187,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectThrowsSecurityViolationOnFailureFromSaslImplicitlyWithoutClientID() throws Exception {
         doConnectThrowsSecurityViolationOnFailureFromSaslImplicitlyWithoutClientIDTestImpl(SASL_FAIL_AUTH);
         doConnectThrowsSecurityViolationOnFailureFromSaslImplicitlyWithoutClientIDTestImpl(SASL_SYS);
@@ -213,7 +213,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectHandlesSaslTempFailure() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -244,7 +245,7 @@
                 fail("Should not have thrown an Exception: " + ex);
             }
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             String content = "myContent";
             final DescribedType amqpValueNullContent = new AmqpValueDescribedType(content);
@@ -269,7 +270,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverStopsOnNonTemporarySaslFailure() throws Exception {
         doFailoverStopsOnNonTemporarySaslFailureTestImpl(SASL_FAIL_AUTH);
         doFailoverStopsOnNonTemporarySaslFailureTestImpl(SASL_SYS);
@@ -339,14 +341,14 @@
             Queue queue = session.createQueue("myQueue");
             final MessageConsumer consumer = session.createConsumer(queue);
 
-            assertTrue("Should connect to original peer", originalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(3, TimeUnit.SECONDS), "Should connect to original peer");
 
-            assertTrue("The ExceptionListener should have been alerted", exceptionListenerFired.await(3, TimeUnit.SECONDS));
+            assertTrue(exceptionListenerFired.await(3, TimeUnit.SECONDS), "The ExceptionListener should have been alerted");
             Throwable ex = failure.get();
-            assertTrue("Unexpected failure exception: " + ex, ex instanceof JMSSecurityException);
+            assertTrue(ex instanceof JMSSecurityException, "Unexpected failure exception: " + ex);
 
             // Verify the consumer gets marked closed
-            assertTrue("consumer never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -356,18 +358,19 @@
                     }
                     return false;
                 }
-            }, 5000, 5));
+            }, 5000, 5), "consumer never closed.");
 
             // Shut down last peer and verify no connection made to it
             finalPeer.purgeExpectations();
             finalPeer.close();
-            assertNotNull("First peer should have accepted a TCP connection", originalPeer.getClientSocket());
-            assertNotNull("Rejecting peer should have accepted a TCP connection", rejectingPeer.getClientSocket());
-            assertNull("Final peer should not have accepted any TCP connection", finalPeer.getClientSocket());
+            assertNotNull(originalPeer.getClientSocket(), "First peer should have accepted a TCP connection");
+            assertNotNull(rejectingPeer.getClientSocket(), "Rejecting peer should have accepted a TCP connection");
+            assertNull(finalPeer.getClientSocket(), "Final peer should not have accepted any TCP connection");
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesTemporarySaslFailure() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer rejectingPeer = new TestAmqpPeer();
@@ -446,17 +449,17 @@
 
             finalPeer.waitForAllHandlersToComplete(2000);
 
-            assertTrue("Should connect to original peer", originalConnected.await(3, TimeUnit.SECONDS));
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(3, TimeUnit.SECONDS), "Should connect to original peer");
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             // Check message arrives
             finalPeer.expectDispositionThatIsAcceptedAndSettled();
 
             Message msg = consumer.receive(5000);
-            assertTrue("Expected an instance of TextMessage, got: " + msg, msg instanceof TextMessage);
-            assertEquals("Unexpected msg content", expectedMessageContent, ((TextMessage) msg).getText());
+            assertTrue(msg instanceof TextMessage, "Expected an instance of TextMessage, got: " + msg);
+            assertEquals(expectedMessageContent, ((TextMessage) msg).getText(), "Unexpected msg content");
 
-            assertFalse("The ExceptionListener should not have been alerted", exceptionListenerFired.get());
+            assertFalse(exceptionListenerFired.get(), "The ExceptionListener should not have been alerted");
 
             // Shut it down
             finalPeer.expectClose();
@@ -466,12 +469,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesConnectErrorInvalidField() throws Exception {
         doFailoverHandlesConnectErrorInvalidFieldTestImpl(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesConnectErrorInvalidFieldWithContainerIdHint() throws Exception {
         // As above but also including hint that the container-id is the invalid field, i.e invalid ClientID
         doFailoverHandlesConnectErrorInvalidFieldTestImpl(true);
@@ -514,7 +519,7 @@
                 fail("Should not have thrown an Exception: " + ex);
             }
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             finalPeer.expectBegin();
             finalPeer.expectReceiverAttach();
@@ -535,12 +540,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesConnectErrorInvalidFieldOnReconnect() throws Exception {
         doFailoverHandlesConnectErrorInvalidFieldOnReconnectTestImpl(false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesConnectErrorInvalidFieldOnReconnectWithContainerIdHint() throws Exception {
         // As above but also including hint that the container-id is the invalid field, i.e invalid ClientID
         doFailoverHandlesConnectErrorInvalidFieldOnReconnectTestImpl(true);
@@ -588,7 +595,7 @@
                 fail("Should not have thrown an Exception: " + ex);
             }
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             finalPeer.expectBegin();
             finalPeer.expectReceiverAttach();
@@ -609,7 +616,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesConnectErrorNotFound() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -641,7 +649,7 @@
                 fail("Should not have thrown an Exception: " + ex);
             }
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             finalPeer.expectBegin();
             finalPeer.expectReceiverAttach();
@@ -662,7 +670,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesDropThenRejectionCloseAfterConnect() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer rejectingPeer = new TestAmqpPeer();
@@ -709,8 +718,8 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
-            assertEquals("should not yet have connected to final peer", 1L, finalConnected.getCount());
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
+            assertEquals(1L, finalConnected.getCount(), "should not yet have connected to final peer");
 
             // Set expectations on rejecting and final peer
             rejectingPeer.rejectConnect(AmqpError.NOT_FOUND, "Resource could not be located", null);
@@ -724,7 +733,7 @@
 
             rejectingPeer.waitForAllHandlersToComplete(2000);
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
             long end = System.currentTimeMillis();
 
             long margin = 2000;
@@ -738,7 +747,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesImmediateTransportDropAfterConnect() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer rejectingPeer = new TestAmqpPeer();
@@ -781,8 +791,8 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
-            assertEquals("should not yet have connected to final peer", 1L, finalConnected.getCount());
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
+            assertEquals(1L, finalConnected.getCount(), "should not yet have connected to final peer");
 
             // Set expectations on rejecting and final peer
             rejectingPeer.expectSaslHeaderThenDrop();
@@ -796,7 +806,7 @@
 
             rejectingPeer.waitForAllHandlersToComplete(2000);
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             // Shut it down
             finalPeer.expectClose();
@@ -805,7 +815,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesRemotelyEndConnectionForced() throws Exception {
         try (TestAmqpPeer forcingPeer = new TestAmqpPeer();
              TestAmqpPeer backupPeer = new TestAmqpPeer();) {
@@ -848,8 +859,8 @@
 
             forcingPeer.waitForAllHandlersToComplete(3000);
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(5, TimeUnit.SECONDS));
-            assertTrue("Should connect to backup peer", connectedToBackup.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(5, TimeUnit.SECONDS), "Should connect to primary peer");
+            assertTrue(connectedToBackup.await(5, TimeUnit.SECONDS), "Should connect to backup peer");
 
             backupPeer.expectClose();
             connection.close();
@@ -857,7 +868,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesTransportDropBeforeDispositionRecieived() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -897,7 +909,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             // Create session+producer, send a persistent message on auto-ack session for synchronous send
             originalPeer.expectBegin();
@@ -949,17 +961,17 @@
             finalPeer.expectSenderAttach();
             finalPeer.expectTransfer(messageMatcher, nullValue(), false, true, new Accepted(), true);
 
-            assertEquals("Should not yet have connected to final peer", 1L, finalConnected.getCount());
-            assertEquals("Sender thread should not yet have completed", 1L, senderCompleted.getCount());
+            assertEquals(1L, finalConnected.getCount(), "Should not yet have connected to final peer");
+            assertEquals(1L, senderCompleted.getCount(), "Sender thread should not yet have completed");
 
             // Close the original peer to provoke reconnect, while send() is still outstanding
             originalPeer.close();
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             boolean await = senderCompleted.await(5, TimeUnit.SECONDS);
             Throwable t = problem.get();
-            assertTrue("Sender thread should have completed. Problem: " + t, await);
+            assertTrue(await, "Sender thread should have completed. Problem: " + t);
 
             // Shut it down
             finalPeer.expectClose();
@@ -968,7 +980,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesRemoteCloseBeforeDispositionRecieived() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -1010,7 +1023,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
             Queue queue = session.createQueue("myQueue");
@@ -1059,19 +1072,19 @@
             finalPeer.expectTransfer(messageMatcher, nullValue(), false, true, new Accepted(), true);
             finalPeer.expectClose();
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             boolean await = senderCompleted.await(5, TimeUnit.SECONDS);
             Throwable t = problem.get();
-            assertTrue("Sender thread should have completed. Problem: " + t, await);
+            assertTrue(await, "Sender thread should have completed. Problem: " + t);
 
             connection.close();
             finalPeer.waitForAllHandlersToComplete(1000);
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesDropWithModifiedInitialReconnectDelay() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -1115,7 +1128,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             // --- Post Failover Expectations of FinalPeer --- //
 
@@ -1126,7 +1139,7 @@
 
             connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             // Shut it down
             finalPeer.expectClose();
@@ -1136,7 +1149,8 @@
         }
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testFailoverInitialReconnectDelayDoesNotApplyToInitialConnect() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();) {
             // Create a peer to connect to
@@ -1158,8 +1172,8 @@
             long taken = watch.taken();
 
             String message = "Initial connect should not have delayed for the specified initialReconnectDelay." + "Elapsed=" + taken + ", delay=" + delay;
-            assertTrue(message,  taken < delay);
-            assertTrue("Connection took longer than reasonable: " + taken, taken < 5000);
+            assertTrue(taken < delay,  message);
+            assertTrue(taken < 5000, "Connection took longer than reasonable: " + taken);
 
             // Shut it down
             originalPeer.expectClose();
@@ -1169,7 +1183,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesDropZeroPrefetchPullConsumerReceiveNoWait() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -1214,7 +1229,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             // --- Post Failover Expectations of FinalPeer --- //
 
@@ -1232,7 +1247,7 @@
 
             assertNull(consumer.receiveNoWait());
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             consumer.close();
 
@@ -1244,7 +1259,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesDropZeroPrefetchPullConsumerReceiveWithTimeout() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -1289,7 +1305,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             // --- Post Failover Expectations of FinalPeer --- //
 
@@ -1309,7 +1325,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();
@@ -1322,7 +1338,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesDropZeroPrefetchPullConsumerReceive() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -1367,7 +1384,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             // --- Post Failover Expectations of FinalPeer --- //
 
@@ -1389,7 +1406,7 @@
             assertNotNull(consumer.receive());
             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();
@@ -1402,7 +1419,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesDropAfterQueueBrowserDrain() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -1442,7 +1460,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             originalPeer.expectBegin();
             originalPeer.expectQueueBrowserAttach();
@@ -1480,7 +1498,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesDropAfterSessionCloseRequested() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer()) {
 
@@ -1507,7 +1526,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             originalPeer.expectBegin();
             originalPeer.expectEnd(false);
@@ -1537,19 +1556,21 @@
 
             originalPeer.waitForAllHandlersToComplete(2000);
 
-            assertTrue("Session close should have completed by now", sessionCloseCompleted.await(3, TimeUnit.SECONDS));
-            assertFalse("Session close should have completed normally", sessionClosedThrew.get());
+            assertTrue(sessionCloseCompleted.await(3, TimeUnit.SECONDS), "Session close should have completed by now");
+            assertFalse(sessionClosedThrew.get(), "Session close should have completed normally");
 
             connection.close();
         }
     }
 
-    @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);
     }
@@ -1595,12 +1616,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);
     }
@@ -1646,14 +1669,14 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTxRecreatedAfterConnectionFailsOverDropsAfterCoordinatorAttach() throws Exception {
         doTxRecreatedAfterConnectionFailsOver(true);
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTxRecreatedAfterConnectionFailsOverDropsAfterSessionBegin() throws Exception {
         doTxRecreatedAfterConnectionFailsOver(false);
     }
@@ -1696,7 +1719,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             originalPeer.expectBegin();
 
@@ -1730,7 +1753,7 @@
 
             Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             LOG.debug("About to close session following final peer connection.");
             session.close();
@@ -1742,7 +1765,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTempDestinationRecreatedAfterConnectionFailsOver() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -1785,7 +1809,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             // --- Post Failover Expectations of FinalPeer --- //
 
@@ -1801,7 +1825,7 @@
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
             TemporaryTopic tempTopic = session.createTemporaryTopic();
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             // Delete the temporary Topic and close the session.
             finalPeer.expectDetach(true, true, true);
@@ -1820,7 +1844,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverEnforcesRequestTimeoutSession() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
 
@@ -1858,8 +1883,8 @@
             });
             connection.start();
 
-            assertTrue("Should connect to peer", connected.await(5, TimeUnit.SECONDS));
-            assertTrue("Should lose connection to peer", disconnected.await(5, TimeUnit.SECONDS));
+            assertTrue(connected.await(5, TimeUnit.SECONDS), "Should connect to peer");
+            assertTrue(disconnected.await(5, TimeUnit.SECONDS), "Should lose connection to peer");
 
             try {
                 connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
@@ -1876,7 +1901,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverEnforcesRequestTimeoutSessionWhenBeginSent() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
 
@@ -1912,7 +1938,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverEnforcesSendTimeout() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
 
@@ -1952,13 +1979,13 @@
             });
             connection.start();
 
-            assertTrue("Should connect to peer", connected.await(5, TimeUnit.SECONDS));
+            assertTrue(connected.await(5, TimeUnit.SECONDS), "Should connect to peer");
 
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
             Queue queue = session.createQueue("myQueue");
             MessageProducer producer = session.createProducer(queue);
 
-            assertTrue("Should lose connection to peer", disconnected.await(5, TimeUnit.SECONDS));
+            assertTrue(disconnected.await(5, TimeUnit.SECONDS), "Should lose connection to peer");
 
             try {
                 producer.send(session.createMessage());
@@ -1975,7 +2002,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverEnforcesRequestTimeoutCreateTenpDestination() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
 
@@ -2014,11 +2042,11 @@
             });
             connection.start();
 
-            assertTrue("Should connect to peer", connected.await(5, TimeUnit.SECONDS));
+            assertTrue(connected.await(5, TimeUnit.SECONDS), "Should connect to peer");
 
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
-            assertTrue("Should lose connection to peer", disconnected.await(5, TimeUnit.SECONDS));
+            assertTrue(disconnected.await(5, TimeUnit.SECONDS), "Should lose connection to peer");
 
             try {
                 session.createTemporaryQueue();
@@ -2044,7 +2072,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverPassthroughOfCompletedSyncSend() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final Connection connection = establishAnonymousConnecton(testPeer);
@@ -2093,7 +2122,7 @@
             producer.send(message2);
 
             long elapsed = System.currentTimeMillis() - start;
-            MatcherAssert.assertThat("Send call should have taken at least the disposition delay", elapsed, Matchers.greaterThanOrEqualTo(delay));
+            assertThat("Send call should have taken at least the disposition delay", elapsed, Matchers.greaterThanOrEqualTo(delay));
 
             connection.close();
 
@@ -2101,7 +2130,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverPassthroughOfRejectedSyncSend() throws Exception {
         Rejected failingState = new Rejected();
         org.apache.qpid.jms.test.testpeer.describedtypes.Error rejectError = new org.apache.qpid.jms.test.testpeer.describedtypes.Error();
@@ -2112,12 +2142,14 @@
         doFailoverPassthroughOfFailingSyncSendTestImpl(failingState, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverPassthroughOfReleasedSyncSend() throws Exception {
         doFailoverPassthroughOfFailingSyncSendTestImpl(new Released(), false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverPassthroughOfModifiedFailedSyncSend() throws Exception {
         Modified failingState = new Modified();
         failingState.setDeliveryFailed(true);
@@ -2177,7 +2209,7 @@
             } catch (JMSException jmse) {
                 //Expected
                 long elapsed = System.currentTimeMillis() - start;
-                MatcherAssert.assertThat("Send call should have taken at least the disposition delay", elapsed, Matchers.greaterThanOrEqualTo(delay));
+                assertThat("Send call should have taken at least the disposition delay", elapsed, Matchers.greaterThanOrEqualTo(delay));
 
                 if (inspectException) {
                     assertTrue(jmse instanceof ResourceAllocationException);
@@ -2207,7 +2239,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverPassthroughOfCompletedAsyncSend() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final Connection connection = establishAnonymousConnecton(
@@ -2234,7 +2267,7 @@
 
             producer.send(message, listener);
 
-            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);
@@ -2245,7 +2278,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverPassthroughOfRejectedAsyncCompletionSend() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final JmsConnection connection = establishAnonymousConnecton(
@@ -2265,7 +2299,7 @@
             Message message = session.createTextMessage("content");
             testPeer.expectTransfer(new TransferPayloadCompositeMatcher(), nullValue(), new Rejected(), true);
 
-            assertNull("Should not yet have a JMSDestination", message.getJMSDestination());
+            assertNull(message.getJMSDestination(), "Should not yet have a JMSDestination");
 
             TestJmsCompletionListener listener = new TestJmsCompletionListener();
             try {
@@ -2275,7 +2309,7 @@
                 fail("No expected exception for this send.");
             }
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(2000, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(2000, TimeUnit.SECONDS), "Did not get async callback");
             assertNotNull(listener.exception);
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
@@ -2291,7 +2325,7 @@
                 fail("No expected exception for this send.");
             }
 
-            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);
@@ -2302,7 +2336,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverConnectionLossFailsWaitingAsyncCompletionSends() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             final JmsConnection connection = establishAnonymousConnecton(
@@ -2344,7 +2379,7 @@
                 fail("No expected exception for this send.");
             }
 
-            assertTrue("Did not get async callback", listener.awaitCompletion(2000, TimeUnit.SECONDS));
+            assertTrue(listener.awaitCompletion(2000, TimeUnit.SECONDS), "Did not get async callback");
             assertEquals(MSG_COUNT, listener.errorCount);
             assertEquals(1, listener.successCount);
             assertNotNull(listener.exception);
@@ -2355,7 +2390,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateSessionAfterConnectionDrops() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -2398,7 +2434,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             // --- Post Failover Expectations of FinalPeer --- //
 
@@ -2411,7 +2447,7 @@
 
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             session.close();
             connection.close();
@@ -2420,8 +2456,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateConsumerAfterConnectionDrops() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -2464,7 +2500,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             // --- Post Failover Expectations of FinalPeer --- //
 
@@ -2485,7 +2521,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();
@@ -2497,7 +2533,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testCreateProducerAfterConnectionDrops() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -2540,7 +2577,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             // --- Post Failover Expectations of FinalPeer --- //
 
@@ -2556,7 +2593,7 @@
             Queue queue = session.createQueue("myQueue");
             MessageProducer producer = session.createProducer(queue);
 
-            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");
             producer.close();
@@ -2568,8 +2605,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTxCommitThrowsWhenNoDischargeResponseSentAndConnectionDrops() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
 
@@ -2604,7 +2641,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to test peer", testConnected.await(6, TimeUnit.SECONDS));
+            assertTrue(testConnected.await(6, TimeUnit.SECONDS), "Should connect to test peer");
 
             testPeer.expectBegin();
             testPeer.expectCoordinatorAttach();
@@ -2632,7 +2669,7 @@
                 LOG.debug("Commit threw: ", jmsEx);
             }
 
-            assertTrue("Should reported failed", failedConnection.await(5, TimeUnit.SECONDS));
+            assertTrue(failedConnection.await(5, TimeUnit.SECONDS), "Should reported failed");
 
             try {
                 connection.close();
@@ -2642,7 +2679,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testDropAndRejectAfterwardsHonorsMax() throws Exception {
         try (TestAmqpPeer firstPeer = new TestAmqpPeer();
              TestAmqpPeer secondPeer = new TestAmqpPeer();
@@ -2694,11 +2732,11 @@
             });
             connection.start();
 
-            assertTrue("Should connect to first peer", testConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(testConnected.await(5, TimeUnit.SECONDS), "Should connect to first peer");
 
             // --- Failover should handle the connection close ---------------//
 
-            assertTrue("Should reported failed", failedConnection.await(5, TimeUnit.SECONDS));
+            assertTrue(failedConnection.await(5, TimeUnit.SECONDS), "Should reported failed");
 
             try {
                 connection.close();
@@ -2710,14 +2748,15 @@
             // Shut down last peer and verify no connection made to it
             fourthPeer.purgeExpectations();
             fourthPeer.close();
-            assertNotNull("Peer 1 should have accepted a TCP connection", firstPeer.getClientSocket());
-            assertNotNull("Peer 2 should have accepted a TCP connection", secondPeer.getClientSocket());
-            assertNotNull("Peer 3 should have accepted a TCP connection", thirdPeer.getClientSocket());
-            assertNull("Peer 4 should not have accepted any TCP connection", fourthPeer.getClientSocket());
+            assertNotNull(firstPeer.getClientSocket(), "Peer 1 should have accepted a TCP connection");
+            assertNotNull(secondPeer.getClientSocket(), "Peer 2 should have accepted a TCP connection");
+            assertNotNull(thirdPeer.getClientSocket(), "Peer 3 should have accepted a TCP connection");
+            assertNull(fourthPeer.getClientSocket(), "Peer 4 should not have accepted any TCP connection");
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testStartMaxReconnectAttemptsTriggeredWhenRemotesAreRejecting() throws Exception {
         try (TestAmqpPeer firstPeer = new TestAmqpPeer();
              TestAmqpPeer secondPeer = new TestAmqpPeer();
@@ -2761,7 +2800,7 @@
 
             // --- Failover should handle the connection close ---------------//
 
-            assertTrue("Should reported failed", failedConnection.await(5, TimeUnit.SECONDS));
+            assertTrue(failedConnection.await(5, TimeUnit.SECONDS), "Should reported failed");
 
             try {
                 connection.close();
@@ -2774,14 +2813,15 @@
             // Shut down last peer and verify no connection made to it
             fourthPeer.purgeExpectations();
             fourthPeer.close();
-            assertNotNull("Peer 1 should have accepted a TCP connection", firstPeer.getClientSocket());
-            assertNotNull("Peer 2 should have accepted a TCP connection", secondPeer.getClientSocket());
-            assertNotNull("Peer 3 should have accepted a TCP connection", thirdPeer.getClientSocket());
-            assertNull("Peer 4 should not have accepted any TCP connection", fourthPeer.getClientSocket());
+            assertNotNull(firstPeer.getClientSocket(), "Peer 1 should have accepted a TCP connection");
+            assertNotNull(secondPeer.getClientSocket(), "Peer 2 should have accepted a TCP connection");
+            assertNotNull(thirdPeer.getClientSocket(), "Peer 3 should have accepted a TCP connection");
+            assertNull(fourthPeer.getClientSocket(), "Peer 4 should not have accepted any TCP connection");
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionConsumerRecreatedAfterReconnect() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -2836,9 +2876,9 @@
             Queue queue = new JmsQueue("myQueue");
             connection.createConnectionConsumer(queue, null, sessionPool, 100);
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             // Shut it down
             finalPeer.expectClose();
@@ -2848,8 +2888,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseConsumerWithMessageListenerFiresJMSExceptionListener() throws Exception {
         Symbol errorCondition = AmqpError.RESOURCE_DELETED;
         String errorDescription = "testRemotelyCloseConsumerWithMessageListenerFiresJMSExceptionListener";
@@ -2857,8 +2897,8 @@
         doRemotelyCloseConsumerWithMessageListenerFiresJMSExceptionListenerTestImpl(errorCondition, errorDescription);
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testRemotelyCloseConsumerWithMessageListenerWithoutErrorFiresJMSExceptionListener() throws Exception {
         // As above but with the peer not including any error condition in its consumer close
         doRemotelyCloseConsumerWithMessageListenerFiresJMSExceptionListenerTestImpl(null, null);
@@ -2912,7 +2952,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 {
@@ -2931,10 +2971,10 @@
                     }
                     return false;
                 }
-            }, 5000, 10));
+            }, 5000, 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", exceptionListenerFired.await(2000, TimeUnit.MILLISECONDS));
+            assertTrue(consumerClosed.await(2000, TimeUnit.MILLISECONDS),  "Consumer closed callback didn't trigger");
+            assertTrue(exceptionListenerFired.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.
@@ -2947,7 +2987,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCannotRecreateConsumerFailsConnectionAndRetries() throws Exception {
         Symbol errorCondition = AmqpError.RESOURCE_DELETED;
         String errorDescription = "testFailoverCannotRecreateConsumerFailsConnectionAndRetries";
@@ -2955,7 +2996,8 @@
         doTestFailoverCannotRecreateConsumerFailsConnectionAndRetries(errorCondition, errorDescription);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCannotRecreateConsumerFailsConnectionAndRetriesNoErrorConditionGiven() throws Exception {
         doTestFailoverCannotRecreateConsumerFailsConnectionAndRetries(null, null);
     }
@@ -3051,14 +3093,14 @@
 
             finalPeer.waitForAllHandlersToComplete(1000);
 
-            assertTrue("Should connect to original peer", originalConnected.await(3, TimeUnit.SECONDS));
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(3, TimeUnit.SECONDS), "Should connect to original peer");
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             // Check message arrives
-            assertTrue("The onMessage listener should have fired", msgReceived.await(3, TimeUnit.SECONDS));
+            assertTrue(msgReceived.await(3, TimeUnit.SECONDS), "The onMessage listener should have fired");
             Message msg = msgRef.get();
-            assertTrue("Expected an instance of TextMessage, got: " + msg, msg instanceof TextMessage);
-            assertEquals("Unexpected msg content", expectedMessageContent, ((TextMessage) msg).getText());
+            assertTrue(msg instanceof TextMessage, "Expected an instance of TextMessage, got: " + msg);
+            assertEquals(expectedMessageContent, ((TextMessage) msg).getText(), "Unexpected msg content");
 
             // Check that consumer isn't closed
             try {
@@ -3067,7 +3109,7 @@
                 fail("Consumer should be in open state and not throw here.");
             }
 
-            assertFalse("The ExceptionListener should not have been alerted", exceptionListenerFired.get());
+            assertFalse(exceptionListenerFired.get(), "The ExceptionListener should not have been alerted");
 
             // Shut it down
             finalPeer.expectClose();
@@ -3077,7 +3119,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCannotRecreateProducerFailsConnectionAndRetries() throws Exception {
         Symbol errorCondition = AmqpError.RESOURCE_DELETED;
         String errorDescription = "testFailoverCannotRecreateProducerFailsConnectionAndRetries";
@@ -3085,7 +3128,8 @@
         doTestFailoverCannotRecreateProducerFailsConnectionAndRetries(errorCondition, errorDescription);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCannotRecreateProducerFailsConnectionAndRetriesNoErrorConditionGiven() throws Exception {
         doTestFailoverCannotRecreateProducerFailsConnectionAndRetries(null, null);
     }
@@ -3167,8 +3211,8 @@
 
             finalPeer.waitForAllHandlersToComplete(1000);
 
-            assertTrue("Should connect to original peer", originalConnected.await(3, TimeUnit.SECONDS));
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(3, TimeUnit.SECONDS), "Should connect to original peer");
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             // Check that producer isn't closed
             try {
@@ -3189,7 +3233,7 @@
             Message message = session.createTextMessage(messageContent);
             producer.send(message);
 
-            assertFalse("The ExceptionListener should not have been alerted", exceptionListenerFired.get());
+            assertFalse(exceptionListenerFired.get(), "The ExceptionListener should not have been alerted");
 
             // Shut it down
             finalPeer.expectClose();
@@ -3199,7 +3243,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCannotRecreateConsumerWithCloseFailedLinksEnabled() throws Exception {
         Symbol errorCondition = AmqpError.RESOURCE_DELETED;
         String errorDescription = "testFailoverCannotRecreateConsumerWithCloseFailedLinksEnabled";
@@ -3207,7 +3252,8 @@
         doTestFailoverCannotRecreateConsumerWithCloseFailedLinksEnabled(true, errorCondition, errorDescription);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCannotRecreateConsumerWithCloseFailedLinksEnabledNoMessageListener() throws Exception {
         Symbol errorCondition = AmqpError.RESOURCE_DELETED;
         String errorDescription = "testFailoverCannotRecreateConsumerWithCloseFailedLinksEnabledNoMessageListener";
@@ -3215,12 +3261,14 @@
         doTestFailoverCannotRecreateConsumerWithCloseFailedLinksEnabled(false, errorCondition, errorDescription);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCannotRecreateConsumerWithCloseFailedLinksEnabledNoErrorConditionGiven() throws Exception {
         doTestFailoverCannotRecreateConsumerWithCloseFailedLinksEnabled(true, null, null);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCannotRecreateConsumerWithCloseFailedLinksEnabledNoErrorConditionGivenNoMessageListener() throws Exception {
         doTestFailoverCannotRecreateConsumerWithCloseFailedLinksEnabled(false, null, null);
     }
@@ -3306,11 +3354,11 @@
 
             finalPeer.waitForAllHandlersToComplete(1000);
 
-            assertTrue("Should connect to original peer", originalConnected.await(3, TimeUnit.SECONDS));
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(3, TimeUnit.SECONDS), "Should connect to original peer");
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             // Verify the consumer gets marked closed
-            assertTrue("consumer never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -3330,13 +3378,13 @@
                     }
                     return false;
                 }
-            }, 5000, 10));
+            }, 5000, 10), "consumer never closed.");
 
             // Verify the exception listener behaviour
             if (addListener) {
-                assertTrue("JMS Exception listener should have fired with a MessageListener", exceptionListenerFired.await(2, TimeUnit.SECONDS));
+                assertTrue(exceptionListenerFired.await(2, TimeUnit.SECONDS), "JMS Exception listener should have fired with a MessageListener");
             } else {
-                assertFalse("The ExceptionListener should not have been alerted", exceptionListenerFired.await(10, TimeUnit.MILLISECONDS));
+                assertFalse(exceptionListenerFired.await(10, TimeUnit.MILLISECONDS), "The ExceptionListener should not have been alerted");
             }
 
             // Shut it down
@@ -3347,7 +3395,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCannotRecreateProducerWithCloseFailedLinksEnabled() throws Exception {
         Symbol errorCondition = AmqpError.RESOURCE_DELETED;
         String errorDescription = "testFailoverCannotRecreateProducerWithCloseFailedLinksEnabled";
@@ -3355,7 +3404,8 @@
         doTestFailoverCannotRecreateWithCloseFailedLinksEnabled(errorCondition, errorDescription);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverCannotRecreateProducerWithCloseFailedLinksEnabledNoErrorConditionGiven() throws Exception {
         doTestFailoverCannotRecreateWithCloseFailedLinksEnabled(null, null);
     }
@@ -3425,11 +3475,11 @@
 
             finalPeer.waitForAllHandlersToComplete(1000);
 
-            assertTrue("Should connect to original peer", originalConnected.await(3, TimeUnit.SECONDS));
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(3, TimeUnit.SECONDS), "Should connect to original peer");
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             // Verify the producer gets marked closed
-            assertTrue("producer never closed.", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -3449,9 +3499,9 @@
                     }
                     return false;
                 }
-            }, 5000, 10));
+            }, 5000, 10), "producer never closed.");
 
-            assertFalse("The ExceptionListener should not have been alerted", exceptionListenerFired.get());
+            assertFalse(exceptionListenerFired.get(), "The ExceptionListener should not have been alerted");
 
             // Shut it down
             finalPeer.expectClose();
@@ -3461,7 +3511,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testInDoubtTransactionFromFailoverCompletesAsyncCompletions() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -3541,7 +3592,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
             Queue queue = session.createQueue("myQueue");
@@ -3561,12 +3612,12 @@
                 fail("Should not have failed the async completion send.");
             }
 
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             // This should fire after reconnect without an error, if it fires with an error at
             // any time then something is wrong.
-            assertTrue("Did not get async callback for send #1", listener1.awaitCompletion(5, TimeUnit.SECONDS));
-            assertNull("Completion of send #1 should not have been on error", listener1.exception);
+            assertTrue(listener1.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback for send #1");
+            assertNull(listener1.exception, "Completion of send #1 should not have been on error");
             assertNotNull(listener1.message);
             assertTrue(listener1.message instanceof TextMessage);
 
@@ -3576,8 +3627,8 @@
                 fail("Should not have failed the async completion send.");
             }
 
-            assertTrue("Did not get async callback for send #2", listener2.awaitCompletion(5, TimeUnit.SECONDS));
-            assertNull("Completion of send #2 should not have been on error", listener2.exception);
+            assertTrue(listener2.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback for send #2");
+            assertNull(listener2.exception, "Completion of send #2 should not have been on error");
             assertNotNull(listener2.message);
             assertTrue(listener2.message instanceof TextMessage);
 
@@ -3592,8 +3643,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendAndConnectionDropsRecoveredAsInDoubtTransaction() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -3673,7 +3724,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
             Queue queue = session.createQueue("myQueue");
@@ -3691,7 +3742,7 @@
                 fail("Should not have failed to send.");
             }
 
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             try {
                 session.commit();
@@ -3705,8 +3756,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSecondSendAndConnectionDropsResendsButTransactionRollsBackAsInDoubt() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -3793,7 +3844,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
             Queue queue = session.createQueue("myQueue");
@@ -3817,7 +3868,7 @@
                 fail("Should not have failed to send.");
             }
 
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             try {
                 session.commit();
@@ -3831,8 +3882,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactionalAcknowledgeAfterRecoveredWhileSendBlocked() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -3916,7 +3967,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
             Queue queue = session.createQueue("myQueue");
@@ -3934,7 +3985,7 @@
                 fail("Should not have failed the send after connection dropped.");
             }
 
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             MessageConsumer consumer = session.createConsumer(queue);
             assertNotNull(consumer.receive(5000));
@@ -3951,8 +4002,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 30_000)
+    @Test
+    @Timeout(30)
     public void testReceiveAndSendInTransactionFailsCommitWhenConnectionDropsDuringSend() throws Exception {
         final Binary txnId1 = new Binary(new byte[]{ (byte) 1, (byte) 2, (byte) 3, (byte) 4});
         final Binary txnId2 = new Binary(new byte[]{ (byte) 5, (byte) 6, (byte) 7, (byte) 8});
@@ -4032,7 +4083,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
             Queue queue = session.createQueue("myQueue");
@@ -4048,13 +4099,13 @@
                 }
             });
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             finalPeer.waitForAllHandlersToComplete(1000);
             finalPeer.expectDischarge(txnId2, true);
             finalPeer.expectClose();
 
-            assertTrue("Should have encounted a Transaction Rollback Error", transactionRollback.await(5, TimeUnit.SECONDS));
+            assertTrue(transactionRollback.await(5, TimeUnit.SECONDS), "Should have encounted a Transaction Rollback Error");
 
             connection.close();
 
@@ -4062,7 +4113,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactionDeclareWithNoResponseRecoveredAsInDoubtAndCommitFails() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -4154,11 +4206,11 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
 
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             Queue queue = session.createQueue("myQueue");
             MessageProducer producer = session.createProducer(queue);
@@ -4185,12 +4237,14 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactionCommitWithNoResponseRecoveredAsInDoubtAndPerformsNoWork() throws Exception {
         doTestTransactionRetirementWithNoResponseRecoveredAsInDoubtAndCommitRollsBack(true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testTransactionRollbackWithNoResponseRecoveredAsInDoubtAndPerformsNoWork() throws Exception {
         doTestTransactionRetirementWithNoResponseRecoveredAsInDoubtAndCommitRollsBack(false);
     }
@@ -4287,7 +4341,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
 
@@ -4306,7 +4360,7 @@
                 }
             }
 
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             Queue queue = session.createQueue("myQueue");
             MessageProducer producer = session.createProducer(queue);
@@ -4333,8 +4387,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20_000)
+    @Test
+    @Timeout(20)
     public void testSendWhileOfflinePreventsRecoveredTransactionFromCommitting() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -4400,7 +4454,7 @@
             });
             connection.start();
 
-            assertTrue("Should connect to original peer", originalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(5, TimeUnit.SECONDS), "Should connect to original peer");
 
             Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
             Queue queue = session.createQueue("myQueue");
@@ -4425,7 +4479,7 @@
                 fail("Should not have failed the async completion send.");
             }
 
-            assertTrue("Should connect to final peer", finalConnected.await(5, TimeUnit.SECONDS));
+            assertTrue(finalConnected.await(5, TimeUnit.SECONDS), "Should connect to final peer");
 
             try {
                 session.commit();
@@ -4440,8 +4494,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverDoesNotFailPendingAsyncCompletionSend() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -4493,8 +4547,8 @@
 
             // This should fire after reconnect without an error, if it fires with an error at
             // any time then something is wrong.
-            assertTrue("Did not get async callback", listener.awaitCompletion(5, TimeUnit.SECONDS));
-            assertNull("Completion should not have been on error", listener.exception);
+            assertTrue(listener.awaitCompletion(5, TimeUnit.SECONDS), "Did not get async callback");
+            assertNull(listener.exception, "Completion should not have been on error");
             assertNotNull(listener.message);
             assertTrue(listener.message instanceof TextMessage);
 
@@ -4504,8 +4558,8 @@
         }
     }
 
-    @Repeat(repetitions = 1)
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesAnonymousFallbackWaitingForClose() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -4565,22 +4619,26 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPassthroughCreateTemporaryQueueFailsWhenLinkRefusedAndAttachResponseWriteIsNotDeferred() throws Exception {
         doCreateTemporaryDestinationFailsWhenLinkRefusedTestImpl(false, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPassthroughCreateTemporaryQueueFailsWhenLinkRefusedAndAttachResponseWriteIsDeferred() throws Exception {
         doCreateTemporaryDestinationFailsWhenLinkRefusedTestImpl(false, true);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPassthroughCreateTemporaryTopicFailsWhenLinkRefusedAndAttachResponseWriteIsNotDeferred() throws Exception {
         doCreateTemporaryDestinationFailsWhenLinkRefusedTestImpl(true, false);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPassthroughCreateTemporaryTopicFailsWhenLinkRefusedAndAttachResponseWriteIsDeferred() throws Exception {
         doCreateTemporaryDestinationFailsWhenLinkRefusedTestImpl(true, true);
     }
@@ -4623,7 +4681,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPassthroughRemotelyCloseProducer() throws Exception {
         final String BREAD_CRUMB = "ErrorMessageBreadCrumb";
 
@@ -4655,7 +4714,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 {
@@ -4674,9 +4733,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.
@@ -4689,7 +4748,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPassthroughOfSendFailsWhenDelayedDeliveryIsNotSupported() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer()) {
 
@@ -4735,7 +4795,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPassthroughOfSendTimesOutWhenNoDispostionArrives() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -4782,7 +4843,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testPassthroughOfRollbackErrorCoordinatorClosedOnCommit() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -4823,7 +4885,8 @@
         }
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testPassthroughOfSessionCreateFailsOnDeclareTimeout() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
 
@@ -4859,7 +4922,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionPropertiesExtensionAppliedOnEachReconnect() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -4941,8 +5005,8 @@
 
             finalPeer.waitForAllHandlersToComplete(2000);
 
-            assertTrue("Should connect to original peer", originalConnected.await(3, TimeUnit.SECONDS));
-            assertTrue("Should connect to final peer", finalConnected.await(3, TimeUnit.SECONDS));
+            assertTrue(originalConnected.await(3, TimeUnit.SECONDS), "Should connect to original peer");
+            assertTrue(finalConnected.await(3, TimeUnit.SECONDS), "Should connect to final peer");
 
             finalPeer.expectClose();
             connection.close();
@@ -4950,7 +5014,8 @@
             finalPeer.waitForAllHandlersToComplete(1000);        }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSessionCreationRecoversAfterDropWithNoBeginResponse() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer finalPeer = new TestAmqpPeer();) {
@@ -4997,7 +5062,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testMultipleSessionCreationRecoversAfterDropWithNoBeginResponseAndFailedRecoveryAttempt() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer intermediatePeer = new TestAmqpPeer();
@@ -5066,7 +5132,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testMultipleSenderCreationRecoversAfterDropWithNoAttachResponseAndFailedRecoveryAttempt() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer intermediatePeer = new TestAmqpPeer();
@@ -5123,7 +5190,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSenderAndReceiverCreationRecoversAfterDropWithNoAttachResponseAndFailedRecoveryAttempt() throws Exception {
         try (TestAmqpPeer originalPeer = new TestAmqpPeer();
              TestAmqpPeer intermediatePeer = new TestAmqpPeer();
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderClosedTest.java
index fd4be3e..08415cb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderClosedTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.qpid.jms.provider.failover;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import java.net.URI;
 import java.util.Collections;
 
@@ -30,8 +32,10 @@
 import org.apache.qpid.jms.provider.ProviderException;
 import org.apache.qpid.jms.provider.ProviderFuture;
 import org.apache.qpid.jms.provider.ProviderFutureFactory;
-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 that methods of FailoverProvider all fail immediately when it is closed.
@@ -46,9 +50,9 @@
     private JmsConsumerInfo consumer;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         provider = (FailoverProvider) FailoverProviderFactory.create(new URI("failover:(mock://localhost)"));
         provider.close();
@@ -58,94 +62,137 @@
         consumer = createConsumerInfo(session);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testMultipleCloseCalls() {
         provider.close();
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testConnect() throws Exception {
-        provider.connect(connection);
+        assertThrows(ProviderException.class, () -> {
+            provider.connect(connection);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testStart() throws Exception {
-        provider.start();
+        assertThrows(ProviderException.class, () -> {
+            provider.start();
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testCreateResource() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        provider.create(connection, request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            provider.create(connection, request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testStartResource() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        provider.start(session, request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            provider.start(session, request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testStopResource() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        provider.stop(session, request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            provider.stop(session, request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testDestroyResource() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        provider.destroy(session, request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            provider.destroy(session, request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testSend() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        provider.send(new JmsOutboundMessageDispatch(), request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            provider.send(new JmsOutboundMessageDispatch(), request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testSessionAcknowledge() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        provider.acknowledge(session.getId(), ACK_TYPE.ACCEPTED, request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            provider.acknowledge(session.getId(), ACK_TYPE.ACCEPTED, request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testAcknowledgeMessage() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        provider.acknowledge(new JmsInboundMessageDispatch(1), ACK_TYPE.ACCEPTED, request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            provider.acknowledge(new JmsInboundMessageDispatch(1), ACK_TYPE.ACCEPTED, request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testCommit() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        JmsTransactionId txId = new JmsTransactionId(connection.getId(), 1);
-        JmsTransactionInfo txInfo = new JmsTransactionInfo(session.getId(), txId);
-        provider.commit(txInfo, null, request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            JmsTransactionId txId = new JmsTransactionId(connection.getId(), 1);
+            JmsTransactionInfo txInfo = new JmsTransactionInfo(session.getId(), txId);
+            provider.commit(txInfo, null, request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testRollback() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        JmsTransactionId txId = new JmsTransactionId(connection.getId(), 1);
-        JmsTransactionInfo txInfo = new JmsTransactionInfo(session.getId(), txId);
-        provider.rollback(txInfo, null, request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            JmsTransactionId txId = new JmsTransactionId(connection.getId(), 1);
+            JmsTransactionInfo txInfo = new JmsTransactionInfo(session.getId(), txId);
+            provider.rollback(txInfo, null, request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testRecover() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        provider.recover(session.getId(), request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            provider.recover(session.getId(), request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testUnsubscribe() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        provider.unsubscribe("subscription-name", request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            provider.unsubscribe("subscription-name", request);
+        });
     }
 
-    @Test(timeout=30000, expected=ProviderException.class)
+    @Test
+    @Timeout(30)
     public void testMessagePull() throws Exception {
-        ProviderFuture request = futuresFactory.createFuture();
-        provider.pull(consumer.getId(), 1, request);
+        assertThrows(ProviderException.class, () -> {
+            ProviderFuture request = futuresFactory.createFuture();
+            provider.pull(consumer.getId(), 1, request);
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderOfflineBehaviorTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderOfflineBehaviorTest.java
index e0f42cb..440511b 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderOfflineBehaviorTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderOfflineBehaviorTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.qpid.jms.provider.failover;
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.URI;
 import java.util.concurrent.CountDownLatch;
@@ -35,9 +35,11 @@
 import org.apache.qpid.jms.meta.JmsSessionInfo;
 import org.apache.qpid.jms.provider.exceptions.ProviderIOException;
 import org.apache.qpid.jms.provider.mock.ResourceLifecycleFilter;
-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.junit.jupiter.api.Timeout;
 
 /**
  * Test that calls into the FailoverProvider when it is not connected works
@@ -51,20 +53,21 @@
     private CountDownLatch connectionInterrupted;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         connectionInterrupted = new CountDownLatch(1);
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         connection.close();
         super.tearDown();
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConnectionCloseDoesNotBlock() throws Exception {
         connection = (JmsConnection) factory.createConnection();
         connection.addConnectionListener(new ConnectionInterruptionListener());
@@ -74,7 +77,8 @@
         connection.close();
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSessionCloseDoesNotBlock() throws Exception {
         connection = (JmsConnection) factory.createConnection();
         connection.addConnectionListener(new ConnectionInterruptionListener());
@@ -86,14 +90,15 @@
         connection.close();
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testProducerCloseDoesNotBlock() throws Exception {
         connection = (JmsConnection) factory.createConnection();
         connection.addConnectionListener(new ConnectionInterruptionListener());
         connection.start();
 
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(_testName.getMethodName());
+        Queue queue = session.createQueue(_testMethodName);
         MessageProducer producer = session.createProducer(queue);
 
         mockPeer.shutdown();
@@ -103,14 +108,15 @@
         connection.close();
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testConsumerCloseDoesNotBlock() throws Exception {
         connection = (JmsConnection) factory.createConnection();
         connection.addConnectionListener(new ConnectionInterruptionListener());
         connection.start();
 
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(_testName.getMethodName());
+        Queue queue = session.createQueue(_testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         mockPeer.shutdown();
@@ -120,7 +126,8 @@
         connection.close();
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSessionCloseWhenDestroyCallFailsDoesNotBlock() throws Exception {
         mockPeer.setResourceDestroyFilter(new ResourceLifecycleFilter() {
 
@@ -143,7 +150,8 @@
         connection.close();
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSessionCloseWhenProviderSuddenlyClosesDoesNotBlock() throws Exception {
         connection = (JmsConnection) factory.createConnection();
         connection.addConnectionListener(new ConnectionInterruptionListener());
@@ -156,14 +164,15 @@
         session.close();
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSessionCloseWithOpenResourcesDoesNotBlock() throws Exception {
         connection = (JmsConnection) factory.createConnection();
         connection.addConnectionListener(new ConnectionInterruptionListener());
         connection.start();
 
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(_testName.getMethodName());
+        Queue queue = session.createQueue(_testMethodName);
         session.createConsumer(queue);
         session.createProducer(queue);
 
@@ -174,7 +183,8 @@
         connection.close();
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testSessionRecoverDoesNotBlock() throws Exception {
         connection = (JmsConnection) factory.createConnection();
         connection.addConnectionListener(new ConnectionInterruptionListener());
@@ -188,14 +198,15 @@
         connection.close();
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTransactionCommitFails() throws Exception {
         connection = (JmsConnection) factory.createConnection();
         connection.addConnectionListener(new ConnectionInterruptionListener());
         connection.start();
 
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(_testName.getMethodName());
+        Queue queue = session.createQueue(_testMethodName);
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createMessage());
 
@@ -210,14 +221,15 @@
         connection.close();
     }
 
-    @Test(timeout=20000)
+    @Test
+    @Timeout(20)
     public void testTransactionRollbackSucceeds() throws Exception {
         connection = (JmsConnection) factory.createConnection();
         connection.addConnectionListener(new ConnectionInterruptionListener());
         connection.start();
 
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(_testName.getMethodName());
+        Queue queue = session.createQueue(_testMethodName);
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createMessage());
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderTest.java
index 78de4fb..970c3bc 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderTest.java
@@ -16,12 +16,12 @@
  */
 package org.apache.qpid.jms.provider.failover;
 
-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.net.URI;
 import java.util.ArrayList;
@@ -48,9 +48,11 @@
 import org.apache.qpid.jms.provider.ProviderFuture;
 import org.apache.qpid.jms.provider.ProviderFutureFactory;
 import org.apache.qpid.jms.test.Wait;
-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.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -68,8 +70,10 @@
     private JmsConnectionInfo connection;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
+
         uris = new ArrayList<URI>();
 
         uris.add(new URI("mock://192.168.2.1:5672"));
@@ -78,12 +82,10 @@
         uris.add(new URI("mock://192.168.2.4:5672"));
 
         connection = createConnectionInfo();
-
-        super.setUp();
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         if (provider != null) {
             provider.close();
@@ -91,7 +93,8 @@
         super.tearDown();
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateProviderOnlyUris() {
         provider = new FailoverProvider(uris, Collections.emptyMap(), futuresFactory);
         assertEquals(FailoverUriPool.DEFAULT_RANDOMIZE_ENABLED, provider.isRandomize());
@@ -100,7 +103,8 @@
         assertTrue(provider.getNestedOptions().isEmpty());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateProviderOnlyNestedOptions() {
         Map<String, String> options = new HashMap<String, String>();
         options.put("transport.tcpNoDelay", "true");
@@ -113,7 +117,8 @@
         assertTrue(provider.getNestedOptions().containsKey("transport.tcpNoDelay"));
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateProviderWithNestedOptions() {
         provider = new FailoverProvider(uris, Collections.<String, String>emptyMap(), futuresFactory);
         assertEquals(FailoverUriPool.DEFAULT_RANDOMIZE_ENABLED, provider.isRandomize());
@@ -122,7 +127,8 @@
         assertTrue(provider.getNestedOptions().isEmpty());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testProviderListener() {
         provider = new FailoverProvider(uris, Collections.<String, String>emptyMap(), futuresFactory);
         assertNull(provider.getProviderListener());
@@ -130,38 +136,41 @@
         assertNotNull(provider.getProviderListener());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testGetRemoteURI() throws Exception {
         provider = new FailoverProvider(uris, Collections.<String, String>emptyMap(), futuresFactory);
 
         assertNull(provider.getRemoteURI());
         provider.connect(connection);
-        assertTrue("Should have a remote URI after connect", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return provider.getRemoteURI() != null;
             }
-        }, TimeUnit.SECONDS.toMillis(20), 10));
+        }, TimeUnit.SECONDS.toMillis(20), 10), "Should have a remote URI after connect");
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testToString() throws Exception {
         provider = new FailoverProvider(uris, Collections.<String, String>emptyMap(), futuresFactory);
 
         assertNotNull(provider.toString());
         provider.connect(connection);
-        assertTrue("Should have a mock scheme after connect", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 LOG.info("FailoverProvider: toString = {}", provider.toString());
                 return provider.toString().contains("mock://");
             }
-        }, TimeUnit.SECONDS.toMillis(20), 10));
+        }, TimeUnit.SECONDS.toMillis(20), 10), "Should have a mock scheme after connect");
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testConnectToMock() throws Exception {
         provider = new FailoverProvider(uris, Collections.<String, String>emptyMap(), futuresFactory);
         assertEquals(FailoverUriPool.DEFAULT_RANDOMIZE_ENABLED, provider.isRandomize());
@@ -192,7 +201,8 @@
         assertEquals(1, mockPeer.getContextStats().getConnectionAttempts());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCannotStartWithoutListener() throws Exception {
         provider = new FailoverProvider(uris, Collections.<String, String>emptyMap(), futuresFactory);
         assertEquals(FailoverUriPool.DEFAULT_RANDOMIZE_ENABLED, provider.isRandomize());
@@ -208,7 +218,8 @@
         provider.close();
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testStartupMaxReconnectAttempts() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://localhost?mock.failOnConnect=true)" +
@@ -232,7 +243,8 @@
         assertEquals(5, mockPeer.getContextStats().getCloseAttempts());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testMaxReconnectAttemptsWithOneURI() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://localhost1?mock.failOnConnect=true)" +
@@ -256,7 +268,8 @@
         assertEquals(5, mockPeer.getContextStats().getCloseAttempts());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testMaxReconnectAttemptsWithMultipleURIs() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://192.168.2.1?mock.failOnConnect=true," +
@@ -284,7 +297,8 @@
         assertEquals(15, mockPeer.getContextStats().getCloseAttempts());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testMaxReconnectAttemptsWithBackOff() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://localhost?mock.failOnConnect=true)" +
@@ -310,7 +324,8 @@
         assertEquals(5, mockPeer.getContextStats().getCloseAttempts());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testFailureOnCloseIsSwallowed() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://localhost?mock.failOnClose=true)");
@@ -324,7 +339,8 @@
         assertEquals(1, mockPeer.getContextStats().getCloseAttempts());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testSessionLifeCyclePassthrough() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://localhost)");
@@ -338,7 +354,8 @@
         assertEquals(1, mockPeer.getContextStats().getDestroyResourceCalls(JmsSessionInfo.class));
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testConsumerLifeCyclePassthrough() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://localhost)");
@@ -346,7 +363,7 @@
         Connection connection = factory.createConnection();
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Destination destination = session.createTopic(_testName.getMethodName());
+        Destination destination = session.createTopic(_testMethodName);
         session.createConsumer(destination).close();
         connection.close();
 
@@ -355,7 +372,8 @@
         assertEquals(1, mockPeer.getContextStats().getDestroyResourceCalls(JmsConsumerInfo.class));
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testProducerLifeCyclePassthrough() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://localhost)");
@@ -363,7 +381,7 @@
         Connection connection = factory.createConnection();
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Destination destination = session.createTopic(_testName.getMethodName());
+        Destination destination = session.createTopic(_testMethodName);
         session.createProducer(destination).close();
         connection.close();
 
@@ -371,7 +389,8 @@
         assertEquals(1, mockPeer.getContextStats().getDestroyResourceCalls(JmsProducerInfo.class));
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testSessionRecoverPassthrough() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://localhost)");
@@ -385,7 +404,8 @@
         assertEquals(1, mockPeer.getContextStats().getRecoverCalls());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testSessionUnsubscribePassthrough() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://localhost)");
@@ -399,7 +419,8 @@
         assertEquals(1, mockPeer.getContextStats().getUnsubscribeCalls());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testSendMessagePassthrough() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(
             "failover:(mock://localhost)");
@@ -416,7 +437,8 @@
         assertEquals(1, mockPeer.getContextStats().getSendCalls());
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testTimeoutsSetFromConnectionInfo() throws Exception {
         final long CONNECT_TIMEOUT = TimeUnit.SECONDS.toMillis(4);
         final long CLOSE_TIMEOUT = TimeUnit.SECONDS.toMillis(5);
@@ -450,13 +472,15 @@
         assertEquals(REQUEST_TIMEOUT, provider.getRequestTimeout());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testAmqpOpenServerListActionDefault() {
         provider = new FailoverProvider(uris, Collections.emptyMap(), futuresFactory);
         assertEquals("REPLACE", provider.getAmqpOpenServerListAction());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testSetGetAmqpOpenServerListAction() {
         provider = new FailoverProvider(uris, Collections.emptyMap(), futuresFactory);
         String action = "ADD";
@@ -466,7 +490,8 @@
         assertEquals(action, provider.getAmqpOpenServerListAction());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testSetInvalidAmqpOpenServerListActionThrowsIAE() {
         provider = new FailoverProvider(uris, Collections.emptyMap(), futuresFactory);
         try {
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderTestSupport.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderTestSupport.java
index 19f6d3e..99ff3ed 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderTestSupport.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverProviderTestSupport.java
@@ -27,8 +27,9 @@
 import org.apache.qpid.jms.provider.mock.MockRemotePeer;
 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;
 
 /**
  * Utility methods useful in testing the FailoverProvider
@@ -42,19 +43,19 @@
     protected MockRemotePeer mockPeer;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
+
         nextSessionId.set(0);
         nextConsumerId.set(0);
 
         mockPeer = new MockRemotePeer();
         mockPeer.start();
-
-        super.setUp();
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         if (mockPeer != null) {
             mockPeer.terminate();
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverRedirectTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverRedirectTest.java
index ebf356d..1820727 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverRedirectTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverRedirectTest.java
@@ -19,7 +19,7 @@
 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.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -38,7 +38,8 @@
 import org.apache.qpid.jms.test.testpeer.TestAmqpPeer;
 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;
 
@@ -51,7 +52,8 @@
 
     private static final Logger LOG = LoggerFactory.getLogger(FailoverRedirectTest.class);
 
-    @Test(timeout = 40000)
+    @Test
+    @Timeout(40)
     public void testFailoverHandlesRedirection() throws Exception {
         try (TestAmqpPeer rejectingPeer = new TestAmqpPeer();
              TestAmqpPeer redirectedPeer = new TestAmqpPeer();) {
@@ -84,7 +86,7 @@
             connection.start();
 
             rejectingPeer.waitForAllHandlersToComplete(1000);
-            assertTrue("Should connect to backup peer", connected.await(15, TimeUnit.SECONDS));
+            assertTrue(connected.await(15, TimeUnit.SECONDS), "Should connect to backup peer");
 
             redirectedPeer.expectClose();
             connection.close();
@@ -92,7 +94,8 @@
         }
     }
 
-    @Test(timeout = 40000)
+    @Test
+    @Timeout(40)
     public void testFailoverHandlesRemotelyEndConnectionWithRedirection() throws Exception {
         try (TestAmqpPeer rejectingPeer = new TestAmqpPeer();
              TestAmqpPeer redirectedPeer = new TestAmqpPeer();) {
@@ -140,8 +143,8 @@
 
             rejectingPeer.waitForAllHandlersToComplete(1000);
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(15, TimeUnit.SECONDS));
-            assertTrue("Should connect to backup peer", connectedToBackup.await(15, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(15, TimeUnit.SECONDS), "Should connect to primary peer");
+            assertTrue(connectedToBackup.await(15, TimeUnit.SECONDS), "Should connect to backup peer");
 
             redirectedPeer.expectClose();
             connection.close();
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverSocketLevelAcceptFailures.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverSocketLevelAcceptFailures.java
index 9d450fb..4c90faf 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverSocketLevelAcceptFailures.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverSocketLevelAcceptFailures.java
@@ -16,7 +16,7 @@
  */
 package org.apache.qpid.jms.provider.failover;
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.ServerSocket;
 
@@ -26,9 +26,11 @@
 
 import org.apache.qpid.jms.JmsConnectionFactory;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-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.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,14 +45,14 @@
     private ServerSocket server;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         server = ServerSocketFactory.getDefault().createServerSocket(0);
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         try {
             server.close();
@@ -61,8 +63,9 @@
         super.tearDown();
     }
 
-    @Test(timeout = 40000)
-    public void testFailoverHandlesSocketNotAccepted() throws Exception {
+    @Test
+    @Timeout(40)
+    void testFailoverHandlesSocketNotAccepted() throws Exception {
         final String remoteURI = "failover:(amqp://localhost:" + server.getLocalPort() +
             ")?jms.connectTimeout=666&failover.maxReconnectAttempts=1&failover.startupMaxReconnectAttempts=1";
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverUriPoolTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverUriPoolTest.java
index 173a0b0..f9090bd 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverUriPoolTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverUriPoolTest.java
@@ -16,14 +16,14 @@
  */
 package org.apache.qpid.jms.provider.failover;
 
-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.Assume.assumeTrue;
+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 static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import java.net.InetAddress;
 import java.net.URI;
@@ -36,8 +36,9 @@
 
 import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.jms.util.URISupport;
-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;
 
 /**
  * Test for the behavior of the FailoverUriPool
@@ -47,9 +48,9 @@
     private List<URI> uris;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         uris = new ArrayList<URI>();
 
@@ -445,9 +446,9 @@
         }
 
         if (shouldShuffle) {
-            assertTrue("URIs did not get randomized", shuffled);
+            assertTrue(shuffled, "URIs did not get randomized");
         } else {
-            assertFalse("URIs should not get randomized", shuffled);
+            assertFalse(shuffled, "URIs should not get randomized");
         }
     }
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverWithAmqpOpenProvidedServerListIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverWithAmqpOpenProvidedServerListIntegrationTest.java
index 344135b..75b012c 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverWithAmqpOpenProvidedServerListIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FailoverWithAmqpOpenProvidedServerListIntegrationTest.java
@@ -17,10 +17,10 @@
 package org.apache.qpid.jms.provider.failover;
 
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.SCHEME;
-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.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 java.lang.reflect.Field;
 import java.net.URI;
@@ -49,7 +49,8 @@
 import org.apache.qpid.jms.util.URISupport;
 import org.apache.qpid.proton.amqp.Symbol;
 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;
 
@@ -78,7 +79,8 @@
      * replace the servers in its existing URI pool, it does so, leaving the server successfully connected
      * to plus the announced failover servers.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesServerProvidedFailoverListReplace() throws Exception {
         doFailoverHandlesServerProvidedFailoverListTestImpl(true);
     }
@@ -87,7 +89,8 @@
      * Verify that when the Open frame contains a failover server list, and the client is configured to
      * add the servers to its existing URI pool, it does so.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesServerProvidedFailoverListAdd() throws Exception {
         doFailoverHandlesServerProvidedFailoverListTestImpl(false);
     }
@@ -164,7 +167,7 @@
             // Provoke the actual AMQP connection
             connection.start();
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(5, TimeUnit.SECONDS), "Should connect to primary peer");
 
             // Verify the failover URIs are as expected, now containing initial peer and the backup1
             List<URI> afterOpenFailoverURIs = new ArrayList<>();
@@ -191,8 +194,8 @@
             // Kill the primary peer
             primaryPeer.close();
 
-            assertTrue("Should connect to backup1 peer", connectedToBackup1.await(5, TimeUnit.SECONDS));
-            assertEquals("Should not yet connect to backup2 peer", 1, connectedToBackup2.getCount());
+            assertTrue(connectedToBackup1.await(5, TimeUnit.SECONDS), "Should connect to backup1 peer");
+            assertEquals(1, connectedToBackup2.getCount(), "Should not yet connect to backup2 peer");
 
             // Verify the failover URIs are as expected
             List<URI> afterFirstReconnectFailoverURIs = new ArrayList<>();
@@ -217,7 +220,7 @@
             // Kill the backup1 peer
             backupPeer1.close();
 
-            assertTrue("Should connect to backup2 peer", connectedToBackup2.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToBackup2.await(5, TimeUnit.SECONDS), "Should connect to backup2 peer");
 
             // Verify the failover URIs are as expected
             List<URI> afterSecondReconnectFailoverURIs = new ArrayList<>();
@@ -244,7 +247,8 @@
      * Verify that when the Open frame contains a failover server list, and the client is configured to ignore it,
      * no change occurs in the failover URIs in use by the client after connecting.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesServerProvidedFailoverListIgnore() throws Exception {
         try (TestAmqpPeer primaryPeer = new TestAmqpPeer();) {
 
@@ -294,7 +298,7 @@
             // Provoke the actual AMQP connection
             connection.start();
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(5, TimeUnit.SECONDS), "Should connect to primary peer");
 
             // Verify the existing failover URIs are as expected, still the initial peer only
             assertFailoverURIList(connection, primaryPeerOnlyFailoverURIs);
@@ -309,7 +313,8 @@
      * Verify that when the Open frame contains a failover server list, and it specifies an AMQP hostname in
      * a particular servers details, the hostname is used when failover occurs.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesServerProvidedFailoverListWithHostname() throws Exception {
         try (TestAmqpPeer primaryPeer = new TestAmqpPeer();
              TestAmqpPeer backupPeer = new TestAmqpPeer();) {
@@ -371,7 +376,7 @@
             // Provoke the actual AMQP connection
             connection.start();
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(5, TimeUnit.SECONDS), "Should connect to primary peer");
 
             // Verify the failover URIs are as expected, now containing initial peer and the backup (with vhost details)
             List<URI> afterOpenFailoverURIs = new ArrayList<>();
@@ -395,7 +400,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverHandlesRemoteCloseWithRedirectDuringConnectionSessionEstablishment() throws Exception {
         try (TestAmqpPeer primaryPeer = new TestAmqpPeer();
              TestAmqpPeer backupPeer = new TestAmqpPeer();) {
@@ -464,8 +470,8 @@
 
             primaryPeer.waitForAllHandlersToComplete(3000);
 
-            assertTrue("Should connect to backup peer", connectedToBackup.await(5, TimeUnit.SECONDS));
-            assertFalse("Should not connect to primary peer", connectedToPrimary.await(10, TimeUnit.MILLISECONDS));
+            assertTrue(connectedToBackup.await(5, TimeUnit.SECONDS), "Should connect to backup peer");
+            assertFalse(connectedToPrimary.await(10, TimeUnit.MILLISECONDS), "Should not connect to primary peer");
 
             // Verify the failover URIs are as expected, now containing initial peer, its advertised third test-details peer, and the peer it then redirected to.
             List<URI> afterOpenFailoverURIs = new ArrayList<>();
@@ -485,7 +491,8 @@
      * Verify that when the Open frame contains a failover server list and we are connected via SSL configured with
      * system properties the redirect uses those properties to connect to the new host.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverUsingSSLConfiguredBySystemProperties() throws Exception {
         TransportOptions serverSslOptions = new TransportOptions();
         serverSslOptions.setKeyStoreLocation(BROKER_PKCS12_KEYSTORE);
@@ -556,7 +563,7 @@
             // Provoke the actual AMQP connection
             connection.start();
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(5, TimeUnit.SECONDS), "Should connect to primary peer");
 
             // Verify the failover URIs are as expected, now containing initial peer and the backup1
             List<URI> afterOpenFailoverURIs = new ArrayList<>();
@@ -580,7 +587,7 @@
             primaryPeer.waitForAllHandlersToComplete(1000);
             primaryPeer.close();
 
-            assertTrue("Should connect to backup peer", connectedToBackup.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToBackup.await(5, TimeUnit.SECONDS), "Should connect to backup peer");
 
             backupPeer.waitForAllHandlersToComplete(3000);
 
@@ -594,7 +601,8 @@
      * Verify that when the Open frame contains a failover server list and we are connected via SSL configured with
      * URI options on the AMQP URI the redirect uses those properties to connect to the new host.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverUsingSSLConfiguredByTransportOptions() throws Exception {
         TransportOptions sslOptions = new TransportOptions();
         sslOptions.setKeyStoreLocation(BROKER_PKCS12_KEYSTORE);
@@ -673,7 +681,7 @@
             // Provoke the actual AMQP connection
             connection.start();
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(5, TimeUnit.SECONDS), "Should connect to primary peer");
 
             // Verify the failover URIs are as expected, now containing initial
             // peer and the backup1
@@ -698,7 +706,7 @@
             primaryPeer.waitForAllHandlersToComplete(1000);
             primaryPeer.close();
 
-            assertTrue("Should connect to backup peer", connectedToBackup.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToBackup.await(5, TimeUnit.SECONDS), "Should connect to backup peer");
 
             backupPeer.waitForAllHandlersToComplete(3000);
 
@@ -713,7 +721,8 @@
      * configured with the Failover URI with nested options the redirect uses those properties to
      * connect to the new host.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverUsingSSLConfiguredByNestedTransportOptions() throws Exception {
         TransportOptions sslOptions = new TransportOptions();
         sslOptions.setKeyStoreLocation(BROKER_PKCS12_KEYSTORE);
@@ -792,7 +801,7 @@
             // Provoke the actual AMQP connection
             connection.start();
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(5, TimeUnit.SECONDS), "Should connect to primary peer");
 
             // Verify the failover URIs are as expected, now containing initial
             // peer and the backup1
@@ -817,7 +826,7 @@
             primaryPeer.waitForAllHandlersToComplete(1000);
             primaryPeer.close();
 
-            assertTrue("Should connect to backup peer", connectedToBackup.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToBackup.await(5, TimeUnit.SECONDS), "Should connect to backup peer");
 
             backupPeer.waitForAllHandlersToComplete(3000);
 
@@ -832,7 +841,8 @@
      * configured with with a custom SSLContext the redirect uses those properties to connect to
      * the new host.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverUsingSSLConfiguredByCustomSSLContext() throws Exception {
         TransportOptions serverSslOptions = new TransportOptions();
         serverSslOptions.setKeyStoreLocation(BROKER_PKCS12_KEYSTORE);
@@ -916,7 +926,7 @@
             // Provoke the actual AMQP connection
             connection.start();
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(5, TimeUnit.SECONDS), "Should connect to primary peer");
 
             // Verify the failover URIs are as expected, now containing initial
             // peer and the backup1
@@ -941,7 +951,7 @@
             primaryPeer.waitForAllHandlersToComplete(1000);
             primaryPeer.close();
 
-            assertTrue("Should connect to backup peer", connectedToBackup.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToBackup.await(5, TimeUnit.SECONDS), "Should connect to backup peer");
 
             backupPeer.waitForAllHandlersToComplete(3000);
 
@@ -956,7 +966,8 @@
      * that a remote listed in the open frame failover list is ignored when insecure redirects are
      * prohibited.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverIgnoresInsecureServerWhenNotConfiguredToAllow() throws Exception {
         doTestFailoverHandlingOfInsecureRedirectAdvertisement(false);
     }
@@ -966,7 +977,8 @@
      * that a remote listed in the open frame failover list is accepted when insecure redirects are
      * allowed.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverAcceptsInsecureServerWhenConfiguredToAllow() throws Exception {
         doTestFailoverHandlingOfInsecureRedirectAdvertisement(true);
     }
@@ -1040,7 +1052,7 @@
             // Provoke the actual AMQP connection
             connection.start();
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(5, TimeUnit.SECONDS), "Should connect to primary peer");
 
             // Verify the failover URIs are as expected, now containing initial peer and if non-secure redirect
             // was permitted, the non-secure backup as well.
@@ -1063,7 +1075,8 @@
      * the 'amqp' transport and the redirect contains a 'ws' scheme that failover reconnect list
      * is updated to contain the 'amqpws' redirect.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverAcceptsUpdateUsingTransportSchemeWS() throws Exception {
         doTestFailoverAcceptsUpdateUsingTransportSchemes("ws", "amqpws");
     }
@@ -1073,7 +1086,8 @@
      * the 'amqp' transport and the redirect contains a 'wss' scheme that failover reconnect list
      * is updated to contain the 'amqpwss' redirect.
      */
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testFailoverAcceptsUpdateUsingTransportSchemeWSS() throws Exception {
         doTestFailoverAcceptsUpdateUsingTransportSchemes("wss", "amqpwss");
     }
@@ -1148,7 +1162,7 @@
             // Provoke the actual AMQP connection
             connection.start();
 
-            assertTrue("Should connect to primary peer", connectedToPrimary.await(5, TimeUnit.SECONDS));
+            assertTrue(connectedToPrimary.await(5, TimeUnit.SECONDS), "Should connect to primary peer");
 
             // Verify the failover URIs are as expected, containing initial peer and a backup with expected uri scheme.
             List<URI> afterOpenFailoverURIs = new ArrayList<>();
@@ -1177,8 +1191,8 @@
         urisField.setAccessible(true);
         Object urisObj = urisField.get(provider);
 
-        assertNotNull("Expected to get a uri pool instance", urisObj);
-        assertTrue("Unexpected uri pool type: " + urisObj.getClass(), urisObj instanceof FailoverUriPool);
+        assertNotNull(urisObj, "Expected to get a uri pool instance");
+        assertTrue(urisObj instanceof FailoverUriPool, "Unexpected uri pool type: " + urisObj.getClass());
         FailoverUriPool uriPool = (FailoverUriPool) urisObj;
 
         List<URI> current = uriPool.getList();
@@ -1190,8 +1204,8 @@
         field.setAccessible(true);
         Object providerObj = field.get(connection);
 
-        assertNotNull("Expected to get a provdier instance", providerObj);
-        assertTrue("Unexpected provider type: " + providerObj.getClass(), providerObj instanceof FailoverProvider);
+        assertNotNull(providerObj, "Expected to get a provdier instance");
+        assertTrue(providerObj instanceof FailoverProvider, "Unexpected provider type: " + providerObj.getClass());
         FailoverProvider provider = (FailoverProvider) providerObj;
         return provider;
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FiloverProviderFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FiloverProviderFactoryTest.java
index 7151422..184356d 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FiloverProviderFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/failover/FiloverProviderFactoryTest.java
@@ -16,19 +16,22 @@
  */
 package org.apache.qpid.jms.provider.failover;
 
-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.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.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.net.URI;
 import java.util.Map;
 
 import org.apache.qpid.jms.provider.Provider;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-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.junit.jupiter.api.Timeout;
 
 /**
  * Test that the provider factory correctly creates and configures the provider.
@@ -40,14 +43,14 @@
     private FailoverProvider provider;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         baseURI = new URI("failover:(amqp://localhost:5672,amqp://localhost:5674)");
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         if (provider != null) {
             provider.close();
@@ -55,7 +58,8 @@
         super.tearDown();
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateProvider() throws Exception {
         assertNotNull(factory.getName());
         Provider provider = factory.createProvider(baseURI);
@@ -63,7 +67,8 @@
         assertTrue(provider instanceof FailoverProvider);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateProviderInitializesToDefaults() throws Exception {
         Provider provider = factory.createProvider(baseURI);
         assertNotNull(provider);
@@ -82,13 +87,17 @@
         assertEquals(FailoverUriPool.DEFAULT_RANDOMIZE_ENABLED, failover.isRandomize());
     }
 
-    @Test(timeout = 60000, expected = IllegalArgumentException.class)
+    @Test
+    @Timeout(60)
     public void testCreateProviderWithUnknownOption() throws Exception {
-        URI badURI = new URI(baseURI.toString() + "?failover.unknown=true");
-        factory.createProvider(badURI);
+        assertThrows(IllegalArgumentException.class, () -> {
+            URI badURI = new URI(baseURI.toString() + "?failover.unknown=true");
+            factory.createProvider(badURI);
+        });
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateWithOptions() throws Exception {
         URI configured = new URI(baseURI.toString() +
             "?failover.initialReconnectDelay=" + (FailoverProvider.DEFAULT_INITIAL_RECONNECT_DELAY + 1) +
@@ -118,7 +127,8 @@
         assertEquals(!FailoverUriPool.DEFAULT_RANDOMIZE_ENABLED, failover.isRandomize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testNestedOptionsArePassedAlong() throws Exception {
         URI configured = new URI(baseURI.toString() +
             "?failover.nested.transport.tcpNoDelay=true&failover.randomize=false");
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AbstractMechanismTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AbstractMechanismTest.java
index bbacf02..5a324dc 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AbstractMechanismTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AbstractMechanismTest.java
@@ -16,13 +16,13 @@
  */
 package org.apache.qpid.jms.sasl;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.security.Principal;
 
 import javax.security.sasl.SaslException;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AbstractMechanismTest {
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AbstractScramSHAMechanismTestBase.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AbstractScramSHAMechanismTestBase.java
index 07913cc..7c642de 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AbstractScramSHAMechanismTestBase.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AbstractScramSHAMechanismTestBase.java
@@ -16,12 +16,12 @@
  */
 package org.apache.qpid.jms.sasl;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import javax.security.sasl.SaslException;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * The quoted text in the test method javadoc is taken from RFC 5802.
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AnonymousMechanismTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AnonymousMechanismTest.java
index 9c9da7c..ee3c60a 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AnonymousMechanismTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/AnonymousMechanismTest.java
@@ -16,12 +16,12 @@
  */
 package org.apache.qpid.jms.sasl;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.security.Principal;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AnonymousMechanismTest {
 
@@ -47,67 +47,67 @@
     public void testIsApplicableWithNoCredentials() {
         AnonymousMechanism mech = new AnonymousMechanism();
 
-        assertTrue("Should be applicable with no credentials", mech.isApplicable(null, null, null));
+        assertTrue(mech.isApplicable(null, null, null), "Should be applicable with no credentials");
     }
 
     @Test
     public void testIsNotApplicableWithNoUser() {
         AnonymousMechanism mech = new AnonymousMechanism();
 
-        assertTrue("Should be applicable with no username", mech.isApplicable(null, "pass", null));
+        assertTrue(mech.isApplicable(null, "pass", null), "Should be applicable with no username");
     }
 
     @Test
     public void testIsApplicableWithNoPassword() {
         AnonymousMechanism mech = new AnonymousMechanism();
 
-        assertTrue("Should be applicable with no password", mech.isApplicable("user", null, null));
+        assertTrue(mech.isApplicable("user", null, null), "Should be applicable with no password");
     }
 
     @Test
     public void testIsApplicableWithEmtpyUser() {
         AnonymousMechanism mech = new AnonymousMechanism();
 
-        assertTrue("Should be applicable with empty username", mech.isApplicable("", "pass", null));
+        assertTrue(mech.isApplicable("", "pass", null), "Should be applicable with empty username");
     }
 
     @Test
     public void testIsApplicableWithEmtpyPassword() {
         AnonymousMechanism mech = new AnonymousMechanism();
 
-        assertTrue("Should be applicable with empty password", mech.isApplicable("user", "", null));
+        assertTrue(mech.isApplicable("user", "", null), "Should be applicable with empty password");
     }
 
     @Test
     public void testIsApplicableWithEmtpyUserAndPassword() {
         AnonymousMechanism mech = new AnonymousMechanism();
 
-        assertTrue("Should be applicable with empty user and password", mech.isApplicable("", "", null));
+        assertTrue(mech.isApplicable("", "", null), "Should be applicable with empty user and password");
     }
 
     @Test
     public void testIsApplicableWithUserAndPassword() {
         AnonymousMechanism mech = new AnonymousMechanism();
 
-        assertTrue("Should be applicable with user and password", mech.isApplicable("user", "password", null));
+        assertTrue(mech.isApplicable("user", "password", null), "Should be applicable with user and password");
     }
 
     @Test
     public void testIsApplicableWithUserAndPasswordAndPrincipal() {
         AnonymousMechanism mech = new AnonymousMechanism();
 
-        assertTrue("Should be applicable with user and password and principal", mech.isApplicable("user", "password", new Principal() {
+        assertTrue(mech.isApplicable("user", "password", new Principal() {
             @Override
             public String getName() {
                 return "name";
             }
-        }));
+        }), "Should be applicable with user and password and principal");
     }
 
     @Test
     public void testIsEnabledByDefault() {
         AnonymousMechanism mech = new AnonymousMechanism();
 
-        assertTrue("Should be enabled by default", mech.isEnabledByDefault());
+        assertTrue(mech.isEnabledByDefault(), "Should be enabled by default");
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/CramMD5MechanismTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/CramMD5MechanismTest.java
index bfd6f01..69f2ae0 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/CramMD5MechanismTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/CramMD5MechanismTest.java
@@ -16,19 +16,19 @@
  */
 package org.apache.qpid.jms.sasl;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+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 static org.junit.jupiter.api.Assertions.fail;
 
 import java.security.Principal;
 import java.util.Base64;
 
-import org.junit.Test;
-
 import javax.security.sasl.SaslException;
 
+import org.junit.jupiter.api.Test;
+
 /**
  * The known good used by these tests is taken from the example in RFC 2195 section 2.
  */
@@ -59,68 +59,68 @@
     public void testIsNotApplicableWithNoCredentials() {
         CramMD5Mechanism mech = new CramMD5Mechanism();
 
-        assertFalse("Should not be applicable with no credentials", mech.isApplicable(null, null, null));
+        assertFalse(mech.isApplicable(null, null, null), "Should not be applicable with no credentials");
     }
 
     @Test
     public void testIsNotApplicableWithNoUser() {
         CramMD5Mechanism mech = new CramMD5Mechanism();
 
-        assertFalse("Should not be applicable with no username", mech.isApplicable(null, "pass", null));
+        assertFalse(mech.isApplicable(null, "pass", null), "Should not be applicable with no username");
     }
 
     @Test
     public void testIsNotApplicableWithNoPassword() {
         CramMD5Mechanism mech = new CramMD5Mechanism();
 
-        assertFalse("Should not be applicable with no password", mech.isApplicable("user", null, null));
+        assertFalse(mech.isApplicable("user", null, null), "Should not be applicable with no password");
     }
 
     @Test
     public void testIsNotApplicableWithEmtpyUser() {
         CramMD5Mechanism mech = new CramMD5Mechanism();
 
-        assertFalse("Should not be applicable with empty username", mech.isApplicable("", "pass", null));
+        assertFalse(mech.isApplicable("", "pass", null), "Should not be applicable with empty username");
     }
 
     @Test
     public void testIsNotApplicableWithEmtpyPassword() {
         CramMD5Mechanism mech = new CramMD5Mechanism();
 
-        assertFalse("Should not be applicable with empty password", mech.isApplicable("user", "", null));
+        assertFalse(mech.isApplicable("user", "", null), "Should not be applicable with empty password");
     }
 
     @Test
     public void testIsNotApplicableWithEmtpyUserAndPassword() {
         CramMD5Mechanism mech = new CramMD5Mechanism();
 
-        assertFalse("Should not be applicable with empty user and password", mech.isApplicable("", "", null));
+        assertFalse(mech.isApplicable("", "", null), "Should not be applicable with empty user and password");
     }
 
     @Test
     public void testIsApplicableWithUserAndPassword() {
         CramMD5Mechanism mech = new CramMD5Mechanism();
 
-        assertTrue("Should be applicable with user and password", mech.isApplicable("user", "password", null));
+        assertTrue(mech.isApplicable("user", "password", null), "Should be applicable with user and password");
     }
 
     @Test
     public void testIsApplicableWithUserAndPasswordAndPrincipal() {
         CramMD5Mechanism mech = new CramMD5Mechanism();
 
-        assertTrue("Should be applicable with user and password and principal", mech.isApplicable("user", "password", new Principal() {
+        assertTrue(mech.isApplicable("user", "password", new Principal() {
             @Override
             public String getName() {
                 return "name";
             }
-        }));
+        }), "Should be applicable with user and password and principal");
     }
 
     @Test
     public void testIsEnabledByDefault() {
         CramMD5Mechanism mech = new CramMD5Mechanism();
 
-        assertTrue("Should be enabled by default", mech.isEnabledByDefault());
+        assertTrue(mech.isEnabledByDefault(), "Should be enabled by default");
     }
 
     public void testIncompleteExchange() throws Exception {
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ExternalMechanismTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ExternalMechanismTest.java
index bb9142f..735b1b5 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ExternalMechanismTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ExternalMechanismTest.java
@@ -16,13 +16,13 @@
  */
 package org.apache.qpid.jms.sasl;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+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 java.security.Principal;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ExternalMechanismTest {
 
@@ -48,37 +48,37 @@
     public void testIsNotApplicableWithUserAndPasswordButNoPrincipal() {
         ExternalMechanism mech = new ExternalMechanism();
 
-        assertFalse("Should not be applicable with user and password but no principal", mech.isApplicable("user", "password", null));
+        assertFalse(mech.isApplicable("user", "password", null), "Should not be applicable with user and password but no principal");
     }
 
     @Test
     public void testIsApplicableWithUserAndPasswordAndPrincipal() {
         ExternalMechanism mech = new ExternalMechanism();
 
-        assertTrue("Should be applicable with user and password and principal", mech.isApplicable("user", "password", new Principal() {
+        assertTrue(mech.isApplicable("user", "password", new Principal() {
             @Override
             public String getName() {
                 return "name";
             }
-        }));
+        }), "Should be applicable with user and password and principal");
     }
 
     @Test
     public void testIsApplicableWithPrincipalOnly() {
         ExternalMechanism mech = new ExternalMechanism();
 
-        assertTrue("Should be applicable with principal only", mech.isApplicable(null, null, new Principal() {
+        assertTrue(mech.isApplicable(null, null, new Principal() {
             @Override
             public String getName() {
                 return "name";
             }
-        }));
+        }), "Should be applicable with principal only");
     }
 
     @Test
     public void testIsEnabledByDefault() {
         ExternalMechanism mech = new ExternalMechanism();
 
-        assertTrue("Should be enabled by default", mech.isEnabledByDefault());
+        assertTrue(mech.isEnabledByDefault(), "Should be enabled by default");
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/GssapiMechanismTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/GssapiMechanismTest.java
index 713ebd4..e7a312a 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/GssapiMechanismTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/GssapiMechanismTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.sasl;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class GssapiMechanismTest {
 
@@ -27,13 +27,13 @@
     public void testIsApplicableWithoutCredentials() {
         GssapiMechanism mech = new GssapiMechanism();
 
-        assertTrue("Should be applicable without credentials", mech.isApplicable(null, null, null));
+        assertTrue(mech.isApplicable(null, null, null), "Should be applicable without credentials");
     }
 
     @Test
     public void testIsNotEnabledByDefault() {
         GssapiMechanism mech = new GssapiMechanism();
 
-        assertFalse("Should not be enabled by default", mech.isEnabledByDefault());
+        assertFalse(mech.isEnabledByDefault(), "Should not be enabled by default");
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/PlainMechanismTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/PlainMechanismTest.java
index 808c7df..bab048f 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/PlainMechanismTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/PlainMechanismTest.java
@@ -16,13 +16,13 @@
  */
 package org.apache.qpid.jms.sasl;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+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 java.security.Principal;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class PlainMechanismTest {
 
@@ -48,67 +48,67 @@
     public void testIsNotApplicableWithNoCredentials() {
         PlainMechanism mech = new PlainMechanism();
 
-        assertFalse("Should not be applicable with no credentials", mech.isApplicable(null, null, null));
+        assertFalse(mech.isApplicable(null, null, null), "Should not be applicable with no credentials");
     }
 
     @Test
     public void testIsNotApplicableWithNoUser() {
         PlainMechanism mech = new PlainMechanism();
 
-        assertFalse("Should not be applicable with no username", mech.isApplicable(null, "pass", null));
+        assertFalse(mech.isApplicable(null, "pass", null), "Should not be applicable with no username");
     }
 
     @Test
     public void testIsNotApplicableWithNoPassword() {
         PlainMechanism mech = new PlainMechanism();
 
-        assertFalse("Should not be applicable with no password", mech.isApplicable("user", null, null));
+        assertFalse(mech.isApplicable("user", null, null), "Should not be applicable with no password");
     }
 
     @Test
     public void testIsNotApplicableWithEmtpyUser() {
         PlainMechanism mech = new PlainMechanism();
 
-        assertFalse("Should not be applicable with empty username", mech.isApplicable("", "pass", null));
+        assertFalse(mech.isApplicable("", "pass", null), "Should not be applicable with empty username");
     }
 
     @Test
     public void testIsNotApplicableWithEmtpyPassword() {
         PlainMechanism mech = new PlainMechanism();
 
-        assertFalse("Should not be applicable with empty password", mech.isApplicable("user", "", null));
+        assertFalse(mech.isApplicable("user", "", null), "Should not be applicable with empty password");
     }
 
     @Test
     public void testIsNotApplicableWithEmtpyUserAndPassword() {
         PlainMechanism mech = new PlainMechanism();
 
-        assertFalse("Should not be applicable with empty user and password", mech.isApplicable("", "", null));
+        assertFalse(mech.isApplicable("", "", null), "Should not be applicable with empty user and password");
     }
 
     @Test
     public void testIsApplicableWithUserAndPassword() {
         PlainMechanism mech = new PlainMechanism();
 
-        assertTrue("Should be applicable with user and password", mech.isApplicable("user", "password", null));
+        assertTrue(mech.isApplicable("user", "password", null), "Should be applicable with user and password");
     }
 
     @Test
     public void testIsApplicableWithUserAndPasswordAndPrincipal() {
         PlainMechanism mech = new PlainMechanism();
 
-        assertTrue("Should be applicable with user and password and principal", mech.isApplicable("user", "password", new Principal() {
+        assertTrue(mech.isApplicable("user", "password", new Principal() {
             @Override
             public String getName() {
                 return "name";
             }
-        }));
+        }), "Should be applicable with user and password and principal");
     }
 
     @Test
     public void testIsEnabledByDefault() {
         PlainMechanism mech = new PlainMechanism();
 
-        assertTrue("Should be enabled by default", mech.isEnabledByDefault());
+        assertTrue(mech.isEnabledByDefault(), "Should be enabled by default");
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA1MechanismTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA1MechanismTest.java
index 2138b8a..1878375 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA1MechanismTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA1MechanismTest.java
@@ -19,12 +19,12 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.not;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.charset.StandardCharsets;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * The known good used by these tests is taken from the example in RFC 5802 section 5.
@@ -80,7 +80,7 @@
     public void testIsEnabledByDefault() {
         ScramSHA1Mechanism mech = new ScramSHA1Mechanism();
 
-        assertTrue("Should be enabled by default", mech.isEnabledByDefault());
+        assertTrue(mech.isEnabledByDefault(), "Should be enabled by default");
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA256MechanismTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA256MechanismTest.java
index 6535beb..ff5c021 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA256MechanismTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA256MechanismTest.java
@@ -19,12 +19,12 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.not;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.charset.StandardCharsets;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * The known good used by these tests is taken from the example in RFC 7677 section 3.
@@ -80,7 +80,7 @@
     public void testIsEnabledByDefault() {
         ScramSHA256Mechanism mech = new ScramSHA256Mechanism();
 
-        assertTrue("Should be enabled by default", mech.isEnabledByDefault());
+        assertTrue(mech.isEnabledByDefault(), "Should be enabled by default");
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA512MechanismTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA512MechanismTest.java
index 7f7ae9c..4e3a355 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA512MechanismTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/ScramSHA512MechanismTest.java
@@ -19,12 +19,12 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.not;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.charset.StandardCharsets;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * The known good used by these tests was generated using external tooling.
@@ -80,7 +80,7 @@
     public void testIsEnabledByDefault() {
         ScramSHA512Mechanism mech = new ScramSHA512Mechanism();
 
-        assertTrue("Should be enabled by default", mech.isEnabledByDefault());
+        assertTrue(mech.isEnabledByDefault(), "Should be enabled by default");
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/XOauth2MechanismTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/XOauth2MechanismTest.java
index bbc226c..36530eb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/XOauth2MechanismTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/sasl/XOauth2MechanismTest.java
@@ -16,15 +16,15 @@
  */
 package org.apache.qpid.jms.sasl;
 
-import org.junit.Test;
+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 java.nio.charset.StandardCharsets;
 import java.security.Principal;
 
-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 org.junit.jupiter.api.Test;
 
 public class XOauth2MechanismTest {
 
@@ -60,35 +60,35 @@
     public void testIsNotApplicableWithNoCredentials() {
         XOauth2Mechanism mech = new XOauth2Mechanism();
 
-        assertFalse("Should not be applicable with no credentials", mech.isApplicable(null, null, null));
+        assertFalse(mech.isApplicable(null, null, null), "Should not be applicable with no credentials");
     }
 
     @Test
     public void testIsNotApplicableWithNoUser() {
         XOauth2Mechanism mech = new XOauth2Mechanism();
 
-        assertFalse("Should not be applicable with no username", mech.isApplicable(null, "pass", null));
+        assertFalse(mech.isApplicable(null, "pass", null), "Should not be applicable with no username");
     }
 
     @Test
     public void testIsNotApplicableWithNoToken() {
         XOauth2Mechanism mech = new XOauth2Mechanism();
 
-        assertFalse("Should not be applicable with no token", mech.isApplicable("user", null, null));
+        assertFalse(mech.isApplicable("user", null, null), "Should not be applicable with no token");
     }
 
     @Test
     public void testIsNotApplicableWithEmtpyUser() {
         XOauth2Mechanism mech = new XOauth2Mechanism();
 
-        assertFalse("Should not be applicable with empty username", mech.isApplicable("", "pass", null));
+        assertFalse(mech.isApplicable("", "pass", null), "Should not be applicable with empty username");
     }
 
     @Test
     public void testIsNotApplicableWithEmtpyToken() {
         XOauth2Mechanism mech = new XOauth2Mechanism();
 
-        assertFalse("Should not be applicable with empty token", mech.isApplicable("user", "", null));
+        assertFalse(mech.isApplicable("user", "", null), "Should not be applicable with empty token");
     }
 
     /** RFC6749 defines the OAUTH2 an access token as comprising VSCHAR elements (\x20-7E) */
@@ -96,7 +96,7 @@
     public void testIsNotApplicableWithIllegalAccessToken() {
         XOauth2Mechanism mech = new XOauth2Mechanism();
 
-        assertFalse("Should not be applicable with non vschars", mech.isApplicable("user", "illegalChar\000", null));
+        assertFalse(mech.isApplicable("user", "illegalChar\000", null), "Should not be applicable with non vschars");
     }
 
 
@@ -104,32 +104,32 @@
     public void testIsNotApplicableWithEmtpyUserAndToken() {
         XOauth2Mechanism mech = new XOauth2Mechanism();
 
-        assertFalse("Should not be applicable with empty user and token", mech.isApplicable("", "", null));
+        assertFalse(mech.isApplicable("", "", null), "Should not be applicable with empty user and token");
     }
 
     @Test
     public void testIsApplicableWithUserAndToken() {
         XOauth2Mechanism mech = new XOauth2Mechanism();
 
-        assertTrue("Should be applicable with user and token", mech.isApplicable("user", "2YotnFZFEjr1zCsicMWpAA", null));
+        assertTrue(mech.isApplicable("user", "2YotnFZFEjr1zCsicMWpAA", null), "Should be applicable with user and token");
     }
 
     @Test
     public void testIsApplicableWithUserAndPasswordAndPrincipal() {
         XOauth2Mechanism mech = new XOauth2Mechanism();
 
-        assertTrue("Should be applicable with user and token and principal", mech.isApplicable("user", "2YotnFZFEjr1zCsicMWpAA", new Principal() {
+        assertTrue(mech.isApplicable("user", "2YotnFZFEjr1zCsicMWpAA", new Principal() {
             @Override
             public String getName() {
                 return "name";
             }
-        }));
+        }), "Should be applicable with user and token and principal");
     }
 
     @Test
     public void testIsEnabledByDefault() {
         XOauth2Mechanism mech = new XOauth2Mechanism();
 
-        assertTrue("Should be enabled by default", mech.isEnabledByDefault());
+        assertTrue(mech.isEnabledByDefault(), "Should be enabled by default");
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorParserTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorParserTest.java
index 68e5f58..e2b4f3b 100755
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorParserTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorParserTest.java
@@ -16,6 +16,10 @@
  */
 package org.apache.qpid.jms.selector;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
 import java.util.HashMap;
 
 import org.apache.qpid.jms.selector.filter.BooleanExpression;
@@ -25,14 +29,14 @@
 import org.apache.qpid.jms.selector.filter.Filterable;
 import org.apache.qpid.jms.selector.filter.LogicExpression;
 import org.apache.qpid.jms.selector.filter.PropertyExpression;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import junit.framework.TestCase;
-
-public class SelectorParserTest extends TestCase {
+public class SelectorParserTest {
     private static final Logger LOG = LoggerFactory.getLogger(SelectorParserTest.class);
 
+    @Test
     public void testParseWithParensAround() throws Exception {
         String[] values = {"x = 1 and y = 2", "(x = 1) and (y = 2)", "((x = 1) and (y = 2))"};
 
@@ -41,13 +45,13 @@
             LOG.info("Parsing: " + value);
 
             BooleanExpression andExpression = parse(value);
-            assertTrue("Created LogicExpression expression", andExpression instanceof LogicExpression);
+            assertTrue(andExpression instanceof LogicExpression, "Created LogicExpression expression");
             LogicExpression logicExpression = (LogicExpression)andExpression;
             Expression left = logicExpression.getLeft();
             Expression right = logicExpression.getRight();
 
-            assertTrue("Left is a binary filter", left instanceof ComparisonExpression);
-            assertTrue("Right is a binary filter", right instanceof ComparisonExpression);
+            assertTrue(left instanceof ComparisonExpression, "Left is a binary filter");
+            assertTrue(right instanceof ComparisonExpression, "Right is a binary filter");
             ComparisonExpression leftCompare = (ComparisonExpression)left;
             ComparisonExpression rightCompare = (ComparisonExpression)right;
             assertPropertyExpression("left", leftCompare.getLeft(), "x");
@@ -56,15 +60,16 @@
     }
 
     protected void assertPropertyExpression(String message, Expression expression, String expected) {
-        assertTrue(message + ". Must be PropertyExpression", expression instanceof PropertyExpression);
+        assertTrue(expression instanceof PropertyExpression, message + ". Must be PropertyExpression");
         PropertyExpression propExp = (PropertyExpression)expression;
-        assertEquals(message + ". Property name", expected, propExp.getName());
+        assertEquals(expected, propExp.getName(), message + ". Property name");
     }
 
     protected BooleanExpression parse(String text) throws Exception {
         return SelectorParser.parse(text);
     }
 
+    @Test
     public void testBooleanSelector() throws Exception {
         MockMessage message = createMessage();
 
@@ -72,6 +77,7 @@
         assertSelector(message, "(trueProp OR falseProp) AND falseProp", false);
     }
 
+    @Test
     public void testJMSPropertySelectors() throws Exception {
         MockMessage message = createMessage();
         message.setJMSType("selector-test");
@@ -91,6 +97,7 @@
         assertSelector(message, "JMSType = 'crap'", false);
     }
 
+    @Test
     public void testBasicSelectors() throws Exception {
         MockMessage message = createMessage();
 
@@ -100,6 +107,7 @@
         assertSelector(message, "rank >= 124", false);
     }
 
+    @Test
     public void testPropertyTypes() throws Exception {
         MockMessage message = createMessage();
         assertSelector(message, "byteProp = 123", true);
@@ -126,6 +134,7 @@
         assertSelector(message, "doubleProp = 10", false);
     }
 
+    @Test
     public void testAndSelectors() throws Exception {
         MockMessage message = createMessage();
 
@@ -135,6 +144,7 @@
         assertSelector(message, "unknown = 'Foo' and anotherUnknown < 200", false);
     }
 
+    @Test
     public void testOrSelectors() throws Exception {
         MockMessage message = createMessage();
 
@@ -145,6 +155,7 @@
         assertSelector(message, "unknown = 'Foo' or anotherUnknown < 200", false);
     }
 
+    @Test
     public void testPlus() throws Exception {
         MockMessage message = createMessage();
 
@@ -156,6 +167,7 @@
         assertSelector(message, "name + '!' = 'James!'", true);
     }
 
+    @Test
     public void testMinus() throws Exception {
         MockMessage message = createMessage();
 
@@ -164,6 +176,7 @@
         assertSelector(message, "rank - 2 > 122", false);
     }
 
+    @Test
     public void testMultiply() throws Exception {
         MockMessage message = createMessage();
 
@@ -172,6 +185,7 @@
         assertSelector(message, "rank * 2 < 130", false);
     }
 
+    @Test
     public void testDivide() throws Exception {
         MockMessage message = createMessage();
 
@@ -181,6 +195,7 @@
         assertSelector(message, "version / 2 = 1", true);
     }
 
+    @Test
     public void testBetween() throws Exception {
         MockMessage message = createMessage();
 
@@ -188,6 +203,7 @@
         assertSelector(message, "rank between 10 and 120", false);
     }
 
+    @Test
     public void testIn() throws Exception {
         MockMessage message = createMessage();
 
@@ -199,6 +215,7 @@
         assertSelector(message, "name not in ('Gromit', 'Bob', 'Cheddar')", true);
     }
 
+    @Test
     public void testIsNull() throws Exception {
         MockMessage message = createMessage();
 
@@ -208,6 +225,7 @@
         assertSelector(message, "name is null", false);
     }
 
+    @Test
     public void testLike() throws Exception {
         MockMessage message = createMessage();
         message.setStringProperty("modelClassId", "com.whatever.something.foo.bar");
@@ -237,6 +255,7 @@
      *
      * @throws Exception if an error occurs during the test.
      */
+    @Test
     public void testMatsHenricsonUseCases() throws Exception {
         MockMessage message = createMessage();
         assertSelector(message, "SessionserverId=1870414179", false);
@@ -259,6 +278,7 @@
     }
 
     @SuppressWarnings("unused")
+    @Test
     public void testFloatComparisons() throws Exception {
         MockMessage message = createMessage();
 
@@ -308,11 +328,13 @@
         assertSelector(message, "4E-10 < 5E-10", true);
     }
 
+    @Test
     public void testStringQuoteParsing() throws Exception {
         MockMessage message = createMessage();
         assertSelector(message, "quote = '''In God We Trust'''", true);
     }
 
+    @Test
     public void testLikeComparisons() throws Exception {
         MockMessage message = createMessage();
 
@@ -334,6 +356,7 @@
         assertSelector(message, "punctuation LIKE '!#$&()*+,-./:;<=>?@[\\]^`{|}~'", true);
     }
 
+    @Test
     public void testInvalidSelector() throws Exception {
         MockMessage message = createMessage();
         assertInvalidSelector(message, "3+5");
@@ -343,6 +366,7 @@
         assertInvalidSelector(message, "a = 1 AMD  b = 2");
     }
 
+    @Test
     public void testHyphenatedProperty() throws Exception {
         MockMessage message = createMessage();
         message.setStringProperty("hyphenated-prop", "val");
@@ -386,9 +410,9 @@
 
     protected void assertSelector(MockMessage message, String text, boolean expected) throws FilterException {
         BooleanExpression selector = SelectorParser.parse(text);
-        assertTrue("Created a valid selector", selector != null);
+        assertTrue(selector != null, "Created a valid selector");
         boolean value = selector.matches(message);
-        assertEquals("Selector for: " + text, expected, value);
+        assertEquals(expected, value, "Selector for: " + text);
     }
 
     protected MockMessage createMessage(String subject) {
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsQueueSessionClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsQueueSessionClosedTest.java
index 8c3c9ef..3b15c58 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsQueueSessionClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsQueueSessionClosedTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.qpid.jms.session;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.Queue;
 import jakarta.jms.QueueConnection;
 import jakarta.jms.QueueReceiver;
@@ -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 behaviour after a QueueSession is closed.
@@ -40,7 +44,7 @@
         connection = createQueueConnectionToMockProvider();
 
         session = ((QueueConnection) connection).createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue destination = session.createQueue(_testName.getMethodName());
+        Queue destination = session.createQueue(_testMethodName);
 
         sender = session.createSender(destination);
         receiver = session.createReceiver(destination);
@@ -50,37 +54,46 @@
     }
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         createTestResources();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testSessionCloseAgain() throws Exception {
         // Close it again
         session.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testReceiverCloseAgain() throws Exception {
         // Close it again (closing the session should have closed it already).
         receiver.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testSenderCloseAgain() throws Exception {
         // Close it again (closing the session should have closed it already).
         sender.close();
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testReceiverGetQueueFails() throws Exception {
-        receiver.getQueue();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            receiver.getQueue();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testSenderGetQueueFails() throws Exception {
-        sender.getQueue();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            sender.getQueue();
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsQueueSessionTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsQueueSessionTest.java
index c89f709..49825c7 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsQueueSessionTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsQueueSessionTest.java
@@ -16,7 +16,8 @@
  */
 package org.apache.qpid.jms.session;
 
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import jakarta.jms.IllegalStateException;
 import jakarta.jms.JMSException;
@@ -27,8 +28,10 @@
 import org.apache.qpid.jms.JmsQueue;
 import org.apache.qpid.jms.JmsQueueSession;
 import org.apache.qpid.jms.JmsTopic;
-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 contract of JmsQueueSession against JMS Spec requirements.
@@ -40,78 +43,105 @@
     private final JmsQueue queue = new JmsQueue();
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         queueConnection = createQueueConnectionToMockProvider();
         queueConnection.start();
 
         queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerToTopic() throws JMSException {
-        queueSession.createConsumer(topic);
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createConsumer(topic);
+        });
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateReceiver() throws JMSException {
         assertNotNull(queueSession.createReceiver(queue));
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateReceiverWithSelector() throws JMSException {
         assertNotNull(queueSession.createReceiver(queue, "color = red"));
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerToQueue() throws JMSException {
         assertNotNull(queueSession.createConsumer(queue));
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerWithSelector() throws JMSException {
-        queueSession.createConsumer(topic, "color = red");
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createConsumer(topic, "color = red");
+        });
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerToQueueWithSelector() throws JMSException {
         assertNotNull(queueSession.createConsumer(queue, "color = red"));
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerWithSelectorNoLocal() throws JMSException {
-        queueSession.createConsumer(topic, "color = red", false);
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createConsumer(topic, "color = red", false);
+        });
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerToQueueWithSelectorNoLocal() throws JMSException {
         assertNotNull(queueSession.createConsumer(queue, "color = red", false));
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateSubscriber() throws JMSException {
-        ((JmsQueueSession) queueSession).createSubscriber(topic);
+        assertThrows(IllegalStateException.class, () -> {
+            ((JmsQueueSession) queueSession).createSubscriber(topic);
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateSubscriberSelector() throws JMSException {
-        ((JmsQueueSession) queueSession).createSubscriber(topic, "color = red", false);
+        assertThrows(IllegalStateException.class, () -> {
+            ((JmsQueueSession) queueSession).createSubscriber(topic, "color = red", false);
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateProducerToTopic() throws JMSException {
-        queueSession.createProducer(topic);
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createProducer(topic);
+        });
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateProducerToQueue() throws JMSException {
         assertNotNull(queueSession.createProducer(queue));
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateTopicPublisher() throws JMSException {
-        ((JmsQueueSession) queueSession).createPublisher(topic);
+        assertThrows(IllegalStateException.class, () -> {
+            ((JmsQueueSession) queueSession).createPublisher(topic);
+        });
     }
 
     /**
@@ -124,44 +154,68 @@
      *
      * @throws JMSException if an error occurs during the test.
      */
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableSubscriberOnQueueSession() throws JMSException {
-        queueSession.createDurableSubscriber(topic, "subscriptionName");
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createDurableSubscriber(topic, "subscriptionName");
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableSubscriberWithSelectorOnQueueSession() throws JMSException {
-        queueSession.createDurableSubscriber(topic, "subscriptionName", "color = red", false);
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createDurableSubscriber(topic, "subscriptionName", "color = red", false);
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableConsumerOnQueueSession() throws JMSException {
-        queueSession.createDurableConsumer(topic, "subscriptionName");
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createDurableConsumer(topic, "subscriptionName");
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableConsumerWithSelectorOnQueueSession() throws JMSException {
-        queueSession.createDurableConsumer(topic, "subscriptionName", "color = red", false);
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createDurableConsumer(topic, "subscriptionName", "color = red", false);
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateSharedConsumerOnQueueSession() throws JMSException {
-        queueSession.createSharedConsumer(topic, "subscriptionName");
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createSharedConsumer(topic, "subscriptionName");
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateSharedConsumerWithSelectorOnQueueSession() throws JMSException {
-        queueSession.createSharedConsumer(topic, "subscriptionName", "color = red");
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createSharedConsumer(topic, "subscriptionName", "color = red");
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateSharedDurableConsumerOnQueueSession() throws JMSException {
-        queueSession.createSharedDurableConsumer(topic, "subscriptionName");
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createSharedDurableConsumer(topic, "subscriptionName");
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateSharedDurableConsumerWithSelectorOnQueueSession() throws JMSException {
-        queueSession.createSharedConsumer(topic, "subscriptionName", "color = red");
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createSharedConsumer(topic, "subscriptionName", "color = red");
+        });
     }
 
     /**
@@ -174,9 +228,12 @@
      *
      * @throws JMSException if an error occurs during the test.
      */
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateTemporaryTopicOnQueueSession() throws JMSException {
-        queueSession.createTemporaryTopic();
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createTemporaryTopic();
+        });
     }
 
     /**
@@ -189,9 +246,12 @@
      *
      * @throws JMSException if an error occurs during the test.
      */
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateTopicOnQueueSession() throws JMSException {
-        queueSession.createTopic("test-topic");
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.createTopic("test-topic");
+        });
     }
 
     /**
@@ -204,8 +264,11 @@
      *
      * @throws JMSException if an error occurs during the test.
      */
-    @Test(timeout = 30000, expected=IllegalStateException.class)
-    public void testUnsubscribeOnQueueSession() throws JMSException  {
-        queueSession.unsubscribe("subscriptionName");
+    @Test
+    @Timeout(30)
+    public void testUnsubscribeOnQueueSession() throws JMSException {
+        assertThrows(IllegalStateException.class, () -> {
+            queueSession.unsubscribe("subscriptionName");
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionClosedTest.java
index 26124ad..1fd5c12 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionClosedTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.qpid.jms.session;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.Destination;
 import jakarta.jms.JMSException;
 import jakarta.jms.Message;
@@ -27,8 +29,10 @@
 import jakarta.jms.Topic;
 
 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 behavior after a Session is closed.
@@ -42,214 +46,314 @@
     protected void createTestResources() throws Exception {
         connection = createConnectionToMockProvider();
         session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue destination = session.createQueue(_testName.getMethodName());
+        Queue destination = session.createQueue(_testMethodName);
         sender = session.createProducer(destination);
         receiver = session.createConsumer(destination);
         session.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)
+    @Test
+    @Timeout(30)
     public void testSessionCloseAgain() throws Exception {
         session.close();
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateMessageFails() throws Exception {
-        session.createMessage();
+        assertThrows(JMSException.class, () -> {
+            session.createMessage();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateTextMessageFails() throws Exception {
-        session.createTextMessage();
+        assertThrows(JMSException.class, () -> {
+            session.createTextMessage();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateTextMessageWithTextFails() throws Exception {
-        session.createTextMessage("TEST");
+        assertThrows(JMSException.class, () -> {
+            session.createTextMessage("TEST");
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateMapMessageFails() throws Exception {
-        session.createMapMessage();
+        assertThrows(JMSException.class, () -> {
+            session.createMapMessage();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateStreamMessageFails() throws Exception {
-        session.createStreamMessage();
+        assertThrows(JMSException.class, () -> {
+            session.createStreamMessage();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateBytesMessageFails() throws Exception {
-        session.createBytesMessage();
+        assertThrows(JMSException.class, () -> {
+            session.createBytesMessage();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateObjectMessageFails() throws Exception {
-        session.createObjectMessage();
+        assertThrows(JMSException.class, () -> {
+            session.createObjectMessage();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateObjectMessageWithObjectFails() throws Exception {
-        session.createObjectMessage("TEST");
+        assertThrows(JMSException.class, () -> {
+            session.createObjectMessage("TEST");
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetTransactedFails() throws Exception {
-        session.getTransacted();
+        assertThrows(JMSException.class, () -> {
+            session.getTransacted();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetAcknowledgeModeFails() throws Exception {
-        session.getAcknowledgeMode();
+        assertThrows(JMSException.class, () -> {
+            session.getAcknowledgeMode();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCommitFails() throws Exception {
-        session.commit();
+        assertThrows(JMSException.class, () -> {
+            session.commit();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testRollbackFails() throws Exception {
-        session.rollback();
+        assertThrows(JMSException.class, () -> {
+            session.rollback();
+        });
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCloseDoesNotFail() throws Exception {
         session.close();
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testRecoverFails() throws Exception {
-        session.recover();
+        assertThrows(JMSException.class, () -> {
+            session.recover();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testGetMessageListenerFails() throws Exception {
-        session.getMessageListener();
+        assertThrows(JMSException.class, () -> {
+            session.getMessageListener();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testSetMessageListenerFails() throws Exception {
-        MessageListener listener = new MessageListener() {
-            @Override
-            public void onMessage(Message message) {
-            }
-        };
-        session.setMessageListener(listener);
+        assertThrows(JMSException.class, () -> {
+            MessageListener listener = new MessageListener() {
+                @Override
+                public void onMessage(Message message) {
+                }
+            };
+            session.setMessageListener(listener);
+        });
     }
 
-    @Test(timeout=30000, expected=RuntimeException.class)
+    @Test
+    @Timeout(30)
     public void testRunFails() throws Exception {
-        session.run();
+        assertThrows(RuntimeException.class, () -> {
+            session.run();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateProducerFails() throws Exception {
-        Destination destination = session.createQueue("test");
-        session.createProducer(destination);
+        assertThrows(JMSException.class, () -> {
+            Destination destination = session.createQueue("test");
+            session.createProducer(destination);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerDestinatioFails() throws Exception {
-        Destination destination = session.createQueue("test");
-        session.createConsumer(destination);
+        assertThrows(JMSException.class, () -> {
+            Destination destination = session.createQueue("test");
+            session.createConsumer(destination);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerDestinatioSelectorFails() throws Exception {
-        Destination destination = session.createQueue("test");
-        session.createConsumer(destination, "a = b");
+        assertThrows(JMSException.class, () -> {
+            Destination destination = session.createQueue("test");
+            session.createConsumer(destination, "a = b");
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerDestinatioSelectorBooleanFails() throws Exception {
-        Destination destination = session.createQueue("test");
-        session.createConsumer(destination, "a = b", true);
+        assertThrows(JMSException.class, () -> {
+            Destination destination = session.createQueue("test");
+            session.createConsumer(destination, "a = b", true);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateQueueFails() throws Exception {
-        session.createQueue("TEST");
+        assertThrows(JMSException.class, () -> {
+            session.createQueue("TEST");
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateTopicFails() throws Exception {
-        session.createTopic("TEST");
+        assertThrows(JMSException.class, () -> {
+            session.createTopic("TEST");
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateTemporaryQueueFails() throws Exception {
-        session.createTemporaryQueue();
+        assertThrows(JMSException.class, () -> {
+            session.createTemporaryQueue();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateTemporaryTopicFails() throws Exception {
-        session.createTemporaryQueue();
+        assertThrows(JMSException.class, () -> {
+            session.createTemporaryQueue();
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableSubscriberFails() throws Exception {
-        Topic destination = session.createTopic("TEST");
-        session.createDurableSubscriber(destination, "test");
+        assertThrows(JMSException.class, () -> {
+            Topic destination = session.createTopic("TEST");
+            session.createDurableSubscriber(destination, "test");
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableSubscriberSelectorBooleanFails() throws Exception {
-        Topic destination = session.createTopic("TEST");
-        session.createDurableSubscriber(destination, "test", "a = b", false);
+        assertThrows(JMSException.class, () -> {
+            Topic destination = session.createTopic("TEST");
+            session.createDurableSubscriber(destination, "test", "a = b", false);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableConsumerSelectorBooleanFails() throws Exception {
-        Topic destination = session.createTopic("TEST");
-        session.createDurableConsumer(destination, "test", "a = b", false);
+        assertThrows(JMSException.class, () -> {
+            Topic destination = session.createTopic("TEST");
+            session.createDurableConsumer(destination, "test", "a = b", false);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateQueueBrowserFails() throws Exception {
-        Queue destination = session.createQueue("test");
-        session.createBrowser(destination);
+        assertThrows(JMSException.class, () -> {
+            Queue destination = session.createQueue("test");
+            session.createBrowser(destination);
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testCreateQueueBrowserWithSelectorFails() throws Exception {
-        Queue destination = session.createQueue("test");
-        session.createBrowser(destination, "a = b");
+        assertThrows(JMSException.class, () -> {
+            Queue destination = session.createQueue("test");
+            session.createBrowser(destination, "a = b");
+        });
     }
 
-    @Test(timeout=30000, expected=JMSException.class)
+    @Test
+    @Timeout(30)
     public void testUnsubscribeFails() throws Exception {
-        session.unsubscribe("test");
+        assertThrows(JMSException.class, () -> {
+            session.unsubscribe("test");
+        });
     }
 
     // --- Test effects on consumer/producer opened previously on the session ---
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testConsumerCloseAgain() throws Exception {
         // Close it again (closing the session should have closed it already).
         receiver.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testProducerCloseAgain() throws Exception {
         // Close it again (closing the session should have closed it already).
         sender.close();
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testConsumerGetMessageListenerFails() throws Exception {
-        receiver.getMessageListener();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            receiver.getMessageListener();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testProducerGetDestinationFails() throws Exception {
-        sender.getDestination();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            sender.getDestination();
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionFailedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionFailedTest.java
index 6f3c27a..a503b07 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionFailedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsSessionFailedTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.qpid.jms.session;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.concurrent.TimeUnit;
 
@@ -45,7 +45,7 @@
             public void onException(JMSException exception) {
             }
         });
-        Queue destination = session.createQueue(_testName.getMethodName());
+        Queue destination = session.createQueue(_testMethodName);
 
         sender = session.createProducer(destination);
         receiver = session.createConsumer(destination);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsTopicSessionClosedTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsTopicSessionClosedTest.java
index 5fff430..cb61d96 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsTopicSessionClosedTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsTopicSessionClosedTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.qpid.jms.session;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import jakarta.jms.Session;
 import jakarta.jms.Topic;
 import jakarta.jms.TopicConnection;
@@ -24,8 +26,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 behaviour after a TopicSession is closed.
@@ -41,7 +45,7 @@
         connection = createTopicConnectionToMockProvider();
 
         session = ((TopicConnection) connection).createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
-        destination = session.createTopic(_testName.getMethodName());
+        destination = session.createTopic(_testMethodName);
 
         publisher = session.createPublisher(destination);
         subscriber = session.createSubscriber(destination);
@@ -51,66 +55,93 @@
     }
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         createTestResources();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testSessionCloseAgain() throws Exception {
         session.close();
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreatePublisher() throws Exception {
-        session.createPublisher(destination);
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            session.createPublisher(destination);
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateSubscriber() throws Exception {
-        session.createSubscriber(destination);
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            session.createSubscriber(destination);
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateSubscriberWithSelector() throws Exception {
-        session.createSubscriber(destination, "color = blue", false);
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            session.createSubscriber(destination, "color = blue", false);
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableSubscriber() throws Exception {
-        session.createDurableSubscriber(destination, "foo");
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            session.createDurableSubscriber(destination, "foo");
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableSubscriberWithSelector() throws Exception {
-        session.createDurableSubscriber(destination, "foo", "color = blue", false);
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            session.createDurableSubscriber(destination, "foo", "color = blue", false);
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateDurableConsumerWithSelector() throws Exception {
-        session.createDurableConsumer(destination, "foo", "color = blue", false);
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            session.createDurableConsumer(destination, "foo", "color = blue", false);
+        });
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testSubscriberCloseAgain() throws Exception {
         // Close it again (closing the session should have closed it already).
         subscriber.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testPublisherCloseAgain() throws Exception {
         // Close it again (closing the session should have closed it already).
         publisher.close();
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testSubscriberGetTopicFails() throws Exception {
-        subscriber.getTopic();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            subscriber.getTopic();
+        });
     }
 
-    @Test(timeout=30000, expected=jakarta.jms.IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testPublisherGetTopicFails() throws Exception {
-        publisher.getTopic();
+        assertThrows(jakarta.jms.IllegalStateException.class, () -> {
+            publisher.getTopic();
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsTopicSessionTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsTopicSessionTest.java
index c6d5145..6d1293c 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsTopicSessionTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/session/JmsTopicSessionTest.java
@@ -16,7 +16,8 @@
  */
 package org.apache.qpid.jms.session;
 
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import jakarta.jms.IllegalStateException;
 import jakarta.jms.JMSException;
@@ -27,8 +28,10 @@
 import org.apache.qpid.jms.JmsQueue;
 import org.apache.qpid.jms.JmsTopic;
 import org.apache.qpid.jms.JmsTopicSession;
-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 contract of JmsTopicSession against JMS Spec requirements.
@@ -40,9 +43,9 @@
     private final JmsTopic topic = new JmsTopic();
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         topicConnection = createTopicConnectionToMockProvider();
         topicConnection.start();
@@ -60,52 +63,74 @@
      *
      * @throws JMSException if an error occurs during the test.
      */
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateBrowserOnTopicSession() throws JMSException {
-        topicSession.createBrowser(queue);
+        assertThrows(IllegalStateException.class, () -> {
+            topicSession.createBrowser(queue);
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateBrowserWithSelectorOnTopicSession() throws JMSException {
-        topicSession.createBrowser(queue, "color = red");
+        assertThrows(IllegalStateException.class, () -> {
+            topicSession.createBrowser(queue, "color = red");
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerToQueue() throws JMSException {
-        topicSession.createConsumer(queue);
+        assertThrows(IllegalStateException.class, () -> {
+            topicSession.createConsumer(queue);
+        });
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerToTopic() throws JMSException {
        assertNotNull(topicSession.createConsumer(topic));
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerWithSelectorToQueue() throws JMSException {
-        topicSession.createConsumer(queue, "color = red");
+        assertThrows(IllegalStateException.class, () -> {
+            topicSession.createConsumer(queue, "color = red");
+        });
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerWithSelectorToTopic() throws JMSException {
         assertNotNull(topicSession.createConsumer(topic, "color = red"));
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerWithSelectorNoLocalToQueue() throws JMSException {
-        topicSession.createConsumer(queue, "color = red", false);
+        assertThrows(IllegalStateException.class, () -> {
+            topicSession.createConsumer(queue, "color = red", false);
+        });
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateConsumerWithSelectorNoLocalToTopic() throws JMSException {
         assertNotNull(topicSession.createConsumer(topic, "color = red", false));
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateProducerToQueue() throws JMSException {
-        topicSession.createProducer(queue);
+        assertThrows(IllegalStateException.class, () -> {
+            topicSession.createProducer(queue);
+        });
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateProducerToTopic() throws JMSException {
         assertNotNull(topicSession.createProducer(topic));
     }
@@ -120,9 +145,12 @@
      *
      * @throws JMSException if an error occurs during the test.
      */
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateQueueOnTopicSession() throws JMSException {
-        topicSession.createQueue("test-queue");
+        assertThrows(IllegalStateException.class, () -> {
+            topicSession.createQueue("test-queue");
+        });
     }
 
     /**
@@ -135,23 +163,35 @@
      *
      * @throws JMSException if an error occurs during the test.
      */
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateTemporaryQueueOnTopicSession() throws JMSException {
-        topicSession.createTemporaryQueue();
+        assertThrows(IllegalStateException.class, () -> {
+            topicSession.createTemporaryQueue();
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateQueueReceiver() throws JMSException {
-        ((JmsTopicSession) topicSession).createReceiver(queue);
+        assertThrows(IllegalStateException.class, () -> {
+            ((JmsTopicSession) topicSession).createReceiver(queue);
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateQueueReceiverWithSelector() throws JMSException {
-        ((JmsTopicSession) topicSession).createReceiver(queue, "color = read");
+        assertThrows(IllegalStateException.class, () -> {
+            ((JmsTopicSession) topicSession).createReceiver(queue, "color = read");
+        });
     }
 
-    @Test(timeout = 30000, expected=IllegalStateException.class)
+    @Test
+    @Timeout(30)
     public void testCreateQueueSender() throws JMSException {
-        ((JmsTopicSession) topicSession).createSender(queue);
+        assertThrows(IllegalStateException.class, () -> {
+            ((JmsTopicSession) topicSession).createSender(queue);
+        });
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/QpidJmsTestCase.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/QpidJmsTestCase.java
index 8b3c929..fbe15d6 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/QpidJmsTestCase.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/QpidJmsTestCase.java
@@ -21,10 +21,9 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.rules.TestName;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -35,8 +34,7 @@
 
     private final Map<String, String> _propertiesSetForTest = new HashMap<String, String>();
 
-    @Rule
-    public TestName _testName = new TestName();
+    public String _testMethodName;
 
     /**
      * Set a System property for duration of this test only. The tearDown will guarantee to reset the property to its
@@ -83,18 +81,20 @@
         }
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws java.lang.Exception {
         _logger.info("========== tearDown " + getTestName() + " ==========");
         revertTestSystemProperties();
     }
 
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        _testMethodName = testInfo.getTestMethod().get().getName();
+
         _logger.info("========== start " + getTestName() + " ==========");
     }
 
     protected String getTestName() {
-        return getClass().getSimpleName() + "." + _testName.getMethodName();
+        return getClass().getSimpleName() + "." + _testMethodName;
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
index 7d0b41d..2906f74 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
@@ -33,6 +33,7 @@
 import static org.hamcrest.Matchers.lessThan;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
 import java.net.Socket;
@@ -127,7 +128,6 @@
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
 import org.hamcrest.Matchers;
-import org.junit.Assert;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -394,7 +394,7 @@
             message += System.lineSeparator() + "A *potential* reason, peer caught throwable: " + t;
         }
 
-        Assert.assertTrue(message, countedDownOk);
+        assertTrue(countedDownOk, message);
     }
 
     public boolean waitForAllHandlersToCompleteNoAssert(int timeoutMillis) throws InterruptedException
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/JmsNoopTracerFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/JmsNoopTracerFactoryTest.java
index 5ece910..5248bcc 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/JmsNoopTracerFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/JmsNoopTracerFactoryTest.java
@@ -16,12 +16,12 @@
  */
 package org.apache.qpid.jms.tracing;
 
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.URI;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class JmsNoopTracerFactoryTest {
 
@@ -29,14 +29,14 @@
     public void testCreate() {
         JmsTracer tracer  = JmsNoOpTracerFactory.create();
 
-        assertSame("Unexpected tracer instance", JmsNoOpTracer.INSTANCE, tracer);
+        assertSame(JmsNoOpTracer.INSTANCE, tracer, "Unexpected tracer instance");
     }
 
     @Test
     public void testCreateURIAndTypeName() throws Exception {
         JmsTracer tracer  = JmsNoOpTracerFactory.create(new URI("amqp://localhost:1234"), JmsNoOpTracerFactory.TYPE_NAME);
 
-        assertSame("Unexpected tracer instance", JmsNoOpTracer.INSTANCE, tracer);
+        assertSame(JmsNoOpTracer.INSTANCE, tracer, "Unexpected tracer instance");
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingIntegrationTest.java
index 728d136..c0e5517 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingIntegrationTest.java
@@ -27,12 +27,12 @@
 import static org.apache.qpid.jms.tracing.opentracing.OpenTracingTracer.SEND_SPAN_NAME;
 import static org.apache.qpid.jms.tracing.opentracing.OpenTracingTracer.STATE;
 import static org.hamcrest.Matchers.equalTo;
-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.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 java.util.Date;
 import java.util.HashMap;
@@ -74,7 +74,8 @@
 import org.apache.qpid.proton.amqp.Symbol;
 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 io.opentracing.Span;
 import io.opentracing.SpanContext;
@@ -89,7 +90,8 @@
 
 public class OpenTracingIntegrationTest extends QpidJmsTestCase {
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSend() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer));
@@ -133,41 +135,41 @@
             testPeer.waitForAllHandlersToComplete(2000);
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
+            assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
             Span sendSpan = finishedSpans.get(0);
-            assertEquals("Unexpected span class", MockSpan.class, sendSpan.getClass());
+            assertEquals(MockSpan.class, sendSpan.getClass(), "Unexpected span class");
             MockSpan sendMockSpan = (MockSpan) sendSpan;
 
-            assertEquals("Expected span to have no parent", 0, sendMockSpan.parentId());
-            assertEquals("Unexpected span operation name", SEND_SPAN_NAME, sendMockSpan.operationName());
+            assertEquals(0, sendMockSpan.parentId(), "Expected span to have no parent");
+            assertEquals(SEND_SPAN_NAME, sendMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags set on the completed span
             Map<String, Object> spanTags = sendMockSpan.tags();
-            assertFalse("Expected some tags", spanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", spanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(spanTags.isEmpty(), "Expected some tags");
+            assertFalse(spanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_PRODUCER, spanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify log set on the completed span
             List<LogEntry> entries = sendMockSpan.logEntries();
-            assertEquals("Expected 1 log entry: " + entries, 1, entries.size());
+            assertEquals(1, entries.size(), "Expected 1 log entry: " + entries);
 
             Map<String, ?> entryFields = entries.get(0).fields();
-            assertFalse("Expected some log entry fields", entryFields.isEmpty());
-            assertNotNull("Expected a state description", entryFields.get(STATE));
+            assertFalse(entryFields.isEmpty(), "Expected some log entry fields");
+            assertNotNull(entryFields.get(STATE), "Expected a state description");
             assertEquals(DELIVERY_SETTLED, entryFields.get(Fields.EVENT));
 
             // Verify the context sent on the wire matches the original span
             Object obj = msgAnnotationsMatcher.getReceivedAnnotation(Symbol.valueOf(ANNOTATION_KEY));
-            assertTrue("annotation was not a map", obj instanceof Map);
+            assertTrue(obj instanceof Map, "annotation was not a map");
             @SuppressWarnings("unchecked")
             Map<String, String> traceInfo = (Map<String, String>) obj;
-            assertFalse("Expected some content in map", traceInfo.isEmpty());
+            assertFalse(traceInfo.isEmpty(), "Expected some content in map");
 
             SpanContext extractedContext = mockTracer.extract(Format.Builtin.TEXT_MAP, new TextMapAdapter(traceInfo));
-            assertEquals("Unexpected context class", MockContext.class, extractedContext.getClass());
-            assertEquals("Extracted context spanId did not match original", sendMockSpan.context().spanId(), ((MockContext) extractedContext).spanId());
+            assertEquals(MockContext.class, extractedContext.getClass(), "Unexpected context class");
+            assertEquals(sendMockSpan.context().spanId(), ((MockContext) extractedContext).spanId(), "Extracted context spanId did not match original");
 
             testPeer.expectClose();
             connection.close();
@@ -176,7 +178,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendPreSettled() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer, "jms.presettlePolicy.presettleProducers=true"));
@@ -221,44 +224,44 @@
             // Await the pre-settled transfer completing (so we can get some details of it from the peer) and span finishing.
             testPeer.waitForAllHandlersToComplete(2000);
             boolean finishedSpanFound = Wait.waitFor(() -> !(mockTracer.finishedSpans().isEmpty()), 3000, 10);
-            assertTrue("Did not get finished span after send", finishedSpanFound);
+            assertTrue(finishedSpanFound, "Did not get finished span after send");
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
+            assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
             Span sendSpan = finishedSpans.get(0);
-            assertEquals("Unexpected span class", MockSpan.class, sendSpan.getClass());
+            assertEquals(MockSpan.class, sendSpan.getClass(), "Unexpected span class");
             MockSpan sendMockSpan = (MockSpan) sendSpan;
 
-            assertEquals("Expected span to have no parent", 0, sendMockSpan.parentId());
-            assertEquals("Unexpected span operation name", SEND_SPAN_NAME, sendMockSpan.operationName());
+            assertEquals(0, sendMockSpan.parentId(), "Expected span to have no parent");
+            assertEquals(SEND_SPAN_NAME, sendMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags set on the completed span
             Map<String, Object> spanTags = sendMockSpan.tags();
-            assertFalse("Expected some tags", spanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", spanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(spanTags.isEmpty(), "Expected some tags");
+            assertFalse(spanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_PRODUCER, spanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify log set on the completed span
             List<LogEntry> entries = sendMockSpan.logEntries();
-            assertEquals("Expected 1 log entry: " + entries, 1, entries.size());
+            assertEquals(1, entries.size(), "Expected 1 log entry: " + entries);
 
             Map<String, ?> entryFields = entries.get(0).fields();
-            assertFalse("Expected some log entry fields", entryFields.isEmpty());
-            assertNotNull("Expected a state description", entryFields.get(STATE));
+            assertFalse(entryFields.isEmpty(), "Expected some log entry fields");
+            assertNotNull(entryFields.get(STATE), "Expected a state description");
             assertEquals(DELIVERY_SETTLED, entryFields.get(Fields.EVENT));
 
             // Verify the context sent on the wire matches the original span
             Object obj = msgAnnotationsMatcher.getReceivedAnnotation(Symbol.valueOf(ANNOTATION_KEY));
-            assertTrue("annotation was not a map", obj instanceof Map);
+            assertTrue(obj instanceof Map, "annotation was not a map");
             @SuppressWarnings("unchecked")
             Map<String, String> traceInfo = (Map<String, String>) obj;
-            assertFalse("Expected some content in map", traceInfo.isEmpty());
+            assertFalse(traceInfo.isEmpty(), "Expected some content in map");
 
             SpanContext extractedContext = mockTracer.extract(Format.Builtin.TEXT_MAP, new TextMapAdapter(traceInfo));
-            assertEquals("Unexpected context class", MockContext.class, extractedContext.getClass());
-            assertEquals("Extracted context spanId did not match original", sendMockSpan.context().spanId(), ((MockContext) extractedContext).spanId());
+            assertEquals(MockContext.class, extractedContext.getClass(), "Unexpected context class");
+            assertEquals(sendMockSpan.context().spanId(), ((MockContext) extractedContext).spanId(), "Extracted context spanId did not match original");
 
             testPeer.expectClose();
             connection.close();
@@ -267,7 +270,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceive() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer));
@@ -293,7 +297,7 @@
             Map<String,String> injected = new HashMap<>();
             MockSpan sendSpan = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected));
-            assertFalse("Expected inject to add values", injected.isEmpty());
+            assertFalse(injected.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations = new MessageAnnotationsDescribedType();
             msgAnnotations.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected);
@@ -308,32 +312,32 @@
             MessageConsumer messageConsumer = session.createConsumer(queue);
             Message msg = messageConsumer.receive(2000);
 
-            assertNotNull("Did not receive message as expected", msg);
-            assertNull("expected no active span", mockTracer.activeSpan());
+            assertNotNull(msg, "Did not receive message as expected");
+            assertNull(mockTracer.activeSpan(), "expected no active span");
 
             boolean finishedSpanFound = Wait.waitFor(() -> !(mockTracer.finishedSpans().isEmpty()), 3000, 10);
-            assertTrue("Did not get finished span after receive", finishedSpanFound);
+            assertTrue(finishedSpanFound, "Did not get finished span after receive");
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
+            assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
             Span deliverySpan = finishedSpans.get(0);
-            assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+            assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
             MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
-            assertEquals("Expected span to be child of the send span", sendSpan.context().spanId(), deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", RECEIVE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(sendSpan.context().spanId(), deliveryMockSpan.parentId(), "Expected span to be child of the send span");
+            assertEquals(RECEIVE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags set on the completed span
             Map<String, Object> spanTags = deliveryMockSpan.tags();
-            assertFalse("Expected some tags", spanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", spanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(spanTags.isEmpty(), "Expected some tags");
+            assertFalse(spanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, spanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify no log set on the completed span
             List<LogEntry> logEntries = deliveryMockSpan.logEntries();
-            assertTrue("Expected no log entry: " + logEntries, logEntries.isEmpty());
+            assertTrue(logEntries.isEmpty(), "Expected no log entry: " + logEntries);
 
             testPeer.expectClose();
             connection.close();
@@ -342,7 +346,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveBody() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer));
@@ -367,7 +372,7 @@
             Map<String,String> injected = new HashMap<>();
             MockSpan sendSpan = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected));
-            assertFalse("Expected inject to add values", injected.isEmpty());
+            assertFalse(injected.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations = new MessageAnnotationsDescribedType();
             msgAnnotations.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected);
@@ -383,32 +388,32 @@
 
             String body = consumer.receiveBody(String.class, 2000);
 
-            assertEquals("Did not receive message body as expected", msgContent, body);
-            assertNull("expected no active span", mockTracer.activeSpan());
+            assertEquals(msgContent, body, "Did not receive message body as expected");
+            assertNull(mockTracer.activeSpan(), "expected no active span");
 
             boolean finishedSpanFound = Wait.waitFor(() -> !(mockTracer.finishedSpans().isEmpty()), 3000, 10);
-            assertTrue("Did not get finished span after receiveBody", finishedSpanFound);
+            assertTrue(finishedSpanFound, "Did not get finished span after receiveBody");
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
+            assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
             Span deliverySpan = finishedSpans.get(0);
-            assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+            assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
             MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
-            assertEquals("Expected span to be child of the send span", sendSpan.context().spanId(), deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", RECEIVE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(sendSpan.context().spanId(), deliveryMockSpan.parentId(), "Expected span to be child of the send span");
+            assertEquals(RECEIVE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags set on the completed span
             Map<String, Object> spanTags = deliveryMockSpan.tags();
-            assertFalse("Expected some tags", spanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", spanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(spanTags.isEmpty(), "Expected some tags");
+            assertFalse(spanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, spanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify no log set on the completed span
             List<LogEntry> logEntries = deliveryMockSpan.logEntries();
-            assertTrue("Expected no log entry: " + logEntries, logEntries.isEmpty());
+            assertTrue(logEntries.isEmpty(), "Expected no log entry: " + logEntries);
 
             testPeer.expectEnd();
             testPeer.expectClose();
@@ -420,7 +425,8 @@
     }
 
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveWithoutTraceInfo() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer));
@@ -453,32 +459,32 @@
             MessageConsumer messageConsumer = session.createConsumer(queue);
             Message msg = messageConsumer.receive(2000);
 
-            assertNotNull("Did not receive message as expected", msg);
-            assertNull("expected no active span", mockTracer.activeSpan());
+            assertNotNull(msg, "Did not receive message as expected");
+            assertNull(mockTracer.activeSpan(), "expected no active span");
 
             boolean finishedSpanFound = Wait.waitFor(() -> !(mockTracer.finishedSpans().isEmpty()), 3000, 10);
-            assertTrue("Did not get finished span after receive", finishedSpanFound);
+            assertTrue(finishedSpanFound, "Did not get finished span after receive");
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
+            assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
             Span deliverySpan = finishedSpans.get(0);
-            assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+            assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
             MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
-            assertEquals("Expected span to have no parent as incoming message had no context", 0, deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", RECEIVE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(0, deliveryMockSpan.parentId(), "Expected span to have no parent as incoming message had no context");
+            assertEquals(RECEIVE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags set on the completed span
             Map<String, Object> spanTags = deliveryMockSpan.tags();
-            assertFalse("Expected some tags", spanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", spanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(spanTags.isEmpty(), "Expected some tags");
+            assertFalse(spanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, spanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify no log set on the completed span
             List<LogEntry> logEntries = deliveryMockSpan.logEntries();
-            assertTrue("Expected no log entry: " + logEntries, logEntries.isEmpty());
+            assertTrue(logEntries.isEmpty(), "Expected no log entry: " + logEntries);
 
             testPeer.expectClose();
             connection.close();
@@ -487,7 +493,8 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveWithExpiredMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer));
@@ -513,7 +520,7 @@
             Map<String,String> injected1 = new HashMap<>();
             MockSpan sendSpan1 = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan1.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected1));
-            assertFalse("Expected inject to add values", injected1.isEmpty());
+            assertFalse(injected1.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations1 = new MessageAnnotationsDescribedType();
             msgAnnotations1.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected1);
@@ -529,7 +536,7 @@
             Map<String,String> injected2 = new HashMap<>();
             MockSpan sendSpan2 = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan2.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected2));
-            assertFalse("Expected inject to add values", injected2.isEmpty());
+            assertFalse(injected2.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations2 = new MessageAnnotationsDescribedType();
             msgAnnotations2.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected2);
@@ -549,59 +556,59 @@
             MessageConsumer messageConsumer = session.createConsumer(queue);
             Message msg = messageConsumer.receive(3000);
 
-            assertNotNull("Message should have been received", msg);
+            assertNotNull(msg, "Message should have been received");
             assertTrue(msg instanceof TextMessage);
-            assertEquals("Unexpected message content", liveMsgContent, ((TextMessage)msg).getText());
+            assertEquals(liveMsgContent, ((TextMessage)msg).getText(), "Unexpected message content");
             assertNotEquals(expiredMsgContent, liveMsgContent);
 
-            assertNull("expected no active span", mockTracer.activeSpan());
+            assertNull(mockTracer.activeSpan(), "expected no active span");
 
             boolean finishedSpansFound = Wait.waitFor(() -> (mockTracer.finishedSpans().size() == 2), 3000, 10);
-            assertTrue("Did not get finished spans after receive", finishedSpansFound);
+            assertTrue(finishedSpansFound, "Did not get finished spans after receive");
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 2 finished spans: " + finishedSpans, 2, finishedSpans.size());
+            assertEquals(2, finishedSpans.size(), "Expected 2 finished spans: " + finishedSpans);
 
             Span expiredSpan = finishedSpans.get(0);
-            assertEquals("Unexpected span class", MockSpan.class, expiredSpan.getClass());
+            assertEquals(MockSpan.class, expiredSpan.getClass(), "Unexpected span class");
             MockSpan expiredMockSpan = (MockSpan) expiredSpan;
 
-            assertEquals("Expected expired message span to be child of the first send span", sendSpan1.context().spanId(), expiredMockSpan.parentId());
-            assertEquals("Unexpected span operation name", RECEIVE_SPAN_NAME, expiredMockSpan.operationName());
+            assertEquals(sendSpan1.context().spanId(), expiredMockSpan.parentId(), "Expected expired message span to be child of the first send span");
+            assertEquals(RECEIVE_SPAN_NAME, expiredMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags on the span for expired message
             Map<String, Object> expiredSpanTags = expiredMockSpan.tags();
-            assertFalse("Expected some tags", expiredSpanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", expiredSpanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(expiredSpanTags.isEmpty(), "Expected some tags");
+            assertFalse(expiredSpanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, expiredSpanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, expiredSpanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, expiredSpanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify log on the span for expired message
             List<LogEntry> expiredLogEntries = expiredMockSpan.logEntries();
-            assertEquals("Expected 1 log entry: " + expiredLogEntries, 1, expiredLogEntries.size());
+            assertEquals(1, expiredLogEntries.size(), "Expected 1 log entry: " + expiredLogEntries);
             Map<String, ?> entryFields = expiredLogEntries.get(0).fields();
-            assertFalse("Expected some log entry fields", entryFields.isEmpty());
+            assertFalse(entryFields.isEmpty(), "Expected some log entry fields");
             assertEquals(MESSAGE_EXPIRED, entryFields.get(Fields.EVENT));
 
             Span deliverySpan = finishedSpans.get(1);
-            assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+            assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
             MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
-            assertEquals("Expected delivery span to be child of the second send span", sendSpan2.context().spanId(), deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", RECEIVE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(sendSpan2.context().spanId(), deliveryMockSpan.parentId(), "Expected delivery span to be child of the second send span");
+            assertEquals(RECEIVE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags on the span for delivered message
             Map<String, Object> deliveredSpanTags = deliveryMockSpan.tags();
-            assertFalse("Expected some tags", deliveredSpanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", deliveredSpanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(deliveredSpanTags.isEmpty(), "Expected some tags");
+            assertFalse(deliveredSpanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, deliveredSpanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, deliveredSpanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, deliveredSpanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify no log on the span for delivered message
             List<LogEntry> deliveredLogEntries = deliveryMockSpan.logEntries();
-            assertTrue("Expected no log entry: " + deliveredLogEntries, deliveredLogEntries.isEmpty());
+            assertTrue(deliveredLogEntries.isEmpty(), "Expected no log entry: " + deliveredLogEntries);
 
             testPeer.expectClose();
             connection.close();
@@ -611,11 +618,12 @@
             sendSpan1.finish();
             sendSpan2.finish();
             finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 4 finished spans: " + finishedSpans, 4, finishedSpans.size());
+            assertEquals(4, finishedSpans.size(), "Expected 4 finished spans: " + finishedSpans);
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testReceiveWithRedeliveryPolicy() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer, "jms.redeliveryPolicy.maxRedeliveries=1"));
@@ -641,7 +649,7 @@
             Map<String,String> injected1 = new HashMap<>();
             MockSpan sendSpan1 = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan1.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected1));
-            assertFalse("Expected inject to add values", injected1.isEmpty());
+            assertFalse(injected1.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations1 = new MessageAnnotationsDescribedType();
             msgAnnotations1.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected1);
@@ -657,7 +665,7 @@
             Map<String,String> injected2 = new HashMap<>();
             MockSpan sendSpan2 = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan2.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected2));
-            assertFalse("Expected inject to add values", injected2.isEmpty());
+            assertFalse(injected2.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations2 = new MessageAnnotationsDescribedType();
             msgAnnotations2.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected2);
@@ -677,59 +685,59 @@
             MessageConsumer messageConsumer = session.createConsumer(queue);
             Message msg = messageConsumer.receive(3000);
 
-            assertNotNull("Message should have been received", msg);
+            assertNotNull(msg, "Message should have been received");
             assertTrue(msg instanceof TextMessage);
-            assertEquals("Unexpected message content", liveMsgContent, ((TextMessage)msg).getText());
+            assertEquals(liveMsgContent, ((TextMessage)msg).getText(), "Unexpected message content");
             assertNotEquals(redeliveredMsgContent, liveMsgContent);
 
-            assertNull("expected no active span", mockTracer.activeSpan());
+            assertNull(mockTracer.activeSpan(), "expected no active span");
 
             boolean finishedSpansFound = Wait.waitFor(() -> (mockTracer.finishedSpans().size() == 2), 3000, 10);
-            assertTrue("Did not get finished spans after receive", finishedSpansFound);
+            assertTrue(finishedSpansFound, "Did not get finished spans after receive");
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 2 finished spans: " + finishedSpans, 2, finishedSpans.size());
+            assertEquals(2, finishedSpans.size(), "Expected 2 finished spans: " + finishedSpans);
 
             Span redeliveredSpan = finishedSpans.get(0);
-            assertEquals("Unexpected span class", MockSpan.class, redeliveredSpan.getClass());
+            assertEquals(MockSpan.class, redeliveredSpan.getClass(), "Unexpected span class");
             MockSpan redeliveredMockSpan = (MockSpan) redeliveredSpan;
 
-            assertEquals("Expected redelivered message span to be child of the first send span", sendSpan1.context().spanId(), redeliveredMockSpan.parentId());
-            assertEquals("Unexpected span operation name", RECEIVE_SPAN_NAME, redeliveredMockSpan.operationName());
+            assertEquals(sendSpan1.context().spanId(), redeliveredMockSpan.parentId(), "Expected redelivered message span to be child of the first send span");
+            assertEquals(RECEIVE_SPAN_NAME, redeliveredMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags on the span for redelivered message
             Map<String, Object> redeliveredSpanTags = redeliveredMockSpan.tags();
-            assertFalse("Expected some tags", redeliveredSpanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", redeliveredSpanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(redeliveredSpanTags.isEmpty(), "Expected some tags");
+            assertFalse(redeliveredSpanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, redeliveredSpanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, redeliveredSpanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, redeliveredSpanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify log on the span for redelivered message
             List<LogEntry> redeliveredLogEntries = redeliveredMockSpan.logEntries();
-            assertEquals("Expected 1 log entry: " + redeliveredLogEntries, 1, redeliveredLogEntries.size());
+            assertEquals(1, redeliveredLogEntries.size(), "Expected 1 log entry: " + redeliveredLogEntries);
             Map<String, ?> entryFields = redeliveredLogEntries.get(0).fields();
-            assertFalse("Expected some log entry fields", entryFields.isEmpty());
+            assertFalse(entryFields.isEmpty(), "Expected some log entry fields");
             assertEquals(REDELIVERIES_EXCEEDED, entryFields.get(Fields.EVENT));
 
             Span deliverySpan = finishedSpans.get(1);
-            assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+            assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
             MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
-            assertEquals("Expected delivery span to be child of the second send span", sendSpan2.context().spanId(), deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", RECEIVE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(sendSpan2.context().spanId(), deliveryMockSpan.parentId(), "Expected delivery span to be child of the second send span");
+            assertEquals(RECEIVE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags on the span for delivered message
             Map<String, Object> deliveredSpanTags = deliveryMockSpan.tags();
-            assertFalse("Expected some tags", deliveredSpanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", deliveredSpanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(deliveredSpanTags.isEmpty(), "Expected some tags");
+            assertFalse(deliveredSpanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, deliveredSpanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, deliveredSpanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, deliveredSpanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify no log on the span for delivered message
             List<LogEntry> deliveredLogEntries = deliveryMockSpan.logEntries();
-            assertTrue("Expected no log entry: " + deliveredLogEntries, deliveredLogEntries.isEmpty());
+            assertTrue(deliveredLogEntries.isEmpty(), "Expected no log entry: " + deliveredLogEntries);
 
             testPeer.expectClose();
             connection.close();
@@ -739,11 +747,12 @@
             sendSpan1.finish();
             sendSpan2.finish();
             finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 4 finished spans: " + finishedSpans, 4, finishedSpans.size());
+            assertEquals(4, finishedSpans.size(), "Expected 4 finished spans: " + finishedSpans);
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testOnMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer));
@@ -769,7 +778,7 @@
             Map<String,String> injected = new HashMap<>();
             MockSpan sendSpan = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected));
-            assertFalse("Expected inject to add values", injected.isEmpty());
+            assertFalse(injected.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations = new MessageAnnotationsDescribedType();
             msgAnnotations.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected);
@@ -799,34 +808,34 @@
                 }
             });
 
-            assertTrue("onMessage did not run in timely fashion: " + throwableRef.get(), deliveryRun.await(3000, TimeUnit.MILLISECONDS));
+            assertTrue(deliveryRun.await(3000, TimeUnit.MILLISECONDS), "onMessage did not run in timely fashion: " + throwableRef.get());
 
             Span deliverySpan = activeSpanRef.get();
-            assertNotNull("expected an active span during onMessage", deliverySpan);
-            assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+            assertNotNull(deliverySpan, "expected an active span during onMessage");
+            assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
             MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
             boolean finishedSpanFound = Wait.waitFor(() -> !(mockTracer.finishedSpans().isEmpty()), 3000, 10);
-            assertTrue("Did not get finished span after onMessage", finishedSpanFound);
+            assertTrue(finishedSpanFound, "Did not get finished span after onMessage");
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
-            assertEquals("Unexpected finished span", deliverySpan, finishedSpans.get(0));
+            assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
+            assertEquals(deliverySpan, finishedSpans.get(0), "Unexpected finished span");
 
-            assertEquals("Expected span to be child of the send span", sendSpan.context().spanId(), deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(sendSpan.context().spanId(), deliveryMockSpan.parentId(), "Expected span to be child of the send span");
+            assertEquals(ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags set on the completed span
             Map<String, Object> spanTags = deliveryMockSpan.tags();
-            assertFalse("Expected some tags", spanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", spanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(spanTags.isEmpty(), "Expected some tags");
+            assertFalse(spanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, spanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify no log set on the completed span
             List<LogEntry> logEntries = deliveryMockSpan.logEntries();
-            assertTrue("Expected no log entry: " + logEntries, logEntries.isEmpty());
+            assertTrue(logEntries.isEmpty(), "Expected no log entry: " + logEntries);
 
             testPeer.expectClose();
             connection.close();
@@ -835,13 +844,14 @@
 
             sendSpan.finish();
             finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 2 finished spans: " + finishedSpans, 2, finishedSpans.size());
+            assertEquals(2, finishedSpans.size(), "Expected 2 finished spans: " + finishedSpans);
 
-            assertNull("Unexpected error during onMessage", throwableRef.get());
+            assertNull(throwableRef.get(), "Unexpected error during onMessage");
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testOnMessageWithoutTraceInfo() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer));
@@ -888,45 +898,46 @@
                 }
             });
 
-            assertTrue("onMessage did not run in timely fashion: " + throwableRef.get(), deliveryRun.await(3000, TimeUnit.MILLISECONDS));
+            assertTrue(deliveryRun.await(3000, TimeUnit.MILLISECONDS), "onMessage did not run in timely fashion: " + throwableRef.get());
 
             Span deliverySpan = activeSpanRef.get();
-            assertNotNull("expected an active span during onMessage", deliverySpan);
-            assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+            assertNotNull(deliverySpan, "expected an active span during onMessage");
+            assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
             MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
             boolean finishedSpanFound = Wait.waitFor(() -> !(mockTracer.finishedSpans().isEmpty()), 3000, 10);
-            assertTrue("Did not get finished span after onMessage", finishedSpanFound);
+            assertTrue(finishedSpanFound, "Did not get finished span after onMessage");
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
-            assertEquals("Unexpected finished span", deliverySpan, finishedSpans.get(0));
+            assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
+            assertEquals(deliverySpan, finishedSpans.get(0), "Unexpected finished span");
 
-            assertEquals("Expected span to have no parent as incoming message had no context", 0, deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(0, deliveryMockSpan.parentId(), "Expected span to have no parent as incoming message had no context");
+            assertEquals(ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags set on the completed span
             Map<String, Object> spanTags = deliveryMockSpan.tags();
-            assertFalse("Expected some tags", spanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", spanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(spanTags.isEmpty(), "Expected some tags");
+            assertFalse(spanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, spanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify no log set on the completed span
             List<LogEntry> logEntries = deliveryMockSpan.logEntries();
-            assertTrue("Expected no log entry: " + logEntries, logEntries.isEmpty());
+            assertTrue(logEntries.isEmpty(), "Expected no log entry: " + logEntries);
 
             testPeer.expectClose();
             connection.close();
 
             testPeer.waitForAllHandlersToComplete(2000);
 
-            assertNull("Unexpected error during onMessage", throwableRef.get());
+            assertNull(throwableRef.get(), "Unexpected error during onMessage");
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testOnMessageThrowingException() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer));
@@ -952,7 +963,7 @@
             Map<String,String> injected = new HashMap<>();
             MockSpan sendSpan = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected));
-            assertFalse("Expected inject to add values", injected.isEmpty());
+            assertFalse(injected.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations = new MessageAnnotationsDescribedType();
             msgAnnotations.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected);
@@ -985,43 +996,43 @@
                 }
             });
 
-            assertTrue("onMessage did not run in timely fashion: " + throwableRef.get(), deliveryRun.await(3000, TimeUnit.MILLISECONDS));
+            assertTrue(deliveryRun.await(3000, TimeUnit.MILLISECONDS), "onMessage did not run in timely fashion: " + throwableRef.get());
 
             Span deliverySpan = activeSpanRef.get();
-            assertNotNull("expected an active span during onMessage", deliverySpan);
-            assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+            assertNotNull(deliverySpan, "expected an active span during onMessage");
+            assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
             MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
             boolean finishedSpanFound = Wait.waitFor(() -> !(mockTracer.finishedSpans().isEmpty()), 3000, 10);
-            assertTrue("Did not get finished span after onMessage", finishedSpanFound);
+            assertTrue(finishedSpanFound, "Did not get finished span after onMessage");
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
-            assertEquals("Unexpected finished span", deliveryMockSpan, finishedSpans.get(0));
+            assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
+            assertEquals(deliveryMockSpan, finishedSpans.get(0), "Unexpected finished span");
 
-            assertEquals("Expected span to be child of the send span", sendSpan.context().spanId(), deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(sendSpan.context().spanId(), deliveryMockSpan.parentId(), "Expected span to be child of the send span");
+            assertEquals(ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags set on the completed span
             Map<String, Object> spanTags = deliveryMockSpan.tags();
-            assertFalse("Expected some tags", spanTags.isEmpty());
-            assertTrue("Expected error tag to be true", (Boolean) spanTags.get(Tags.ERROR.getKey()));
+            assertFalse(spanTags.isEmpty(), "Expected some tags");
+            assertTrue((Boolean) spanTags.get(Tags.ERROR.getKey()), "Expected error tag to be true");
             assertEquals(Tags.SPAN_KIND_CONSUMER, spanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify log set on the completed span
             List<LogEntry> logEntries = deliveryMockSpan.logEntries();
-            assertEquals("Expected 1 log entry: " + logEntries, 1, logEntries.size());
+            assertEquals(1, logEntries.size(), "Expected 1 log entry: " + logEntries);
 
             Map<String, ?> entryFields = logEntries.get(0).fields();
-            assertFalse("Expected some log entry fields", entryFields.isEmpty());
+            assertFalse(entryFields.isEmpty(), "Expected some log entry fields");
             assertEquals(ERROR_EVENT, entryFields.get(Fields.EVENT));
             Object messageDesc = entryFields.get(Fields.MESSAGE);
             assertTrue(messageDesc instanceof String);
             assertTrue(((String) messageDesc).contains("thrown from onMessage"));
             Object t = entryFields.get(Fields.ERROR_OBJECT);
-            assertNotNull("Expected error object to be set", t);
+            assertNotNull(t, "Expected error object to be set");
             assertTrue(t instanceof RuntimeException);
             assertTrue(exceptionMessage.equals(((RuntimeException) t).getMessage()));
 
@@ -1032,13 +1043,14 @@
 
             sendSpan.finish();
             finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 2 finished spans: " + finishedSpans, 2, finishedSpans.size());
+            assertEquals(2, finishedSpans.size(), "Expected 2 finished spans: " + finishedSpans);
 
-            assertNull("Unexpected error during onMessage", throwableRef.get());
+            assertNull(throwableRef.get(), "Unexpected error during onMessage");
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testOnMessageWithExpiredMessage() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer));
@@ -1064,7 +1076,7 @@
             Map<String,String> injected1 = new HashMap<>();
             MockSpan sendSpan1 = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan1.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected1));
-            assertFalse("Expected inject to add values", injected1.isEmpty());
+            assertFalse(injected1.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations1 = new MessageAnnotationsDescribedType();
             msgAnnotations1.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected1);
@@ -1080,7 +1092,7 @@
             Map<String,String> injected2 = new HashMap<>();
             MockSpan sendSpan2 = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan2.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected2));
-            assertFalse("Expected inject to add values", injected2.isEmpty());
+            assertFalse(injected2.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations2 = new MessageAnnotationsDescribedType();
             msgAnnotations2.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected2);
@@ -1115,59 +1127,59 @@
                 }
             });
 
-            assertTrue("onMessage did not run in timely fashion: " + throwableRef.get(), deliveryRun.await(3000, TimeUnit.MILLISECONDS));
+            assertTrue(deliveryRun.await(3000, TimeUnit.MILLISECONDS), "onMessage did not run in timely fashion: " + throwableRef.get());
 
             boolean finishedSpansFound = Wait.waitFor(() -> (mockTracer.finishedSpans().size() == 2), 3000, 10);
-            assertTrue("Did not get finished spans after receive", finishedSpansFound);
+            assertTrue(finishedSpansFound, "Did not get finished spans after receive");
 
             Span deliverySpan = activeSpanRef.get();
-            assertNotNull("expected an active span during onMessage", deliverySpan);
-            assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+            assertNotNull(deliverySpan, "expected an active span during onMessage");
+            assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
             MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 2 finished spans: " + finishedSpans, 2, finishedSpans.size());
+            assertEquals(2, finishedSpans.size(), "Expected 2 finished spans: " + finishedSpans);
 
-            assertEquals("Expected span to be child of the second send span", sendSpan2.context().spanId(), deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(sendSpan2.context().spanId(), deliveryMockSpan.parentId(), "Expected span to be child of the second send span");
+            assertEquals(ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             Span expiredSpan = finishedSpans.get(0);
-            assertEquals("Unexpected span class", MockSpan.class, expiredSpan.getClass());
+            assertEquals(MockSpan.class, expiredSpan.getClass(), "Unexpected span class");
             MockSpan expiredMockSpan = (MockSpan) expiredSpan;
 
-            assertEquals("Expected expired message span to be child of the first send span", sendSpan1.context().spanId(), expiredMockSpan.parentId());
-            assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, expiredMockSpan.operationName());
+            assertEquals(sendSpan1.context().spanId(), expiredMockSpan.parentId(), "Expected expired message span to be child of the first send span");
+            assertEquals(ONMESSAGE_SPAN_NAME, expiredMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags on the span for expired message
             Map<String, Object> expiredSpanTags = expiredMockSpan.tags();
-            assertFalse("Expected some tags", expiredSpanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", expiredSpanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(expiredSpanTags.isEmpty(), "Expected some tags");
+            assertFalse(expiredSpanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, expiredSpanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, expiredSpanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, expiredSpanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify log on the span for expired message
             List<LogEntry> expiredLogEntries = expiredMockSpan.logEntries();
-            assertEquals("Expected 1 log entry: " + expiredLogEntries, 1, expiredLogEntries.size());
+            assertEquals(1, expiredLogEntries.size(), "Expected 1 log entry: " + expiredLogEntries);
             Map<String, ?> entryFields = expiredLogEntries.get(0).fields();
-            assertFalse("Expected some log entry fields", entryFields.isEmpty());
+            assertFalse(entryFields.isEmpty(), "Expected some log entry fields");
             assertEquals(MESSAGE_EXPIRED, entryFields.get(Fields.EVENT));
 
-            assertEquals("Unexpected second finished span", deliveryMockSpan, finishedSpans.get(1));
-            assertEquals("Expected delivery span to be child of the second send span", sendSpan2.context().spanId(), deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(deliveryMockSpan, finishedSpans.get(1), "Unexpected second finished span");
+            assertEquals(sendSpan2.context().spanId(), deliveryMockSpan.parentId(), "Expected delivery span to be child of the second send span");
+            assertEquals(ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags on the span for delivered message
             Map<String, Object> deliveredSpanTags = deliveryMockSpan.tags();
-            assertFalse("Expected some tags", deliveredSpanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", deliveredSpanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(deliveredSpanTags.isEmpty(), "Expected some tags");
+            assertFalse(deliveredSpanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, deliveredSpanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(queueName, deliveredSpanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, deliveredSpanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify no log on the span for delivered message
             List<LogEntry> deliveredLogEntries = deliveryMockSpan.logEntries();
-            assertTrue("Expected no log entry: " + deliveredLogEntries, deliveredLogEntries.isEmpty());
+            assertTrue(deliveredLogEntries.isEmpty(), "Expected no log entry: " + deliveredLogEntries);
 
             testPeer.expectClose();
             connection.close();
@@ -1177,13 +1189,14 @@
             sendSpan1.finish();
             sendSpan2.finish();
             finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 4 finished spans: " + finishedSpans, 4, finishedSpans.size());
+            assertEquals(4, finishedSpans.size(), "Expected 4 finished spans: " + finishedSpans);
 
-            assertNull("Unexpected error during onMessage", throwableRef.get());
+            assertNull(throwableRef.get(), "Unexpected error during onMessage");
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testOnMessageWithRedeliveryPolicy() throws Exception {
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
             JmsConnectionFactory factory = new JmsConnectionFactory(createPeerURI(testPeer, "jms.redeliveryPolicy.maxRedeliveries=1"));
@@ -1209,7 +1222,7 @@
             Map<String,String> injected1 = new HashMap<>();
             MockSpan sendSpan1 = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan1.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected1));
-            assertFalse("Expected inject to add values", injected1.isEmpty());
+            assertFalse(injected1.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations1 = new MessageAnnotationsDescribedType();
             msgAnnotations1.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected1);
@@ -1225,7 +1238,7 @@
             Map<String,String> injected2 = new HashMap<>();
             MockSpan sendSpan2 = mockTracer.buildSpan(SEND_SPAN_NAME).start();
             mockTracer.inject(sendSpan2.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected2));
-            assertFalse("Expected inject to add values", injected2.isEmpty());
+            assertFalse(injected2.isEmpty(), "Expected inject to add values");
 
             MessageAnnotationsDescribedType msgAnnotations2 = new MessageAnnotationsDescribedType();
             msgAnnotations2.setSymbolKeyedAnnotation(ANNOTATION_KEY, injected2);
@@ -1260,59 +1273,59 @@
                 }
             });
 
-            assertTrue("onMessage did not run in timely fashion: " + throwableRef.get(), deliveryRun.await(3000, TimeUnit.MILLISECONDS));
+            assertTrue(deliveryRun.await(3000, TimeUnit.MILLISECONDS), "onMessage did not run in timely fashion: " + throwableRef.get());
 
             boolean finishedSpansFound = Wait.waitFor(() -> (mockTracer.finishedSpans().size() == 2), 3000, 10);
-            assertTrue("Did not get finished spans after receive", finishedSpansFound);
+            assertTrue(finishedSpansFound, "Did not get finished spans after receive");
 
             Span deliverySpan = activeSpanRef.get();
-            assertNotNull("expected an active span during onMessage", deliverySpan);
-            assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+            assertNotNull(deliverySpan, "expected an active span during onMessage");
+            assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
             MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
             List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 2 finished spans: " + finishedSpans, 2, finishedSpans.size());
+            assertEquals(2, finishedSpans.size(), "Expected 2 finished spans: " + finishedSpans);
 
-            assertEquals("Expected span to be child of the second send span", sendSpan2.context().spanId(), deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(sendSpan2.context().spanId(), deliveryMockSpan.parentId(), "Expected span to be child of the second send span");
+            assertEquals(ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             Span redeliveredSpan = finishedSpans.get(0);
-            assertEquals("Unexpected span class", MockSpan.class, redeliveredSpan.getClass());
+            assertEquals(MockSpan.class, redeliveredSpan.getClass(), "Unexpected span class");
             MockSpan redeliveredMockSpan = (MockSpan) redeliveredSpan;
 
-            assertEquals("Expected redelivered message span to be child of the first send span", sendSpan1.context().spanId(), redeliveredMockSpan.parentId());
-            assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, redeliveredMockSpan.operationName());
+            assertEquals(sendSpan1.context().spanId(), redeliveredMockSpan.parentId(), "Expected redelivered message span to be child of the first send span");
+            assertEquals(ONMESSAGE_SPAN_NAME, redeliveredMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags on the span for redelivered message
             Map<String, Object> redeliveredSpanTags = redeliveredMockSpan.tags();
-            assertFalse("Expected some tags", redeliveredSpanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", redeliveredSpanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(redeliveredSpanTags.isEmpty(), "Expected some tags");
+            assertFalse(redeliveredSpanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, redeliveredSpanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(topicName, redeliveredSpanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, redeliveredSpanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify log on the span for redelivered message
             List<LogEntry> redeliveredLogEntries = redeliveredMockSpan.logEntries();
-            assertEquals("Expected 1 log entry: " + redeliveredLogEntries, 1, redeliveredLogEntries.size());
+            assertEquals(1, redeliveredLogEntries.size(), "Expected 1 log entry: " + redeliveredLogEntries);
             Map<String, ?> entryFields = redeliveredLogEntries.get(0).fields();
-            assertFalse("Expected some log entry fields", entryFields.isEmpty());
+            assertFalse(entryFields.isEmpty(), "Expected some log entry fields");
             assertEquals(REDELIVERIES_EXCEEDED, entryFields.get(Fields.EVENT));
 
-            assertEquals("Unexpected second finished span", deliveryMockSpan, finishedSpans.get(1));
-            assertEquals("Expected delivery span to be child of the second send span", sendSpan2.context().spanId(), deliveryMockSpan.parentId());
-            assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName());
+            assertEquals(deliveryMockSpan, finishedSpans.get(1), "Unexpected second finished span");
+            assertEquals(sendSpan2.context().spanId(), deliveryMockSpan.parentId(), "Expected delivery span to be child of the second send span");
+            assertEquals(ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
             // Verify tags on the span for delivered message
             Map<String, Object> deliveredSpanTags = deliveryMockSpan.tags();
-            assertFalse("Expected some tags", deliveredSpanTags.isEmpty());
-            assertFalse("Expected error tag not to be set", deliveredSpanTags.containsKey(Tags.ERROR.getKey()));
+            assertFalse(deliveredSpanTags.isEmpty(), "Expected some tags");
+            assertFalse(deliveredSpanTags.containsKey(Tags.ERROR.getKey()), "Expected error tag not to be set");
             assertEquals(Tags.SPAN_KIND_CONSUMER, deliveredSpanTags.get(Tags.SPAN_KIND.getKey()));
             assertEquals(topicName, deliveredSpanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
             assertEquals(COMPONENT, deliveredSpanTags.get(Tags.COMPONENT.getKey()));
 
             // Verify no log on the span for delivered message
             List<LogEntry> deliveredLogEntries = deliveryMockSpan.logEntries();
-            assertTrue("Expected no log entry: " + deliveredLogEntries, deliveredLogEntries.isEmpty());
+            assertTrue(deliveredLogEntries.isEmpty(), "Expected no log entry: " + deliveredLogEntries);
 
             testPeer.expectClose();
             connection.close();
@@ -1322,9 +1335,9 @@
             sendSpan1.finish();
             sendSpan2.finish();
             finishedSpans = mockTracer.finishedSpans();
-            assertEquals("Expected 4 finished spans: " + finishedSpans, 4, finishedSpans.size());
+            assertEquals(4, finishedSpans.size(), "Expected 4 finished spans: " + finishedSpans);
 
-            assertNull("Unexpected error during onMessage", throwableRef.get());
+            assertNull(throwableRef.get(), "Unexpected error during onMessage");
         }
     }
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingTracerFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingTracerFactoryTest.java
index 07a48f5..a7c10f1 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingTracerFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingTracerFactoryTest.java
@@ -16,13 +16,13 @@
  */
 package org.apache.qpid.jms.tracing.opentracing;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.URI;
 
 import org.apache.qpid.jms.tracing.JmsTracer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 import io.opentracing.Tracer;
@@ -35,7 +35,7 @@
         Tracer mock = Mockito.mock(Tracer.class);
         JmsTracer jmsTracer  = OpenTracingTracerFactory.create(mock);
 
-        assertEquals("Unexpected tracer instance type", OpenTracingTracer.class, jmsTracer.getClass());
+        assertEquals(OpenTracingTracer.class, jmsTracer.getClass(), "Unexpected tracer instance type");
 
         //Check it doesn't close underlying tracer
         Mockito.verifyNoInteractions(mock);
@@ -67,7 +67,7 @@
         // As used when requesting tracing via URI option
         JmsTracer jmsTracer  = OpenTracingTracerFactory.create(new URI("amqp://localhost:1234"), OpenTracingTracerFactory.TYPE_NAME);
 
-        assertEquals("Unexpected tracer instance type", OpenTracingTracer.class, jmsTracer.getClass());
+        assertEquals(OpenTracingTracer.class, jmsTracer.getClass(), "Unexpected tracer instance type");
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingTracerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingTracerTest.java
index e6a2d90..b41c047 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingTracerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/tracing/opentracing/OpenTracingTracerTest.java
@@ -27,11 +27,11 @@
 import static org.apache.qpid.jms.tracing.opentracing.OpenTracingTracer.SEND_SPAN_CONTEXT_KEY;
 import static org.apache.qpid.jms.tracing.opentracing.OpenTracingTracer.SEND_SPAN_NAME;
 import static org.apache.qpid.jms.tracing.opentracing.OpenTracingTracer.STATE;
-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.HashMap;
 import java.util.List;
@@ -41,9 +41,9 @@
 import org.apache.qpid.jms.tracing.JmsTracer;
 import org.apache.qpid.jms.tracing.JmsTracer.DeliveryOutcome;
 import org.apache.qpid.jms.tracing.TraceableMessage;
-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.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.Mockito;
@@ -70,12 +70,12 @@
     private ArgumentCaptor<Map<String, String>> annotationMapCaptor;
     private AutoCloseable closable;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         closable = MockitoAnnotations.openMocks(this);
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         closable.close();
     }
@@ -114,7 +114,7 @@
         // Start send operation
         jmsTracer.initSend(message, sendDestination);
 
-        assertNull("Did not expect active span to be present", mockTracer.activeSpan());
+        assertNull(mockTracer.activeSpan(), "Did not expect active span to be present");
 
         ArgumentCaptor<Span> sendSpanCapture = ArgumentCaptor.forClass(Span.class);
         Mockito.verify(message).setTracingContext(Mockito.eq(SEND_SPAN_CONTEXT_KEY), sendSpanCapture.capture());
@@ -122,18 +122,18 @@
         Mockito.verifyNoMoreInteractions(message);
 
         Span sendSpan = sendSpanCapture.getValue();
-        assertNotNull("expected a span from send operation", sendSpan);
+        assertNotNull(sendSpan, "expected a span from send operation");
         Mockito.when(message.getTracingContext(SEND_SPAN_CONTEXT_KEY)).thenReturn(sendSpan);
-        assertEquals("Unexpected span class", MockSpan.class, sendSpan.getClass());
+        assertEquals(MockSpan.class, sendSpan.getClass(), "Unexpected span class");
         MockSpan sendMockSpan = (MockSpan) sendSpan;
 
-        assertEquals("Unexpected span operation name", SEND_SPAN_NAME, sendMockSpan.operationName());
+        assertEquals(SEND_SPAN_NAME, sendMockSpan.operationName(), "Unexpected span operation name");
 
         Map<String, String> annotationValue = annotationMapCaptor.getValue();
-        assertNotNull("expected an annotation from the send operation", annotationValue);
+        assertNotNull(annotationValue, "expected an annotation from the send operation");
         Mockito.when(message.getTracingAnnotation(ANNOTATION_KEY)).thenReturn(annotationValue);
 
-        assertTrue("Expected no finished spans", mockTracer.finishedSpans().isEmpty());
+        assertTrue(mockTracer.finishedSpans().isEmpty(), "Expected no finished spans");
 
         // Finish the send operation
         jmsTracer.completeSend(message, sendOutcomeDescription);
@@ -142,21 +142,21 @@
         Mockito.verifyNoMoreInteractions(message);
 
         List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-        assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
-        assertEquals("Unexpected finished span", sendSpan, finishedSpans.get(0));
+        assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
+        assertEquals(sendSpan, finishedSpans.get(0), "Unexpected finished span");
 
         // Verify log set on the completed span
         List<LogEntry> entries = sendMockSpan.logEntries();
-        assertEquals("Expected 1 log entry: " + entries, 1, entries.size());
+        assertEquals(1, entries.size(), "Expected 1 log entry: " + entries);
 
         Map<String, ?> entryFields = entries.get(0).fields();
-        assertFalse("Expected some log entry fields", entryFields.isEmpty());
+        assertFalse(entryFields.isEmpty(), "Expected some log entry fields");
         assertEquals(sendOutcomeDescription, entryFields.get(STATE));
         assertEquals(DELIVERY_SETTLED, entryFields.get(Fields.EVENT));
 
         // Verify tags set on the span
         Map<String, Object> spanTags = sendMockSpan.tags();
-        assertFalse("Expected some tags", spanTags.isEmpty());
+        assertFalse(spanTags.isEmpty(), "Expected some tags");
         assertEquals(Tags.SPAN_KIND_PRODUCER, spanTags.get(Tags.SPAN_KIND.getKey()));
         assertEquals(sendDestination, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
         assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
@@ -182,7 +182,7 @@
         Mockito.verifyNoMoreInteractions(message);
 
         Span sendSpan = sendSpanCapture.getValue();
-        assertNotNull("expected a span from send operation", sendSpan);
+        assertNotNull(sendSpan, "expected a span from send operation");
         Mockito.when(message.getTracingContext(SEND_SPAN_CONTEXT_KEY)).thenReturn(sendSpan);
 
         // Finish the send operation
@@ -205,11 +205,11 @@
         MockSpan sendSpan = mockTracer.buildSpan(SEND_SPAN_NAME).start();
         mockTracer.inject(sendSpan.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected));
 
-        assertFalse("Expected inject to add values", injected.isEmpty());
+        assertFalse(injected.isEmpty(), "Expected inject to add values");
 
         Mockito.when(message.getTracingAnnotation(ANNOTATION_KEY)).thenReturn(injected);
 
-        assertTrue("Expected no finished spans", mockTracer.finishedSpans().isEmpty());
+        assertTrue(mockTracer.finishedSpans().isEmpty(), "Expected no finished spans");
 
         // Do the receive operation
         jmsTracer.syncReceive(message, consumerDestination, DeliveryOutcome.DELIVERED);
@@ -219,30 +219,30 @@
         Mockito.verify(message).setTracingContext(Mockito.eq(ARRIVING_SPAN_CTX_CONTEXT_KEY), sendSpanContextCapture.capture());
 
         SpanContext sendContext = sendSpanContextCapture.getValue();
-        assertNotNull("expected a span context from extract operation", sendContext);
-        assertEquals("Unexpected context class", MockContext.class, sendContext.getClass());
-        assertEquals("Extracted context spanId did not match original", sendSpan.context().spanId(), ((MockContext) sendContext).spanId());
+        assertNotNull(sendContext, "expected a span context from extract operation");
+        assertEquals(MockContext.class, sendContext.getClass(), "Unexpected context class");
+        assertEquals(sendSpan.context().spanId(), ((MockContext) sendContext).spanId(), "Extracted context spanId did not match original");
 
         ArgumentCaptor<Span> deliverySpanCapture = ArgumentCaptor.forClass(Span.class);
         Mockito.verify(message).setTracingContext(Mockito.eq(DELIVERY_SPAN_CONTEXT_KEY), deliverySpanCapture.capture());
         Mockito.verifyNoMoreInteractions(message);
 
         Span deliverySpan = deliverySpanCapture.getValue();
-        assertNotNull("expected a span from receive operation", deliverySpan);
-        assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+        assertNotNull(deliverySpan, "expected a span from receive operation");
+        assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
         MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
-        assertEquals("Unexpected span operation name", RECEIVE_SPAN_NAME, deliveryMockSpan.operationName());
+        assertEquals(RECEIVE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
         List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-        assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
-        assertEquals("Unexpected finished span", deliverySpan, finishedSpans.get(0));
+        assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
+        assertEquals(deliverySpan, finishedSpans.get(0), "Unexpected finished span");
 
-        assertEquals("Expected span to be child of 'send' span", sendSpan.context().spanId(), deliveryMockSpan.parentId());
+        assertEquals(sendSpan.context().spanId(), deliveryMockSpan.parentId(), "Expected span to be child of 'send' span");
 
         // Verify tags set on the span
         Map<String, Object> spanTags = deliveryMockSpan.tags();
-        assertFalse("Expected some tags", spanTags.isEmpty());
+        assertFalse(spanTags.isEmpty(), "Expected some tags");
         assertEquals(Tags.SPAN_KIND_CONSUMER, spanTags.get(Tags.SPAN_KIND.getKey()));
         assertEquals(consumerDestination, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
         assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
@@ -258,7 +258,7 @@
         TraceableMessage message = Mockito.mock(TraceableMessage.class);
         Mockito.when(message.getTracingAnnotation(ANNOTATION_KEY)).thenReturn(null);
 
-        assertTrue("Expected no finished spans", mockTracer.finishedSpans().isEmpty());
+        assertTrue(mockTracer.finishedSpans().isEmpty(), "Expected no finished spans");
 
         // Do the receive operation, verify behaviour after extract yields no context.
         jmsTracer.syncReceive(message, consumerDestination, DeliveryOutcome.DELIVERED);
@@ -269,21 +269,21 @@
         Mockito.verifyNoMoreInteractions(message);
 
         Span deliverySpan = deliverySpanCapture.getValue();
-        assertNotNull("expected a span from receive operation", deliverySpan);
-        assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+        assertNotNull(deliverySpan, "expected a span from receive operation");
+        assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
         MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
-        assertEquals("Unexpected span operation name", RECEIVE_SPAN_NAME, deliveryMockSpan.operationName());
+        assertEquals(RECEIVE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
         List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-        assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
-        assertEquals("Unexpected finished span", deliverySpan, finishedSpans.get(0));
+        assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
+        assertEquals(deliverySpan, finishedSpans.get(0), "Unexpected finished span");
 
-        assertEquals("Expected span to have no parent span", 0, deliveryMockSpan.parentId());
+        assertEquals(0, deliveryMockSpan.parentId(), "Expected span to have no parent span");
 
         // Verify tags set on the span
         Map<String, Object> spanTags = deliveryMockSpan.tags();
-        assertFalse("Expected some tags", spanTags.isEmpty());
+        assertFalse(spanTags.isEmpty(), "Expected some tags");
         assertEquals(Tags.SPAN_KIND_CONSUMER, spanTags.get(Tags.SPAN_KIND.getKey()));
         assertEquals(consumerDestination, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
         assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
@@ -302,11 +302,11 @@
         MockSpan sendSpan = mockTracer.buildSpan(SEND_SPAN_NAME).start();
         mockTracer.inject(sendSpan.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(injected));
 
-        assertFalse("Expected inject to add values", injected.isEmpty());
+        assertFalse(injected.isEmpty(), "Expected inject to add values");
 
         Mockito.when(message.getTracingAnnotation(ANNOTATION_KEY)).thenReturn(injected);
 
-        assertTrue("Expected no finished spans", mockTracer.finishedSpans().isEmpty());
+        assertTrue(mockTracer.finishedSpans().isEmpty(), "Expected no finished spans");
 
         // Do the onMessage init operation
         jmsTracer.asyncDeliveryInit(message, consumerDestination);
@@ -316,11 +316,11 @@
         Mockito.verify(message).setTracingContext(Mockito.eq(ARRIVING_SPAN_CTX_CONTEXT_KEY), sendSpanContextCapture.capture());
 
         SpanContext sendContext = sendSpanContextCapture.getValue();
-        assertNotNull("expected a span context from extract operation", sendContext);
-        assertEquals("Unexpected context class", MockContext.class, sendContext.getClass());
-        assertEquals("Extracted context did not match original", sendSpan.context().spanId(), ((MockContext) sendContext).spanId());
+        assertNotNull(sendContext, "expected a span context from extract operation");
+        assertEquals(MockContext.class, sendContext.getClass(), "Unexpected context class");
+        assertEquals(sendSpan.context().spanId(), ((MockContext) sendContext).spanId(), "Extracted context did not match original");
 
-        assertTrue("Expected no finished spans", mockTracer.finishedSpans().isEmpty());
+        assertTrue(mockTracer.finishedSpans().isEmpty(), "Expected no finished spans");
 
         ArgumentCaptor<Span> deliverySpanCapture = ArgumentCaptor.forClass(Span.class);
         ArgumentCaptor<Scope> deliveryScopeCapture = ArgumentCaptor.forClass(Scope.class);
@@ -328,23 +328,23 @@
         Mockito.verify(message).setTracingContext(Mockito.eq(ONMESSAGE_SCOPE_CONTEXT_KEY), deliveryScopeCapture.capture());
         Mockito.verifyNoMoreInteractions(message);
 
-        assertNotNull("Expected active span to be present", mockTracer.activeSpan());
+        assertNotNull(mockTracer.activeSpan(), "Expected active span to be present");
 
         Span deliverySpan = deliverySpanCapture.getValue();
-        assertNotNull("expected a span from onMessage operation", deliverySpan);
-        assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+        assertNotNull(deliverySpan, "expected a span from onMessage operation");
+        assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
         MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
-        assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName());
+        assertEquals(ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
         Scope deliveryScope = deliveryScopeCapture.getValue();
-        assertNotNull("expected a scope from onMessage operation", deliveryScope);
-        assertEquals("Unexpected scope class", ThreadLocalScope.class, deliveryScope.getClass());
+        assertNotNull(deliveryScope, "expected a scope from onMessage operation");
+        assertEquals(ThreadLocalScope.class, deliveryScope.getClass(), "Unexpected scope class");
 
         Mockito.when(message.getTracingContext(DELIVERY_SPAN_CONTEXT_KEY)).thenReturn(deliverySpan);
         Mockito.when(message.removeTracingContext(ONMESSAGE_SCOPE_CONTEXT_KEY)).thenReturn(deliveryScope);
 
-        assertTrue("Expected no finished spans", mockTracer.finishedSpans().isEmpty());
+        assertTrue(mockTracer.finishedSpans().isEmpty(), "Expected no finished spans");
 
         // Do the onMessage completion operation
         jmsTracer.asyncDeliveryComplete(message, DeliveryOutcome.DELIVERED, null);
@@ -354,14 +354,14 @@
         Mockito.verifyNoMoreInteractions(message);
 
         List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-        assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
-        assertEquals("Unexpected finished span", deliverySpan, finishedSpans.get(0));
+        assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
+        assertEquals(deliverySpan, finishedSpans.get(0), "Unexpected finished span");
 
-        assertEquals("Expected span to be child of 'send' span", sendSpan.context().spanId(), deliveryMockSpan.parentId());
+        assertEquals(sendSpan.context().spanId(), deliveryMockSpan.parentId(), "Expected span to be child of 'send' span");
 
         // Verify tags set on the span
         Map<String, Object> spanTags = deliveryMockSpan.tags();
-        assertFalse("Expected some tags", spanTags.isEmpty());
+        assertFalse(spanTags.isEmpty(), "Expected some tags");
         assertEquals(Tags.SPAN_KIND_CONSUMER, spanTags.get(Tags.SPAN_KIND.getKey()));
         assertEquals(consumerDestination, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
         assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
@@ -406,8 +406,8 @@
 
         Mockito.when(message.getTracingAnnotation(ANNOTATION_KEY)).thenReturn(null);
 
-        assertTrue("Expected no finished spans", mockTracer.finishedSpans().isEmpty());
-        assertNull("Did not expect active span to be present", mockTracer.activeSpan());
+        assertTrue(mockTracer.finishedSpans().isEmpty(), "Expected no finished spans");
+        assertNull(mockTracer.activeSpan(), "Did not expect active span to be present");
 
         // Do the onMessage init operation, verify behaviour after extract yields no context.
         jmsTracer.asyncDeliveryInit(message, consumerDestination);
@@ -419,23 +419,23 @@
         Mockito.verify(message).setTracingContext(Mockito.eq(ONMESSAGE_SCOPE_CONTEXT_KEY), deliveryScopeCapture.capture());
         Mockito.verifyNoMoreInteractions(message);
 
-        assertNotNull("Expected active span to be present", mockTracer.activeSpan());
+        assertNotNull(mockTracer.activeSpan(), "Expected active span to be present");
 
         Span deliverySpan = deliverySpanCapture.getValue();
-        assertNotNull("expected a span from onMessage operation", deliverySpan);
-        assertEquals("Unexpected span class", MockSpan.class, deliverySpan.getClass());
+        assertNotNull(deliverySpan, "expected a span from onMessage operation");
+        assertEquals(MockSpan.class, deliverySpan.getClass(), "Unexpected span class");
         MockSpan deliveryMockSpan = (MockSpan) deliverySpan;
 
-        assertEquals("Unexpected span operation name", ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName());
+        assertEquals(ONMESSAGE_SPAN_NAME, deliveryMockSpan.operationName(), "Unexpected span operation name");
 
         Scope deliveryScope = deliveryScopeCapture.getValue();
-        assertNotNull("expected a scope from onMessage operation", deliveryScope);
-        assertEquals("Unexpected scope class", ThreadLocalScope.class, deliveryScope.getClass());
+        assertNotNull(deliveryScope, "expected a scope from onMessage operation");
+        assertEquals(ThreadLocalScope.class, deliveryScope.getClass(), "Unexpected scope class");
 
         Mockito.when(message.getTracingContext(DELIVERY_SPAN_CONTEXT_KEY)).thenReturn(deliverySpan);
         Mockito.when(message.removeTracingContext(ONMESSAGE_SCOPE_CONTEXT_KEY)).thenReturn(deliveryScope);
 
-        assertTrue("Expected no finished spans", mockTracer.finishedSpans().isEmpty());
+        assertTrue(mockTracer.finishedSpans().isEmpty(), "Expected no finished spans");
 
         // Do the onMessage completion operation
         jmsTracer.asyncDeliveryComplete(message, DeliveryOutcome.DELIVERED, null);
@@ -445,14 +445,14 @@
         Mockito.verifyNoMoreInteractions(message);
 
         List<MockSpan> finishedSpans = mockTracer.finishedSpans();
-        assertEquals("Expected 1 finished span: " + finishedSpans, 1, finishedSpans.size());
-        assertEquals("Unexpected finished span", deliverySpan, finishedSpans.get(0));
+        assertEquals(1, finishedSpans.size(), "Expected 1 finished span: " + finishedSpans);
+        assertEquals(deliverySpan, finishedSpans.get(0), "Unexpected finished span");
 
-        assertEquals("Expected span to have no parent span", 0, deliveryMockSpan.parentId());
+        assertEquals(0, deliveryMockSpan.parentId(), "Expected span to have no parent span");
 
         // Verify tags set on the span
         Map<String, Object> spanTags = deliveryMockSpan.tags();
-        assertFalse("Expected some tags", spanTags.isEmpty());
+        assertFalse(spanTags.isEmpty(), "Expected some tags");
         assertEquals(Tags.SPAN_KIND_CONSUMER, spanTags.get(Tags.SPAN_KIND.getKey()));
         assertEquals(consumerDestination, spanTags.get(Tags.MESSAGE_BUS_DESTINATION.getKey()));
         assertEquals(COMPONENT, spanTags.get(Tags.COMPONENT.getKey()));
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/TransportOptionsTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/TransportOptionsTest.java
index d476e5b..5af6689 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/TransportOptionsTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/TransportOptionsTest.java
@@ -16,18 +16,18 @@
  */
 package org.apache.qpid.jms.transports;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNull;
-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.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.function.Supplier;
 
 import javax.net.ssl.SSLContext;
 
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 import io.netty.handler.proxy.ProxyHandler;
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/TransportSupportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/TransportSupportTest.java
index cac5c90..f40e0dd 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/TransportSupportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/TransportSupportTest.java
@@ -16,14 +16,15 @@
  */
 package org.apache.qpid.jms.transports;
 
-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.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.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.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 static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import java.io.IOException;
 import java.security.UnrecoverableKeyException;
@@ -35,7 +36,8 @@
 import javax.net.ssl.SSLEngine;
 
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 import io.netty.buffer.PooledByteBufAllocator;
 import io.netty.handler.ssl.OpenSsl;
@@ -84,8 +86,8 @@
         assertNotNull(engine);
 
         List<String> engineProtocols = Arrays.asList(engine.getEnabledProtocols());
-        assertFalse("SSLv3 should not be enabled by default", engineProtocols.contains("SSLv3"));
-        assertFalse("SSLv2Hello should not be enabled by default", engineProtocols.contains("SSLv2Hello"));
+        assertFalse(engineProtocols.contains("SSLv3"), "SSLv3 should not be enabled by default");
+        assertFalse(engineProtocols.contains("SSLv2Hello"), "SSLv2Hello should not be enabled by default");
     }
 
     @Test
@@ -102,7 +104,7 @@
         assertNotNull(engine);
 
         List<String> engineProtocols = Arrays.asList(engine.getEnabledProtocols());
-        assertFalse("SSLv3 should not be enabled by default", engineProtocols.contains("SSLv3"));
+        assertFalse(engineProtocols.contains("SSLv3"), "SSLv3 should not be enabled by default");
 
         // TODO - Netty is currently unable to disable OpenSSL SSLv2Hello so we are stuck with it for now.
         // assertFalse("SSLv2Hello should not be enabled by default", engineProtocols.contains("SSLv2Hello"));
@@ -172,7 +174,7 @@
         } catch (IllegalArgumentException iae) {
             // Expected in certain cases
             String message = iae.getMessage();
-            assertTrue("Unexpected message: " + message, message.contains("password can't be null"));
+            assertTrue(message.contains("password can't be null"), "Unexpected message: " + message);
         }
     }
 
@@ -192,76 +194,92 @@
         } catch (IllegalArgumentException iae) {
             // Expected in certain cases
             String message = iae.getMessage();
-            assertTrue("Unexpected message: " + message, message.contains("password can't be null"));
+            assertTrue(message.contains("password can't be null"), "Unexpected message: " + message);
         }
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateSslContextWrongKeyStorePasswordJDK() throws Exception {
-        TransportOptions options = createJksSslOptions();
-        options.setKeyStorePassword("wrong");
-        TransportSupport.createJdkSslContext(options);
+        assertThrows(IOException.class, () -> {
+            TransportOptions options = createJksSslOptions();
+            options.setKeyStorePassword("wrong");
+            TransportSupport.createJdkSslContext(options);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateSslContextWrongKeyStorePasswordOpenSSL() throws Exception {
-        assumeTrue(OpenSsl.isAvailable());
-        assumeTrue(OpenSsl.supportsKeyManagerFactory());
+        assertThrows(IOException.class, () -> {
+            assumeTrue(OpenSsl.isAvailable());
+            assumeTrue(OpenSsl.supportsKeyManagerFactory());
 
-        TransportOptions options = createJksSslOptions();
-        options.setKeyStorePassword("wrong");
-        TransportSupport.createOpenSslContext(options);
+            TransportOptions options = createJksSslOptions();
+            options.setKeyStorePassword("wrong");
+            TransportSupport.createOpenSslContext(options);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateSslContextBadPathToKeyStoreJDK() throws Exception {
-        TransportOptions options = createJksSslOptions();
-        options.setKeyStoreLocation(CLIENT_JKS_KEYSTORE + ".bad");
-        TransportSupport.createJdkSslContext(options);
+        assertThrows(IOException.class, () -> {
+            TransportOptions options = createJksSslOptions();
+            options.setKeyStoreLocation(CLIENT_JKS_KEYSTORE + ".bad");
+            TransportSupport.createJdkSslContext(options);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateSslContextBadPathToKeyStoreOpenSSL() throws Exception {
-        assumeTrue(OpenSsl.isAvailable());
-        assumeTrue(OpenSsl.supportsKeyManagerFactory());
+        assertThrows(IOException.class, () -> {
+            assumeTrue(OpenSsl.isAvailable());
+            assumeTrue(OpenSsl.supportsKeyManagerFactory());
 
-        TransportOptions options = createJksSslOptions();
-        options.setKeyStoreLocation(CLIENT_JKS_KEYSTORE + ".bad");
-        TransportSupport.createOpenSslContext(options);
+            TransportOptions options = createJksSslOptions();
+            options.setKeyStoreLocation(CLIENT_JKS_KEYSTORE + ".bad");
+            TransportSupport.createOpenSslContext(options);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateSslContextWrongTrustStorePasswordJDK() throws Exception {
-        TransportOptions options = createJksSslOptions();
-        options.setTrustStorePassword("wrong");
-        TransportSupport.createJdkSslContext(options);
+        assertThrows(IOException.class, () -> {
+            TransportOptions options = createJksSslOptions();
+            options.setTrustStorePassword("wrong");
+            TransportSupport.createJdkSslContext(options);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateSslContextWrongTrustStorePasswordOpenSSL() throws Exception {
-        assumeTrue(OpenSsl.isAvailable());
-        assumeTrue(OpenSsl.supportsKeyManagerFactory());
+        assertThrows(IOException.class, () -> {
+            assumeTrue(OpenSsl.isAvailable());
+            assumeTrue(OpenSsl.supportsKeyManagerFactory());
 
-        TransportOptions options = createJksSslOptions();
-        options.setTrustStorePassword("wrong");
-        TransportSupport.createOpenSslContext(options);
+            TransportOptions options = createJksSslOptions();
+            options.setTrustStorePassword("wrong");
+            TransportSupport.createOpenSslContext(options);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateSslContextBadPathToTrustStoreJDK() throws Exception {
-        TransportOptions options = createJksSslOptions();
-        options.setTrustStoreLocation(CLIENT_JKS_TRUSTSTORE + ".bad");
-        TransportSupport.createJdkSslContext(options);
+        assertThrows(IOException.class, () -> {
+            TransportOptions options = createJksSslOptions();
+            options.setTrustStoreLocation(CLIENT_JKS_TRUSTSTORE + ".bad");
+            TransportSupport.createJdkSslContext(options);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateSslContextBadPathToTrustStoreOpenSSL() throws Exception {
-        assumeTrue(OpenSsl.isAvailable());
-        assumeTrue(OpenSsl.supportsKeyManagerFactory());
+        assertThrows(IOException.class, () -> {
+            assumeTrue(OpenSsl.isAvailable());
+            assumeTrue(OpenSsl.supportsKeyManagerFactory());
 
-        TransportOptions options = createJksSslOptions();
-        options.setTrustStoreLocation(CLIENT_JKS_TRUSTSTORE + ".bad");
-        TransportSupport.createOpenSslContext(options);
+            TransportOptions options = createJksSslOptions();
+            options.setTrustStoreLocation(CLIENT_JKS_TRUSTSTORE + ".bad");
+            TransportSupport.createOpenSslContext(options);
+        });
     }
 
     @Test
@@ -308,21 +326,25 @@
         assertTrue(context.isClient());
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateSslContextIncorrectStoreTypeJDK() throws Exception {
-        TransportOptions options = createPkcs12SslOptions();
-        options.setStoreType(KEYSTORE_JCEKS_TYPE);
-        TransportSupport.createJdkSslContext(options);
+        assertThrows(IOException.class, () -> {
+            TransportOptions options = createPkcs12SslOptions();
+            options.setStoreType(KEYSTORE_JCEKS_TYPE);
+            TransportSupport.createJdkSslContext(options);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateSslContextIncorrectStoreTypeOpenSSL() throws Exception {
-        assumeTrue(OpenSsl.isAvailable());
-        assumeTrue(OpenSsl.supportsKeyManagerFactory());
+        assertThrows(IOException.class, () -> {
+            assumeTrue(OpenSsl.isAvailable());
+            assumeTrue(OpenSsl.supportsKeyManagerFactory());
 
-        TransportOptions options = createPkcs12SslOptions();
-        options.setStoreType(KEYSTORE_JCEKS_TYPE);
-        TransportSupport.createOpenSslContext(options);
+            TransportOptions options = createPkcs12SslOptions();
+            options.setStoreType(KEYSTORE_JCEKS_TYPE);
+            TransportSupport.createOpenSslContext(options);
+        });
     }
 
     @Test
@@ -366,7 +388,7 @@
         SSLEngine engine = TransportSupport.createJdkSslEngine(null, context, options);
         assertNotNull(engine);
 
-        assertArrayEquals("Enabled protocols not as expected", ENABLED_PROTOCOLS, engine.getEnabledProtocols());
+        assertArrayEquals(ENABLED_PROTOCOLS, engine.getEnabledProtocols(), "Enabled protocols not as expected");
     }
 
     @Test
@@ -382,7 +404,7 @@
         SSLEngine engine = TransportSupport.createOpenSslEngine(PooledByteBufAllocator.DEFAULT, null, context, options);
         assertNotNull(engine);
 
-        assertArrayEquals("Enabled protocols not as expected", ENABLED_OPENSSL_PROTOCOLS, engine.getEnabledProtocols());
+        assertArrayEquals(ENABLED_OPENSSL_PROTOCOLS, engine.getEnabledProtocols(), "Enabled protocols not as expected");
     }
 
     @Test
@@ -426,7 +448,7 @@
         SSLEngine engine = TransportSupport.createJdkSslEngine(null, context, options);
         assertNotNull(engine);
 
-        assertArrayEquals("Enabled protocols not as expected", ENABLED_PROTOCOLS, engine.getEnabledProtocols());
+        assertArrayEquals(ENABLED_PROTOCOLS, engine.getEnabledProtocols(), "Enabled protocols not as expected");
     }
 
     @Test
@@ -442,7 +464,7 @@
         SSLEngine engine = TransportSupport.createOpenSslEngine(PooledByteBufAllocator.DEFAULT, null, context, options);
         assertNotNull(engine);
 
-        assertArrayEquals("Enabled protocols not as expected", ENABLED_OPENSSL_PROTOCOLS, engine.getEnabledProtocols());
+        assertArrayEquals(ENABLED_OPENSSL_PROTOCOLS, engine.getEnabledProtocols(), "Enabled protocols not as expected");
     }
 
     @Test
@@ -451,7 +473,7 @@
         TransportOptions options = createJksSslOptions();
         SSLEngine directEngine = createSSLEngineDirectly(options);
         String[] protocols = directEngine.getEnabledProtocols();
-        assertTrue("There were no initial protocols to choose from!", protocols.length > 0);
+        assertTrue(protocols.length > 0, "There were no initial protocols to choose from!");
 
         // Pull out one to disable specifically
         String[] disabledProtocol = new String[] { protocols[protocols.length - 1] };
@@ -462,7 +484,7 @@
 
         // verify the option took effect
         assertNotNull(engine);
-        assertArrayEquals("Enabled protocols not as expected", trimmedProtocols, engine.getEnabledProtocols());
+        assertArrayEquals(trimmedProtocols, engine.getEnabledProtocols(), "Enabled protocols not as expected");
     }
 
     @Test
@@ -474,7 +496,7 @@
         TransportOptions options = createJksSslOptions();
         SSLEngine directEngine = createOpenSSLEngineDirectly(options);
         String[] protocols = directEngine.getEnabledProtocols();
-        assertTrue("There were no initial protocols to choose from!", protocols.length > 0);
+        assertTrue(protocols.length > 0, "There were no initial protocols to choose from!");
 
         // Pull out one to disable specifically
         String[] disabledProtocol = new String[] { protocols[protocols.length - 1] };
@@ -485,7 +507,7 @@
 
         // verify the option took effect
         assertNotNull(engine);
-        assertArrayEquals("Enabled protocols not as expected", trimmedProtocols, engine.getEnabledProtocols());
+        assertArrayEquals(trimmedProtocols, engine.getEnabledProtocols(), "Enabled protocols not as expected");
     }
 
     @Test
@@ -494,7 +516,7 @@
         TransportOptions options = createJksSslOptions();
         SSLEngine directEngine = createSSLEngineDirectly(options);
         String[] protocols = directEngine.getEnabledProtocols();
-        assumeTrue("Insufficient initial protocols to filter from: " + Arrays.toString(protocols) , protocols.length > 1);
+        assumeTrue(protocols.length > 1 , "Insufficient initial protocols to filter from: " + Arrays.toString(protocols));
 
         // Pull out two to enable, and one to disable specifically
         String protocol1 = protocols[0];
@@ -509,7 +531,7 @@
 
         // verify the option took effect, that the disabled protocols were removed from the enabled list.
         assertNotNull(engine);
-        assertArrayEquals("Enabled protocols not as expected", remainingProtocols, engine.getEnabledProtocols());
+        assertArrayEquals(remainingProtocols, engine.getEnabledProtocols(), "Enabled protocols not as expected");
     }
 
     @Test
@@ -521,7 +543,7 @@
         TransportOptions options = createJksSslOptions();
         SSLEngine directEngine = createOpenSSLEngineDirectly(options);
         String[] protocols = directEngine.getEnabledProtocols();
-        assumeTrue("Insufficient initial protocols to filter from: " + Arrays.toString(protocols) , protocols.length > 1);
+        assumeTrue(protocols.length > 1 , "Insufficient initial protocols to filter from: " + Arrays.toString(protocols));
 
         // Pull out two to enable, and one to disable specifically
         String protocol1 = protocols[0];
@@ -544,8 +566,8 @@
 
         // verify the option took effect, that the disabled protocols were removed from the enabled list.
         assertNotNull(engine);
-        assertEquals("Enabled protocols not as expected", remainingProtocolsList.size(), engine.getEnabledProtocols().length);
-        assertTrue("Enabled protocols not as expected", remainingProtocolsList.containsAll(Arrays.asList(engine.getEnabledProtocols())));
+        assertEquals(remainingProtocolsList.size(), engine.getEnabledProtocols().length, "Enabled protocols not as expected");
+        assertTrue(remainingProtocolsList.containsAll(Arrays.asList(engine.getEnabledProtocols())), "Enabled protocols not as expected");
     }
 
     @Test
@@ -554,7 +576,7 @@
         TransportOptions options = createJksSslOptions();
         SSLEngine directEngine = createSSLEngineDirectly(options);
         String[] ciphers = directEngine.getEnabledCipherSuites();
-        assertTrue("There were no initial ciphers to choose from!", ciphers.length > 0);
+        assertTrue(ciphers.length > 0, "There were no initial ciphers to choose from!");
 
         // Pull out one to enable specifically
         String cipher = ciphers[0];
@@ -565,7 +587,7 @@
 
         // verify the option took effect
         assertNotNull(engine);
-        assertArrayEquals("Enabled ciphers not as expected", enabledCipher, engine.getEnabledCipherSuites());
+        assertArrayEquals(enabledCipher, engine.getEnabledCipherSuites(), "Enabled ciphers not as expected");
     }
 
     @Test
@@ -577,7 +599,7 @@
         TransportOptions options = createJksSslOptions();
         SSLEngine directEngine = createOpenSSLEngineDirectly(options);
         String[] ciphers = directEngine.getEnabledCipherSuites();
-        assertTrue("There were no initial ciphers to choose from!", ciphers.length > 0);
+        assertTrue(ciphers.length > 0, "There were no initial ciphers to choose from!");
 
         // Pull out one to enable specifically
         String cipher = ciphers[0];
@@ -588,7 +610,7 @@
 
         // verify the option took effect
         assertNotNull(engine);
-        assertArrayEquals("Enabled ciphers not as expected", enabledCipher, engine.getEnabledCipherSuites());
+        assertArrayEquals(enabledCipher, engine.getEnabledCipherSuites(), "Enabled ciphers not as expected");
     }
 
     @Test
@@ -597,7 +619,7 @@
         TransportOptions options = createJksSslOptions();
         SSLEngine directEngine = createSSLEngineDirectly(options);
         String[] ciphers = directEngine.getEnabledCipherSuites();
-        assertTrue("There were no initial ciphers to choose from!", ciphers.length > 0);
+        assertTrue(ciphers.length > 0, "There were no initial ciphers to choose from!");
 
         // Pull out one to disable specifically
         String[] disabledCipher = new String[] { ciphers[ciphers.length - 1] };
@@ -608,7 +630,7 @@
 
         // verify the option took effect
         assertNotNull(engine);
-        assertArrayEquals("Enabled ciphers not as expected", trimmedCiphers, engine.getEnabledCipherSuites());
+        assertArrayEquals(trimmedCiphers, engine.getEnabledCipherSuites(), "Enabled ciphers not as expected");
     }
 
     @Test
@@ -620,7 +642,7 @@
         TransportOptions options = createJksSslOptions();
         SSLEngine directEngine = createOpenSSLEngineDirectly(options);
         String[] ciphers = directEngine.getEnabledCipherSuites();
-        assertTrue("There were no initial ciphers to choose from!", ciphers.length > 0);
+        assertTrue(ciphers.length > 0, "There were no initial ciphers to choose from!");
 
         // Pull out one to disable specifically
         String[] disabledCipher = new String[] { ciphers[ciphers.length - 1] };
@@ -631,7 +653,7 @@
 
         // verify the option took effect
         assertNotNull(engine);
-        assertArrayEquals("Enabled ciphers not as expected", trimmedCiphers, engine.getEnabledCipherSuites());
+        assertArrayEquals(trimmedCiphers, engine.getEnabledCipherSuites(), "Enabled ciphers not as expected");
     }
 
     @Test
@@ -640,7 +662,7 @@
         TransportOptions options = createJksSslOptions();
         SSLEngine directEngine = createSSLEngineDirectly(options);
         String[] ciphers = directEngine.getEnabledCipherSuites();
-        assertTrue("There werent enough initial ciphers to choose from!", ciphers.length > 1);
+        assertTrue(ciphers.length > 1, "There werent enough initial ciphers to choose from!");
 
         // Pull out two to enable, and one to disable specifically
         String cipher1 = ciphers[0];
@@ -655,7 +677,7 @@
 
         // verify the option took effect, that the disabled ciphers were removed from the enabled list.
         assertNotNull(engine);
-        assertArrayEquals("Enabled ciphers not as expected", remainingCipher, engine.getEnabledCipherSuites());
+        assertArrayEquals(remainingCipher, engine.getEnabledCipherSuites(), "Enabled ciphers not as expected");
     }
 
     @Test
@@ -667,7 +689,7 @@
         TransportOptions options = createJksSslOptions();
         SSLEngine directEngine = createOpenSSLEngineDirectly(options);
         String[] ciphers = directEngine.getEnabledCipherSuites();
-        assertTrue("There werent enough initial ciphers to choose from!", ciphers.length > 1);
+        assertTrue(ciphers.length > 1, "There werent enough initial ciphers to choose from!");
 
         // Pull out two to enable, and one to disable specifically
         String cipher1 = ciphers[0];
@@ -682,7 +704,7 @@
 
         // verify the option took effect, that the disabled ciphers were removed from the enabled list.
         assertNotNull(engine);
-        assertArrayEquals("Enabled ciphers not as expected", remainingCipher, engine.getEnabledCipherSuites());
+        assertArrayEquals(remainingCipher, engine.getEnabledCipherSuites(), "Enabled ciphers not as expected");
     }
 
     @Test
@@ -726,7 +748,7 @@
         SSLEngine engine = TransportSupport.createJdkSslEngine(null, context, options);
         assertNotNull(engine);
 
-        assertArrayEquals("Enabled protocols not as expected", ENABLED_PROTOCOLS, engine.getEnabledProtocols());
+        assertArrayEquals(ENABLED_PROTOCOLS, engine.getEnabledProtocols(), "Enabled protocols not as expected");
     }
 
     @Test
@@ -744,7 +766,7 @@
         SSLEngine engine = TransportSupport.createOpenSslEngine(PooledByteBufAllocator.DEFAULT, null, context, options);
         assertNotNull(engine);
 
-        assertArrayEquals("Enabled protocols not as expected", ENABLED_OPENSSL_PROTOCOLS, engine.getEnabledProtocols());
+        assertArrayEquals(ENABLED_OPENSSL_PROTOCOLS, engine.getEnabledProtocols(), "Enabled protocols not as expected");
     }
 
     @Test
@@ -837,7 +859,8 @@
         }
     }
 
-    @Test(timeout = 100000)
+    @Test
+    @Timeout(100)
     public void testIsOpenSSLPossible() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
@@ -850,7 +873,8 @@
         assertTrue(TransportSupport.isOpenSSLPossible(options));
     }
 
-    @Test(timeout = 100000)
+    @Test
+    @Timeout(100)
     public void testIsOpenSSLPossibleWhenHostNameVerificationConfigured() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
@@ -866,7 +890,8 @@
         assertTrue(TransportSupport.isOpenSSLPossible(options));
     }
 
-    @Test(timeout = 100000)
+    @Test
+    @Timeout(100)
     public void testIsOpenSSLPossibleWhenKeyAliasIsSpecified() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
@@ -879,7 +904,8 @@
         assertFalse(TransportSupport.isOpenSSLPossible(options));
     }
 
-    @Test(timeout = 100000)
+    @Test
+    @Timeout(100)
     public void testCreateSslHandlerJDK() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
@@ -892,7 +918,8 @@
         assertFalse(handler.engine() instanceof OpenSslEngine);
     }
 
-    @Test(timeout = 100000)
+    @Test
+    @Timeout(100)
     public void testCreateSslHandlerOpenSSL() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
@@ -905,7 +932,8 @@
         assertTrue(handler.engine() instanceof OpenSslEngine);
     }
 
-    @Test(timeout = 100000)
+    @Test
+    @Timeout(100)
     public void testCreateOpenSSLEngineFailsWhenAllocatorMissing() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/X509AliasKeyManagerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/X509AliasKeyManagerTest.java
index 418d73e..ae94aa8 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/X509AliasKeyManagerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/X509AliasKeyManagerTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.transports;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -32,7 +32,7 @@
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.X509ExtendedKeyManager;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class X509AliasKeyManagerTest {
 
@@ -55,7 +55,7 @@
 
         X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
 
-        assertEquals("Expected wrapper alias", wrapperAlias, wrapper.chooseClientAlias(new String[0], new Principal[0], new Socket()));
+        assertEquals(wrapperAlias, wrapper.chooseClientAlias(new String[0], new Principal[0], new Socket()), "Expected wrapper alias");
     }
 
     @Test
@@ -67,7 +67,7 @@
 
         X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
 
-        assertEquals("Expected wrapper alias", wrapperAlias, wrapper.chooseServerAlias("", new Principal[0], new Socket()));
+        assertEquals(wrapperAlias, wrapper.chooseServerAlias("", new Principal[0], new Socket()), "Expected wrapper alias");
     }
 
     @Test
@@ -80,7 +80,7 @@
 
         X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
 
-        assertSame("Different object returned", certs, wrapper.getCertificateChain(wrapperAlias));
+        assertSame(certs, wrapper.getCertificateChain(wrapperAlias), "Different object returned");
     }
 
     @Test
@@ -93,7 +93,7 @@
 
         X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
 
-        assertArrayEquals("Expected array containing only the wrapper alias", new String[] { wrapperAlias }, wrapper.getClientAliases("", new Principal[0]));
+        assertArrayEquals(new String[] { wrapperAlias }, wrapper.getClientAliases("", new Principal[0]), "Expected array containing only the wrapper alias");
     }
 
     @Test
@@ -106,7 +106,7 @@
 
         X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
 
-        assertArrayEquals("Expected array containing only the wrapper alias", new String[] { wrapperAlias }, wrapper.getServerAliases("", new Principal[0]));
+        assertArrayEquals(new String[] { wrapperAlias }, wrapper.getServerAliases("", new Principal[0]), "Expected array containing only the wrapper alias");
     }
 
     @Test
@@ -119,7 +119,7 @@
 
         X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
 
-        assertSame("Different object returned", mockKey, wrapper.getPrivateKey(wrapperAlias));
+        assertSame(mockKey, wrapper.getPrivateKey(wrapperAlias), "Different object returned");
     }
 
     @Test
@@ -131,7 +131,7 @@
 
         X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
 
-        assertEquals("Expected wrapper alias", wrapperAlias, wrapper.chooseEngineClientAlias(new String[0], new Principal[0], mock(SSLEngine.class)));
+        assertEquals(wrapperAlias, wrapper.chooseEngineClientAlias(new String[0], new Principal[0], mock(SSLEngine.class)), "Expected wrapper alias");
     }
 
     @Test
@@ -143,6 +143,6 @@
 
         X509ExtendedKeyManager wrapper = new X509AliasKeyManager(wrapperAlias, mock);
 
-        assertEquals("Expected wrapper alias", wrapperAlias, wrapper.chooseEngineServerAlias("", new Principal[0], mock(SSLEngine.class)));
+        assertEquals(wrapperAlias, wrapper.chooseEngineServerAlias("", new Principal[0], mock(SSLEngine.class)), "Expected wrapper alias");
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyOpenSslTransportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyOpenSslTransportTest.java
index b8ef700..44170df 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyOpenSslTransportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyOpenSslTransportTest.java
@@ -16,12 +16,12 @@
  */
 package org.apache.qpid.jms.transports.netty;
 
-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.Assume.assumeTrue;
+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 static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import java.lang.reflect.Field;
 import java.net.URI;
@@ -31,10 +31,9 @@
 import org.apache.qpid.jms.transports.Transport;
 import org.apache.qpid.jms.transports.TransportOptions;
 import org.apache.qpid.jms.transports.TransportSupport;
-import org.apache.qpid.jms.util.QpidJMSTestRunner;
-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;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -47,17 +46,18 @@
 /**
  * Test basic functionality of the Netty based TCP Transport ruuing in secure mode (SSL).
  */
-@RunWith(QpidJMSTestRunner.class)
 public class NettyOpenSslTransportTest extends NettySslTransportTest {
 
     private static final Logger LOG = LoggerFactory.getLogger(NettyOpenSslTransportTest.class);
 
-    @Test(timeout = 240 * 1000)
+    @Test
+    @Timeout(240)
     public void testConnectToServerWithOpenSSLEnabled() throws Exception {
         doTestOpenSSLSupport(true);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerWithOpenSSLDisabled() throws Exception {
         doTestOpenSSLSupport(false);
     }
@@ -98,7 +98,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerWithUserSuppliedSSLContextWorksWhenOpenSSLRequested() throws Exception {
         assumeTrue(OpenSsl.isAvailable());
         assumeTrue(OpenSsl.supportsKeyManagerFactory());
@@ -161,7 +162,7 @@
             }
         }
 
-        assertNotNull("Transport implementation unknown", channel);
+        assertNotNull(channel, "Transport implementation unknown");
 
         channel.setAccessible(true);
 
@@ -172,15 +173,16 @@
         SslHandler sslHandler = (SslHandler) handler;
 
         if (expected) {
-            assertTrue(message, sslHandler.engine() instanceof OpenSslEngine);
+            assertTrue(sslHandler.engine() instanceof OpenSslEngine, message);
         } else {
-            assertFalse(message, sslHandler.engine() instanceof OpenSslEngine);
+            assertFalse(sslHandler.engine() instanceof OpenSslEngine, message);
         }
     }
 
     @Override
-    @Ignore("Can't apply keyAlias in Netty OpenSSL impl")
-    @Test(timeout = 60 * 1000)
+    @Disabled("Can't apply keyAlias in Netty OpenSSL impl")
+    @Test
+    @Timeout(60)
     public void testConnectWithSpecificClientAuthKeyAlias() throws Exception {
         // TODO - Revert to superclass version if keyAlias becomes supported for Netty.
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettySslTransportFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettySslTransportFactoryTest.java
index b03e6b9..29cc192 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettySslTransportFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettySslTransportFactoryTest.java
@@ -18,12 +18,13 @@
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
-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.assertNull;
-import static org.junit.Assert.assertTrue;
+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.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.net.URI;
 import java.net.URLEncoder;
@@ -32,7 +33,7 @@
 
 import org.apache.qpid.jms.transports.Transport;
 import org.apache.qpid.jms.transports.TransportOptions;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test the NettySslTransportFactoryTest class
@@ -107,18 +108,22 @@
         assertNull(options.getKeyAlias());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testCreateWithUnknownOption() throws Exception {
-        URI BASE_URI = new URI("ssl://localhost:5672?transport.someOption=true");
-        NettySslTransportFactory factory = new NettySslTransportFactory();
-        factory.createTransport(BASE_URI);
+        assertThrows(IllegalArgumentException.class, () -> {
+            URI BASE_URI = new URI("ssl://localhost:5672?transport.someOption=true");
+            NettySslTransportFactory factory = new NettySslTransportFactory();
+            factory.createTransport(BASE_URI);
+        });
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testCreateWithBadOption() throws Exception {
-        URI BASE_URI = new URI("ssl://localhost:5672?transport.trafficClass=4096");
-        NettySslTransportFactory factory = new NettySslTransportFactory();
-        factory.createTransport(BASE_URI);
+        assertThrows(IllegalArgumentException.class, () -> {
+            URI BASE_URI = new URI("ssl://localhost:5672?transport.trafficClass=4096");
+            NettySslTransportFactory factory = new NettySslTransportFactory();
+            factory.createTransport(BASE_URI);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettySslTransportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettySslTransportTest.java
index d54db24..4f7b6de 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettySslTransportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettySslTransportTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.transports.netty;
 
-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.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.io.IOException;
 import java.net.InetSocketAddress;
@@ -37,10 +37,8 @@
 import org.apache.qpid.jms.transports.Transport;
 import org.apache.qpid.jms.transports.TransportListener;
 import org.apache.qpid.jms.transports.TransportOptions;
-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;
 
@@ -51,7 +49,6 @@
 /**
  * Test basic functionality of the Netty based TCP Transport ruuing in secure mode (SSL).
  */
-@RunWith(QpidJMSTestRunner.class)
 public class NettySslTransportTest extends NettyTcpTransportTest {
 
     private static final Logger LOG = LoggerFactory.getLogger(NettySslTransportTest.class);
@@ -73,7 +70,8 @@
     public static final String KEYSTORE_TYPE = "jks";
 
     @Override
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testCreateWithNullOptionsThrowsIAE() throws Exception {
         URI serverLocation = new URI("tcp://localhost:5762");
 
@@ -84,7 +82,8 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerWithoutTrustStoreFails() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -110,8 +109,8 @@
         assertTrue(exceptions.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
-    @Repeat(repetitions = 1)
+    @Test
+    @Timeout(60)
     public void testConnectToServerUsingUntrustedKeyFails() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -138,7 +137,8 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerClientTrustsAll() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -164,7 +164,8 @@
         assertTrue(exceptions.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectWithNeedClientAuth() throws Exception {
         TransportOptions serverOptions = createServerOptions();
 
@@ -188,7 +189,7 @@
             assertTrue(transport.isSecure());
 
             // Verify there was a certificate sent to the server
-            assertTrue("Server handshake did not complete in alotted time", server.getSslHandler().handshakeFuture().await(2, TimeUnit.SECONDS));
+            assertTrue(server.getSslHandler().handshakeFuture().await(2, TimeUnit.SECONDS), "Server handshake did not complete in alotted time");
             assertNotNull(server.getSslHandler().engine().getSession().getPeerCertificates());
 
             transport.close();
@@ -198,7 +199,8 @@
         assertTrue(exceptions.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectWithSpecificClientAuthKeyAlias() throws Exception {
         doClientAuthAliasTestImpl(CLIENT_KEY_ALIAS, CLIENT_DN);
         doClientAuthAliasTestImpl(CLIENT2_KEY_ALIAS, CLIENT2_DN);
@@ -228,7 +230,7 @@
             assertTrue(transport.isConnected());
             assertTrue(transport.isSecure());
 
-            assertTrue("Server handshake did not complete in alotted time", server.getSslHandler().handshakeFuture().await(2, TimeUnit.SECONDS));
+            assertTrue(server.getSslHandler().handshakeFuture().await(2, TimeUnit.SECONDS), "Server handshake did not complete in alotted time");
 
             Certificate[] peerCertificates = server.getSslHandler().engine().getSession().getPeerCertificates();
             assertNotNull(peerCertificates);
@@ -236,7 +238,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");
 
             transport.close();
         }
@@ -245,22 +247,26 @@
         assertTrue(exceptions.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerVerifyHost() throws Exception {
         doConnectToServerVerifyHostTestImpl(true, null);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerNoVerifyHost() throws Exception {
         doConnectToServerVerifyHostTestImpl(false, null);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectViaSocksProxyToServerVerifyHost() throws Exception {
         doConnectToServerVerifyHostTestImpl(true, TestProxy.ProxyType.SOCKS5);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectViaSocksProxyToServerNoVerifyHost() throws Exception {
         doConnectToServerVerifyHostTestImpl(false, TestProxy.ProxyType.SOCKS5);
     }
@@ -287,9 +293,9 @@
             }
 
             if (verifyHost) {
-                assertTrue("Expected verifyHost to be true", clientOptions.isVerifyHost());
+                assertTrue(clientOptions.isVerifyHost(), "Expected verifyHost to be true");
             } else {
-                assertFalse("Expected verifyHost to be false", clientOptions.isVerifyHost());
+                assertFalse(clientOptions.isVerifyHost(), "Expected verifyHost to be false");
             }
 
             Transport transport = createTransport(serverLocation, testListener, clientOptions);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpToMockServerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpToMockServerTest.java
index 04a8657..4051cd6 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpToMockServerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpToMockServerTest.java
@@ -21,10 +21,10 @@
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.PATH;
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.PORT;
 import static org.apache.qpid.jms.provider.amqp.AmqpSupport.SCHEME;
-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.net.URI;
 import java.util.HashMap;
@@ -44,9 +44,8 @@
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.transport.ConnectionError;
 import org.apache.qpid.proton.amqp.transport.ErrorCondition;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,10 +59,8 @@
 
     private static final Logger LOG = LoggerFactory.getLogger(NettyTcpToMockServerTest.class);
 
-    @Rule
-    public TestName test = new TestName();
-
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServer() throws Exception {
         try (NettySimpleAmqpServer server = createServer(createServerOptions())) {
             server.start();
@@ -82,7 +79,8 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testServerEnforcesExclusiveContainerCapability() throws Exception {
         try (NettySimpleAmqpServer server = createServer(createServerOptions())) {
             server.setAllowNonSaslConnections(true);
@@ -92,14 +90,14 @@
             Connection connection = null;
             try {
                 connection = cf.createConnection();
-                connection.setClientID(test.getMethodName());
+                connection.setClientID(_testMethodName);
             } catch (Exception ex) {
                 LOG.info("Caught exception while attempting to connect");
                 fail("Should not throw an exception for this connection");
             }
 
             try {
-                cf.createConnection().setClientID(test.getMethodName());
+                cf.createConnection().setClientID(_testMethodName);
                 fail("Should throw an exception when for duplicate client ID");
             } catch (InvalidClientIDException ex) {
                 LOG.info("Caught exception while attempting to connect");
@@ -112,7 +110,8 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerFailsWhenSaslDisabled() throws Exception {
         try (NettySimpleAmqpServer server = createServer(createServerOptions())) {
             server.start();
@@ -133,7 +132,8 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerWhenSaslDisabledAndServerAllowsIt() throws Exception {
         try (NettySimpleAmqpServer server = createServer(createServerOptions())) {
             server.setAllowNonSaslConnections(true);
@@ -153,7 +153,8 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerWhenRedirected() throws Exception {
         try (NettySimpleAmqpServer server = createServer(createServerOptions());
              NettySimpleAmqpServer redirect = createServer(createServerOptions())) {
@@ -218,7 +219,8 @@
         }
     }
 
-    @Test(timeout = 20 * 1000)
+    @Test
+    @Timeout(20)
     public void testConnectToWSServerWhenRedirectedWithNewPath() throws Exception {
         try (NettySimpleAmqpServer primary = createWSServer(createServerOptions());
              NettySimpleAmqpServer redirect = createWSServer(createServerOptions())) {
@@ -288,7 +290,8 @@
         }
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConnectToWSServerWithHttpHeaderConnectionExtensions() throws Exception {
         try (NettySimpleAmqpServer server = createWSServer(createServerOptions())) {
             server.start();
@@ -312,9 +315,9 @@
                 connection = cf.createConnection();
                 connection.start();
 
-                assertTrue("HandshakeCompletion not set within given time", server.awaitHandshakeCompletion(2000));
+                assertTrue(server.awaitHandshakeCompletion(2000), "HandshakeCompletion not set within given time");
                 HandshakeComplete handshake = server.getHandshakeComplete();
-                assertNotNull("completion should not be null", handshake);
+                assertNotNull(handshake, "completion should not be null");
                 HttpHeaders requestHeaders = handshake.requestHeaders();
 
                 assertTrue(requestHeaders.contains("test-header1"));
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpTransportFactoryTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpTransportFactoryTest.java
index 2968023..19f3267 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpTransportFactoryTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpTransportFactoryTest.java
@@ -16,18 +16,20 @@
  */
 package org.apache.qpid.jms.transports.netty;
 
-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.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
 import java.net.URI;
 
 import org.apache.qpid.jms.transports.Transport;
 import org.apache.qpid.jms.transports.TransportOptions;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test the NettyTcpTransportFactory class
@@ -46,7 +48,8 @@
     private static final int CUSTOM_LOCAL_PORT = 30000;
     private static final int CUSTOM_SHARED_EVENT_LOOP_THREADS = 7;
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateWithDefaultOptions() throws Exception {
         URI BASE_URI = new URI("tcp://localhost:5672");
 
@@ -74,44 +77,57 @@
         assertEquals(TransportOptions.DEFAULT_SHARED_EVENT_LOOP_THREADS, options.getSharedEventLoopThreads());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testCreateTransportWithUnknownOption() throws Exception {
-        URI BASE_URI = new URI("tcp://localhost:5672?transport.someOption=true");
-        NettyTcpTransportFactory factory = new NettyTcpTransportFactory();
-        factory.createTransport(BASE_URI);
+        assertThrows(IllegalArgumentException.class, () -> {
+            URI BASE_URI = new URI("tcp://localhost:5672?transport.someOption=true");
+            NettyTcpTransportFactory factory = new NettyTcpTransportFactory();
+            factory.createTransport(BASE_URI);
+        });
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testCreateTransportWithBadOption() throws Exception {
-        URI BASE_URI = new URI("tcp://localhost:5672?transport.trafficClass=4096");
-        NettyTcpTransportFactory factory = new NettyTcpTransportFactory();
-        factory.createTransport(BASE_URI);
+        assertThrows(IllegalArgumentException.class, () -> {
+            URI BASE_URI = new URI("tcp://localhost:5672?transport.trafficClass=4096");
+            NettyTcpTransportFactory factory = new NettyTcpTransportFactory();
+            factory.createTransport(BASE_URI);
+        });
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testCreateTransportWithHttpHeaders() throws Exception {
-        URI BASE_URI = new URI("tcp://localhost:5672?transport.httpHeaders=A");
-        NettyTcpTransportFactory factory = new NettyTcpTransportFactory();
-        factory.createTransport(BASE_URI);
+        assertThrows(IllegalArgumentException.class, () -> {
+            URI BASE_URI = new URI("tcp://localhost:5672?transport.httpHeaders=A");
+            NettyTcpTransportFactory factory = new NettyTcpTransportFactory();
+            factory.createTransport(BASE_URI);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testCreateWithBadKey() throws Exception {
-        URI BASE_URI = new URI("tcp://localhost:5672?transport.trafficClass=4096");
-        NettyTcpTransportFactory.create("foo", BASE_URI);
+        assertThrows(IOException.class, () -> {
+            URI BASE_URI = new URI("tcp://localhost:5672?transport.trafficClass=4096");
+            NettyTcpTransportFactory.create("foo", BASE_URI);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testFindFactoryFailsWithNullKey() throws Exception {
-        NettyTcpTransportFactory.findTransportFactory(null);
+        assertThrows(IOException.class, () -> {
+            NettyTcpTransportFactory.findTransportFactory(null);
+        });
     }
 
-    @Test(expected = IOException.class)
+    @Test
     public void testFindFactoryFailsWithInvalidKey() throws Exception {
-        NettyTcpTransportFactory.findTransportFactory("ssh");
+        assertThrows(IOException.class, () -> {
+            NettyTcpTransportFactory.findTransportFactory("ssh");
+        });
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateWithCustomOptions() throws Exception {
         URI BASE_URI = new URI("tcp://localhost:5672");
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpTransportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpTransportTest.java
index 9bc61f9..4181e61 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpTransportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyTcpTransportTest.java
@@ -18,15 +18,15 @@
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.instanceOf;
-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.assertSame;
-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.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.assertSame;
+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.lang.reflect.Field;
@@ -41,7 +41,6 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Supplier;
 
-import io.netty.channel.EventLoopGroup;
 import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.jms.test.Wait;
 import org.apache.qpid.jms.test.proxy.TestProxy;
@@ -49,17 +48,16 @@
 import org.apache.qpid.jms.transports.Transport;
 import org.apache.qpid.jms.transports.TransportListener;
 import org.apache.qpid.jms.transports.TransportOptions;
-import org.apache.qpid.jms.util.QpidJMSTestRunner;
 import org.apache.qpid.jms.util.QpidJMSThreadFactory;
-import org.apache.qpid.jms.util.Repeat;
-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;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
+import io.netty.channel.EventLoopGroup;
 import io.netty.channel.epoll.Epoll;
 import io.netty.channel.epoll.EpollEventLoopGroup;
 import io.netty.channel.kqueue.KQueue;
@@ -73,7 +71,6 @@
 /**
  * Test basic functionality of the Netty based TCP transport.
  */
-@RunWith(QpidJMSTestRunner.class)
 public class NettyTcpTransportTest extends QpidJmsTestCase {
 
     private static final Logger LOG = LoggerFactory.getLogger(NettyTcpTransportTest.class);
@@ -87,7 +84,8 @@
 
     protected final TransportListener testListener = new NettyTransportListener(false);
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testCloseOnNeverConnectedTransport() throws Exception {
         URI serverLocation = new URI("tcp://localhost:5762");
 
@@ -101,7 +99,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testCreateWithNullOptionsThrowsIAE() throws Exception {
         URI serverLocation = new URI("tcp://localhost:5762");
 
@@ -112,7 +111,8 @@
         }
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConnectWithCustomThreadFactoryConfigured() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -148,7 +148,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectWithoutRunningServer() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -176,7 +177,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectWithoutListenerFails() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -198,7 +200,8 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectAfterListenerSetWorks() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -224,7 +227,8 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServer() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -248,7 +252,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testMultipleConnectionsToServer() throws Exception {
         final int CONNECTION_COUNT = 10;
 
@@ -277,7 +282,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testMultipleConnectionsSendReceive() throws Exception {
         final int CONNECTION_COUNT = 10;
         final int FRAME_SIZE = 8;
@@ -322,7 +328,8 @@
         assertTrue(exceptions.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testDetectServerClose() throws Exception {
         Transport transport = null;
 
@@ -356,7 +363,8 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testZeroSizedSentNoErrors() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -378,7 +386,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testCannotDereferenceSharedClosedEventLoopGroup() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -414,7 +423,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testSharedEventLoopGroups() throws Exception {
         final Set<Transport> transports = new HashSet<>();
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
@@ -452,7 +462,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testSharedEventLoopGroupsOfDifferentSizes() throws Exception {
         final Set<Transport> transports = new HashSet<>();
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
@@ -496,7 +507,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testUnsharedEventLoopGroups() throws Exception {
         final Set<Transport> transports = new HashSet<>();
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
@@ -535,7 +547,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testDataSentIsReceived() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -570,12 +583,14 @@
         assertTrue(exceptions.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testMultipleDataPacketsSentAreReceived() throws Exception {
         doMultipleDataPacketsSentAndReceive(SEND_BYTE_COUNT, 1);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testMultipleDataPacketsSentAreReceivedRepeatedly() throws Exception {
         doMultipleDataPacketsSentAndReceive(SEND_BYTE_COUNT, 10);
     }
@@ -615,7 +630,8 @@
         assertTrue(exceptions.isEmpty());
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testSendToClosedTransportFails() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -638,7 +654,8 @@
         }
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConnectRunsInitializationMethod() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -667,8 +684,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60000)
-    @Repeat(repetitions = 1)
+    @Test
+    @Timeout(60)
     public void testFailureInInitializationRoutineFailsConnect() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -684,8 +701,8 @@
                 LOG.info("Failed to connect to server:{} as expected", serverLocation);
             }
 
-            assertFalse("Should not be connected", transport.isConnected());
-            assertEquals("Server location is incorrect", serverLocation, transport.getRemoteLocation());
+            assertFalse(transport.isConnected(), "Should not be connected");
+            assertEquals(serverLocation, transport.getRemoteLocation(), "Server location is incorrect");
 
             transport.close();
         }
@@ -695,8 +712,9 @@
         assertTrue(data.isEmpty());
     }
 
-    @Ignore("Used for checking for transport level leaks, my be unstable on CI.")
-    @Test(timeout = 60 * 1000)
+    @Disabled("Used for checking for transport level leaks, my be unstable on CI.")
+    @Test
+    @Timeout(60)
     public void testSendToClosedTransportFailsButDoesNotLeak() throws Exception {
         Transport transport = null;
 
@@ -729,17 +747,20 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerWithEpollEnabled() throws Exception {
         doTestEpollSupport(true);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerWithEpollDisabled() throws Exception {
         doTestEpollSupport(false);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerViaProxy() throws Exception {
         try (TestProxy testProxy = new TestProxy(ProxyType.SOCKS5);
              NettyEchoServer server = createEchoServer(createServerOptions())) {
@@ -838,7 +859,7 @@
             }
         }
 
-        assertNotNull("Transport implementation unknown", groupRefField);
+        assertNotNull(groupRefField, "Transport implementation unknown");
 
         groupRefField.setAccessible(true);
         return (EventLoopGroupRef) groupRefField.get(transport);
@@ -850,12 +871,14 @@
         assertThat(message, groupRef.group(), instanceOf(eventLoopGroupClass));
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerWithKQueueEnabled() throws Exception {
         doTestKQueueSupport(true);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerWithKQueueDisabled() throws Exception {
         doTestKQueueSupport(false);
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyWsTransportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyWsTransportTest.java
index 655be3f..e53733f 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyWsTransportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyWsTransportTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.transports.netty;
 
-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.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.io.IOException;
 import java.net.InetSocketAddress;
@@ -36,7 +36,8 @@
 import org.apache.qpid.jms.transports.Transport;
 import org.apache.qpid.jms.transports.TransportListener;
 import org.apache.qpid.jms.transports.TransportOptions;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,7 +70,8 @@
         }
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerUsingCorrectPath() throws Exception {
         final String WEBSOCKET_PATH = "/testpath";
 
@@ -102,7 +104,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConnectToServerUsingIncorrectPath() throws Exception {
         final String WEBSOCKET_PATH = "/testpath";
 
@@ -133,7 +136,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConnectionsSendReceiveLargeDataWhenFrameSizeAllowsIt() throws Exception {
         final int FRAME_SIZE = 8192;
 
@@ -171,7 +175,7 @@
                 }
             }, 10000, 50));
 
-            assertTrue("Connection failed while receiving.", transport.isConnected());
+            assertTrue(transport.isConnected(), "Connection failed while receiving.");
 
             transport.close();
         }
@@ -179,7 +183,8 @@
         assertTrue(exceptions.isEmpty());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testConnectionReceivesFragmentedData() throws Exception {
         final int FRAME_SIZE = 5317;
 
@@ -222,19 +227,19 @@
                 }
             }, 10000, 50));
 
-            assertTrue("Connection failed while receiving.", transport.isConnected());
+            assertTrue(transport.isConnected(), "Connection failed while receiving.");
 
             transport.close();
 
-            assertEquals("Expected 2 data packets due to seperate websocket frames", 2, data.size());
+            assertEquals(2, data.size(), "Expected 2 data packets due to seperate websocket frames");
 
             ByteBuf receivedBuffer = Unpooled.buffer(FRAME_SIZE);
             for(ByteBuf buf : data) {
                buf.readBytes(receivedBuffer, buf.readableBytes());
             }
 
-            assertEquals("Unexpected data length", FRAME_SIZE, receivedBuffer.readableBytes());
-            assertTrue("Unexpected data", ByteBufUtil.equals(sendBuffer, 0, receivedBuffer, 0, FRAME_SIZE));
+            assertEquals(FRAME_SIZE, receivedBuffer.readableBytes(), "Unexpected data length");
+            assertTrue(ByteBufUtil.equals(sendBuffer, 0, receivedBuffer, 0, FRAME_SIZE), "Unexpected data");
         } finally {
             for (ByteBuf buf : data) {
                 buf.release();
@@ -244,7 +249,8 @@
         assertTrue(exceptions.isEmpty());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConnectionsSendReceiveLargeDataFailsDueToMaxFrameSize() throws Exception {
         final int FRAME_SIZE = 1024;
 
@@ -275,13 +281,14 @@
                 fail("Should have connected to the server at " + serverLocation + " but got exception: " + e);
             }
 
-            assertTrue("Transport should have lost connection", Wait.waitFor(() -> !transport.isConnected()));
+            assertTrue(Wait.waitFor(() -> !transport.isConnected()), "Transport should have lost connection");
         }
 
         assertFalse(exceptions.isEmpty());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testTransportDetectsConnectionDropWhenServerEnforcesMaxFrameSize() throws Exception {
         final int FRAME_SIZE = 1024;
 
@@ -311,7 +318,7 @@
                 fail("Should have connected to the server at " + serverLocation + " but got exception: " + e);
             }
 
-            assertTrue("Transport should have lost connection", Wait.waitFor(new Wait.Condition() {
+            assertTrue(Wait.waitFor(new Wait.Condition() {
                 @Override
                 public boolean isSatisfied() throws Exception {
                     try {
@@ -323,13 +330,14 @@
 
                     return false;
                 }
-            }, 10000, 10));
+            }, 10000, 10), "Transport should have lost connection");
 
             transport.close();
         }
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateWithHttpHeadersSpecified() throws Exception {
         URI BASE_URI = new URI("ws://localhost:5672?" +
                 "transport.ws.httpHeader.first=FOO&" +
@@ -353,7 +361,8 @@
         assertEquals("BAR", options.getHttpHeaders().get("second"));
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConfiguredHttpHeadersArriveAtServer() throws Exception {
         try (NettyEchoServer server = createEchoServer(createServerOptions())) {
             server.start();
@@ -376,9 +385,9 @@
             assertTrue(transport.isConnected());
             assertEquals(serverLocation, transport.getRemoteLocation());
 
-            assertTrue("HandshakeCompletion not set within given time", server.awaitHandshakeCompletion(2000));
+            assertTrue(server.awaitHandshakeCompletion(2000), "HandshakeCompletion not set within given time");
             HandshakeComplete handshake = server.getHandshakeComplete();
-            assertNotNull("completion should not be null", handshake);
+            assertNotNull(handshake, "completion should not be null");
             HttpHeaders requestHeaders = handshake.requestHeaders();
 
             assertTrue(requestHeaders.contains("test-header1"));
@@ -395,7 +404,8 @@
         assertTrue(data.isEmpty());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConnectViaHttpProxy() throws Exception {
         try (TestProxy testProxy = new TestProxy(ProxyType.HTTP);
              NettyEchoServer server = createEchoServer(createServerOptions())) {
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyWssTransportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyWssTransportTest.java
index 1f2a4bd..fb158f3 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyWssTransportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/transports/netty/NettyWssTransportTest.java
@@ -21,7 +21,8 @@
 import org.apache.qpid.jms.test.proxy.TestProxy;
 import org.apache.qpid.jms.transports.TransportListener;
 import org.apache.qpid.jms.transports.TransportOptions;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test the NettyWsTransport with channel level security enabled.
@@ -42,12 +43,14 @@
         }
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectViaHttpProxyToServerVerifyHost() throws Exception {
         doConnectToServerVerifyHostTestImpl(true, TestProxy.ProxyType.HTTP);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testConnectViaHttpProxyToServerNoVerifyHost() throws Exception {
         doConnectToServerVerifyHostTestImpl(false, TestProxy.ProxyType.HTTP);
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ClassLoadingAwareObjectInputStreamTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ClassLoadingAwareObjectInputStreamTest.java
index b2a14ca..ddae2eb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ClassLoadingAwareObjectInputStreamTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ClassLoadingAwareObjectInputStreamTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.util;
 
-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.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -29,12 +29,11 @@
 import java.util.UUID;
 import java.util.Vector;
 
+import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.jms.util.ClassLoadingAwareObjectInputStream.TrustedClassFilter;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
+import org.junit.jupiter.api.Test;
 
-public class ClassLoadingAwareObjectInputStreamTest {
+public class ClassLoadingAwareObjectInputStreamTest extends QpidJmsTestCase {
 
     private final TrustedClassFilter ACCEPTS_ALL_FILTER = new TrustedClassFilter() {
 
@@ -52,19 +51,16 @@
         }
     };
 
-    @Rule
-    public TestName name = new TestName();
-
     //----- Test for serialized objects --------------------------------------//
 
     @Test
     public void testReadObject() throws Exception {
         // Expect to succeed
-        doTestReadObject(new SimplePojo(name.getMethodName()), ACCEPTS_ALL_FILTER);
+        doTestReadObject(new SimplePojo(_testMethodName), ACCEPTS_ALL_FILTER);
 
         // Expect to fail
         try {
-            doTestReadObject(new SimplePojo(name.getMethodName()), ACCEPTS_NONE_FILTER);
+            doTestReadObject(new SimplePojo(_testMethodName), ACCEPTS_NONE_FILTER);
             fail("Should have failed to read");
         } catch (ClassNotFoundException cnfe) {
             // Expected
@@ -73,7 +69,7 @@
 
     @Test
     public void testReadObjectWithAnonymousClass() throws Exception {
-        AnonymousSimplePojoParent pojoParent = new AnonymousSimplePojoParent(name.getMethodName());
+        AnonymousSimplePojoParent pojoParent = new AnonymousSimplePojoParent(_testMethodName);
 
         byte[] serialized = serializeObject(pojoParent);
 
@@ -90,13 +86,13 @@
             Object obj = reader.readObject();
 
             assertTrue(obj instanceof AnonymousSimplePojoParent);
-            assertEquals("Unexpected payload", pojoParent.getPayload(), ((AnonymousSimplePojoParent)obj).getPayload());
+            assertEquals(pojoParent.getPayload(), ((AnonymousSimplePojoParent)obj).getPayload(), "Unexpected payload");
         }
     }
 
     @Test
     public void testReadObjectWitLocalClass() throws Exception {
-        LocalSimplePojoParent pojoParent = new LocalSimplePojoParent(name.getMethodName());
+        LocalSimplePojoParent pojoParent = new LocalSimplePojoParent(_testMethodName);
 
         byte[] serialized = serializeObject(pojoParent);
 
@@ -113,7 +109,7 @@
             Object obj = reader.readObject();
 
             assertTrue(obj instanceof LocalSimplePojoParent);
-            assertEquals("Unexpected payload", pojoParent.getPayload(), ((LocalSimplePojoParent)obj).getPayload());
+            assertEquals(pojoParent.getPayload(), ((LocalSimplePojoParent)obj).getPayload(), "Unexpected payload");
         }
     }
 
@@ -154,7 +150,7 @@
 
     @Test
     public void testReadObjectString() throws Exception {
-        doTestReadObject(new String(name.getMethodName()), ACCEPTS_ALL_FILTER);
+        doTestReadObject(new String(_testMethodName), ACCEPTS_ALL_FILTER);
     }
 
     //----- Test that arrays of objects can be read --------------------------//
@@ -163,8 +159,8 @@
     public void testReadObjectStringArray() throws Exception {
         String[] value = new String[2];
 
-        value[0] = name.getMethodName() + "-1";
-        value[1] = name.getMethodName() + "-2";
+        value[0] = _testMethodName + "-1";
+        value[1] = _testMethodName + "-2";
 
         doTestReadObject(value, ACCEPTS_ALL_FILTER);
     }
@@ -225,7 +221,7 @@
 
     @Test
     public void testReadObjectStringNotFiltered() throws Exception {
-        doTestReadObject(new String(name.getMethodName()), ACCEPTS_NONE_FILTER);
+        doTestReadObject(new String(_testMethodName), ACCEPTS_NONE_FILTER);
     }
 
     //----- Test that primitive arrays get past filters ----------------------//
@@ -296,8 +292,8 @@
     public void testReadObjectStringArrayFiltered() throws Exception {
         String[] value = new String[2];
 
-        value[0] = name.getMethodName() + "-1";
-        value[1] = name.getMethodName() + "-2";
+        value[0] = _testMethodName + "-1";
+        value[1] = _testMethodName + "-2";
 
         byte[] serialized = serializeObject(value);
 
@@ -315,10 +311,10 @@
     public void testReadObjectMixedTypeArrayGetsFiltered() throws Exception {
         Object[] value = new Object[4];
 
-        value[0] = name.getMethodName();
+        value[0] =_testMethodName;
         value[1] = UUID.randomUUID();
         value[2] = new Vector<Object>();
-        value[3] = new SimplePojo(name.getMethodName());
+        value[3] = new SimplePojo(_testMethodName);
 
         byte[] serialized = serializeObject(value);
 
@@ -362,10 +358,10 @@
     public void testReadObjectMultiDimensionalStringArrayFiltered() throws Exception {
         String[][] value = new String[2][2];
 
-        value[0][0] = name.getMethodName() + "-0-0";
-        value[0][1] = name.getMethodName() + "-0-1";
-        value[1][0] = name.getMethodName() + "-1-0";
-        value[1][1] = name.getMethodName() + "-1-1";
+        value[0][0] = _testMethodName + "-0-0";
+        value[0][1] = _testMethodName + "-0-1";
+        value[1][0] = _testMethodName + "-1-0";
+        value[1][1] = _testMethodName + "-1-1";
 
         byte[] serialized = serializeObject(value);
 
@@ -381,7 +377,7 @@
 
     @Test
     public void testReadObjectFailsWithUntrustedType() throws Exception {
-        byte[] serialized = serializeObject(new SimplePojo(name.getMethodName()));
+        byte[] serialized = serializeObject(new SimplePojo(_testMethodName));
 
         TrustedClassFilter myFilter = new TrustedClassFilter() {
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ContentTypeSupportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ContentTypeSupportTest.java
index 3569c6a..8702336 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ContentTypeSupportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ContentTypeSupportTest.java
@@ -16,40 +16,51 @@
  */
 package org.apache.qpid.jms.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 
 import org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ContentTypeSupportTest {
 
-    @Test (expected = InvalidContentTypeException.class)
+    @Test
     public void testParseContentTypeWithOnlyType() throws Exception {
-        doParseContentTypeTestImpl("type", null);
+        assertThrows(InvalidContentTypeException.class, () -> {
+            doParseContentTypeTestImpl("type", null);
+        });
     }
 
-    @Test (expected = InvalidContentTypeException.class)
+    @Test
     public void testParseContentTypeEndsWithSlash() throws Exception {
-        doParseContentTypeTestImpl("type/", null);
+        assertThrows(InvalidContentTypeException.class, () -> {
+            doParseContentTypeTestImpl("type/", null);
+        });
     }
 
-    @Test (expected = InvalidContentTypeException.class)
+    @Test
     public void testParseContentTypeMissingSubtype() throws Exception {
-        doParseContentTypeTestImpl("type/;", null);
+        assertThrows(InvalidContentTypeException.class, () -> {
+            doParseContentTypeTestImpl("type/;", null);
+        });
     }
 
-    @Test (expected = InvalidContentTypeException.class)
+    @Test
     public void testParseContentTypeEmptyString() throws Exception {
-        doParseContentTypeTestImpl("", null);
+        assertThrows(InvalidContentTypeException.class, () -> {
+            doParseContentTypeTestImpl("", null);
+        });
     }
 
-    @Test (expected = InvalidContentTypeException.class)
+    @Test
     public void testParseContentTypeNullString() throws Exception {
-        doParseContentTypeTestImpl(null, null);
+        assertThrows(InvalidContentTypeException.class, () -> {
+            doParseContentTypeTestImpl(null, null);
+        });
     }
 
     @Test
@@ -93,24 +104,32 @@
         doParseContentTypeTestImpl("text/plain;charset=\"us-ascii\"", StandardCharsets.US_ASCII);
     }
 
-    @Test (expected = InvalidContentTypeException.class)
+    @Test
     public void testParseContentTypeWithCharsetQuotedEmpty() throws Exception {
-        doParseContentTypeTestImpl("text/plain;charset=\"\"", null);
+        assertThrows(InvalidContentTypeException.class, () -> {
+            doParseContentTypeTestImpl("text/plain;charset=\"\"", null);
+        });
     }
 
-    @Test (expected = InvalidContentTypeException.class)
+    @Test
     public void testParseContentTypeWithCharsetQuoteNotClosed() throws Exception {
-        doParseContentTypeTestImpl("text/plain;charset=\"unclosed", null);
+        assertThrows(InvalidContentTypeException.class, () -> {
+            doParseContentTypeTestImpl("text/plain;charset=\"unclosed", null);
+        });
     }
 
-    @Test (expected = InvalidContentTypeException.class)
+    @Test
     public void testParseContentTypeWithCharsetQuoteNotClosedEmpty() throws Exception {
-        doParseContentTypeTestImpl("text/plain;charset=\"", null);
+        assertThrows(InvalidContentTypeException.class, () -> {
+            doParseContentTypeTestImpl("text/plain;charset=\"", null);
+        });
     }
 
-    @Test (expected = InvalidContentTypeException.class)
+    @Test
     public void testParseContentTypeWithNoCharsetValue() throws Exception {
-        doParseContentTypeTestImpl("text/plain;charset=", null);
+        assertThrows(InvalidContentTypeException.class, () -> {
+            doParseContentTypeTestImpl("text/plain;charset=", null);
+        });
     }
 
     @Test
@@ -222,9 +241,9 @@
     private void doParseContentTypeTestImpl(String contentType, Charset expected) throws InvalidContentTypeException {
         Charset charset = ContentTypeSupport.parseContentTypeForTextualCharset(contentType);
         if (expected == null) {
-            assertNull("Expected no charset, but got:" + charset, charset);
+            assertNull(charset, "Expected no charset, but got:" + charset);
         } else {
-            assertEquals("Charset not as expected", expected, charset);
+            assertEquals(expected, charset, "Charset not as expected");
         }
     }
 }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/FactoryFinderTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/FactoryFinderTest.java
index ba607c2..9afba6c 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/FactoryFinderTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/FactoryFinderTest.java
@@ -16,16 +16,16 @@
  */
 package org.apache.qpid.jms.util;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -68,7 +68,7 @@
         }
     }
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         TEST_LOCATOR_PATH = new File(".").getCanonicalPath() + BASE_PATH;
         LOG.info("Test path is: {}", TEST_LOCATOR_PATH);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/FifoMessageQueueTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/FifoMessageQueueTest.java
index 0e1234a..ae624a3 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/FifoMessageQueueTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/FifoMessageQueueTest.java
@@ -16,12 +16,12 @@
  */
 package org.apache.qpid.jms.util;
 
-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.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -36,8 +36,9 @@
 import org.apache.qpid.jms.message.JmsInboundMessageDispatch;
 import org.apache.qpid.jms.message.JmsMessage;
 import org.apache.qpid.jms.message.facade.test.JmsTestMessageFacade;
-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.Timeout;
 
 /**
  * Test the FIFO based message queue.
@@ -48,7 +49,7 @@
     private final IdGenerator messageId = new IdGenerator();
     private long sequence;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         queue = new FifoMessageQueue(1000);
         queue.start();
@@ -194,7 +195,8 @@
         assertTrue(queue.isEmpty());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDequeueWaitsUntilMessageArrives() throws InterruptedException {
         final JmsInboundMessageDispatch message = createEnvelope();
         Thread runner = new Thread(new Runnable() {
@@ -213,12 +215,14 @@
         assertSame(message, queue.dequeue(-1));
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDequeueWaitsUntilMessageArrivesWhenLockNotified() throws Exception {
         doDequeueWaitsUntilMessageArrivesWhenLockNotifiedTestImpl(-1);
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testTimedDequeueWaitsUntilMessageArrivesWhenLockNotified() throws Exception {
         doDequeueWaitsUntilMessageArrivesWhenLockNotifiedTestImpl(100000);
     }
@@ -252,7 +256,8 @@
         assertSame(message, queue.dequeue(timeout));
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDequeueReturnsWhenQueueIsStopped() throws InterruptedException {
         Thread runner = new Thread(new Runnable() {
 
@@ -346,7 +351,7 @@
             }
         }
 
-        assertNotNull("MessageQueue implementation unknown", lock);
+        assertNotNull(lock, "MessageQueue implementation unknown");
         lock.setAccessible(true);
         condition.setAccessible(true);
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IOExceptionSupportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IOExceptionSupportTest.java
index 0db8200..d1c036c 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IOExceptionSupportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IOExceptionSupportTest.java
@@ -16,13 +16,13 @@
  */
 package org.apache.qpid.jms.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 import java.io.IOException;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  *
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IdGeneratorTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IdGeneratorTest.java
index 8cf17d9..c9314a3 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IdGeneratorTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IdGeneratorTest.java
@@ -16,20 +16,20 @@
  */
 package org.apache.qpid.jms.util;
 
-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.ArrayList;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 public class IdGeneratorTest {
 
     IdGenerator generator;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         generator = new IdGenerator();
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/LRUCacheTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/LRUCacheTest.java
index 1c931c2..c87d656 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/LRUCacheTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/LRUCacheTest.java
@@ -16,14 +16,14 @@
  */
 package org.apache.qpid.jms.util;
 
-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.ArrayList;
 import java.util.List;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,7 +59,7 @@
                 LOG.info("count: " + count + ", max=" + max);
             }
         }
-        assertEquals("size is still in order", 1000, underTest.size());
+        assertEquals(1000, underTest.size(), "size is still in order");
     }
 
     @SuppressWarnings("serial")
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PriorityMessageQueueTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PriorityMessageQueueTest.java
index 6472a61..be140a1 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PriorityMessageQueueTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PriorityMessageQueueTest.java
@@ -16,13 +16,13 @@
  */
 package org.apache.qpid.jms.util;
 
-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.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -35,8 +35,9 @@
 import org.apache.qpid.jms.message.JmsInboundMessageDispatch;
 import org.apache.qpid.jms.message.JmsMessage;
 import org.apache.qpid.jms.message.facade.test.JmsTestMessageFacade;
-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.Timeout;
 import org.mockito.Mockito;
 
 /**
@@ -48,7 +49,7 @@
     private final IdGenerator messageId = new IdGenerator();
     private long sequence;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         queue = new PriorityMessageQueue();
         queue.start();
@@ -219,12 +220,14 @@
         assertTrue(queue.isEmpty());
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDequeueWaitsUntilMessageArrives() throws InterruptedException {
         doDequeueWaitsUntilMessageArrivesTestImpl(-1);
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDequeueTimedWaitsUntilMessageArrives() throws InterruptedException {
         doDequeueWaitsUntilMessageArrivesTestImpl(5000);
     }
@@ -247,12 +250,14 @@
         assertSame(message, queue.dequeue(timeout));
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDequeueWaitsUntilMessageArrivesWhenLockNotified() throws InterruptedException {
         doDequeueWaitsUntilMessageArrivesWhenLockNotifiedTestImpl(-1);
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testTimedDequeueWaitsUntilMessageArrivesWhenLockNotified() throws InterruptedException {
         doDequeueWaitsUntilMessageArrivesWhenLockNotifiedTestImpl(100000);
     }
@@ -287,7 +292,8 @@
         assertSame(message, queue.dequeue(timeout));
     }
 
-    @Test(timeout = 10000)
+    @Test
+    @Timeout(10)
     public void testDequeueReturnsWhenQueueIsStopped() throws InterruptedException {
         Thread runner = new Thread(new Runnable() {
 
@@ -410,7 +416,7 @@
             }
         }
 
-        assertNotNull("MessageQueue implementation unknown", lock);
+        assertNotNull(lock, "MessageQueue implementation unknown");
         lock.setAccessible(true);
 
         Object lockView = lock.get(queue);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PropertyUtilTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PropertyUtilTest.java
index 6d7acf8..17d704c 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PropertyUtilTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/PropertyUtilTest.java
@@ -16,12 +16,13 @@
  */
 package org.apache.qpid.jms.util;
 
-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.assertSame;
-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.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -32,7 +33,7 @@
 
 import javax.net.ssl.SSLContext;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests for URI and Class level property Utilities class.
@@ -480,9 +481,11 @@
 
     //----- filterProperties -------------------------------------------------//
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testFilterPropertiesNullProperties() throws Exception {
-        PropertyUtil.filterProperties(null, "option.");
+        assertThrows(IllegalArgumentException.class, () -> {
+            PropertyUtil.filterProperties(null, "option.");
+        });
     }
 
     @Test
@@ -519,13 +522,15 @@
         assertEquals("bar", configObject.getLastName());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testSetPropertiesThrowsOnNullObject() throws Exception {
-        Map<String, String> properties = new HashMap<String, String>();
-        properties.put("firstName", "foo");
-        properties.put("lastName", "bar");
+        assertThrows(IllegalArgumentException.class, () -> {
+            Map<String, String> properties = new HashMap<String, String>();
+            properties.put("firstName", "foo");
+            properties.put("lastName", "bar");
 
-        PropertyUtil.setProperties(null, properties);
+            PropertyUtil.setProperties(null, properties);
+        });
     }
 
     @Test
@@ -727,19 +732,25 @@
         assertEquals("foo", configObject.getStringArray()[0]);
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testSetPropertiesWithNullObject() {
-        PropertyUtil.setProperties(null, new HashMap<String, String>());
+        assertThrows(IllegalArgumentException.class, () -> {
+            PropertyUtil.setProperties(null, new HashMap<String, String>());
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testSetPropertiesWithNullMap() {
-        PropertyUtil.setProperties(new Options(), (Map<String, String>) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            PropertyUtil.setProperties(new Options(), (Map<String, String>) null);
+        });
     }
 
-    @Test(expected=IllegalArgumentException.class)
+    @Test
     public void testSetPropertiesWithNullProperties() {
-        PropertyUtil.setProperties(new Options(), (Properties) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            PropertyUtil.setProperties(new Options(), (Properties) null);
+        });
     }
 
     @Test
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/QpidJMSTestRunner.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/QpidJMSTestRunner.java
deleted file mode 100644
index 4a572c6..0000000
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/QpidJMSTestRunner.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.jms.util;
-
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Test;
-import org.junit.internal.runners.statements.FailOnTimeout;
-import org.junit.runners.BlockJUnit4ClassRunner;
-import org.junit.runners.model.FrameworkMethod;
-import org.junit.runners.model.InitializationError;
-import org.junit.runners.model.Statement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A Custom JUnit test runner for customizing JUnit tests run in QPid JMS.
- */
-public class QpidJMSTestRunner extends BlockJUnit4ClassRunner {
-
-    private static final Logger LOG = LoggerFactory.getLogger(QpidJMSTestRunner.class);
-
-    public QpidJMSTestRunner(Class<?> klass) throws InitializationError {
-        super(klass);
-    }
-
-    @Override
-    protected Statement methodBlock(final FrameworkMethod method) {
-        Statement statement = super.methodBlock(method);
-
-        // Check for repeats needed
-        statement = withPotentialRepeat(method, statement);
-
-        return statement;
-    }
-
-    /**
-     * Perform the same logic as
-     * {@link BlockJUnit4ClassRunner#withPotentialTimeout(FrameworkMethod, Object, Statement)}
-     * but with additional support for changing the coded timeout with an extended value.
-     *
-     * @return either a {@link FailOnTimeout}, or the supplied {@link Statement} as appropriate.
-     */
-    @SuppressWarnings("deprecation")
-    @Override
-    protected Statement withPotentialTimeout(FrameworkMethod frameworkMethod, Object testInstance, Statement next) {
-        long testTimeout = getOriginalTimeout(frameworkMethod);
-
-        if (testTimeout > 0) {
-            String multiplierString = System.getProperty("org.apache.qpid.jms.testTimeoutMultiplier");
-            double multiplier = 0.0;
-
-            try {
-                multiplier = Double.parseDouble(multiplierString);
-            } catch (NullPointerException npe) {
-            } catch (NumberFormatException nfe) {
-                LOG.warn("Ignoring testTimeoutMultiplier not set to a valid value: " + multiplierString);
-            }
-
-            if (multiplier > 0.0) {
-                LOG.info("Test timeout multiple {} applied to test timeout {}ms: new timeout = {}",
-                    multiplier, testTimeout, (long) (testTimeout * multiplier));
-                testTimeout = (long) (testTimeout * multiplier);
-            }
-
-            next = FailOnTimeout.builder().
-                withTimeout(testTimeout, TimeUnit.MILLISECONDS).build(next);
-        } else {
-            next = super.withPotentialTimeout(frameworkMethod, testInstance, next);
-        }
-
-        return next;
-    }
-
-    /**
-     * Check for the presence of a {@link Repeat} annotation and return a {@link RepeatStatement}
-     * to handle executing the test repeated or the original value if not repeating.
-     *
-     * @return either a {@link RepeatStatement}, or the supplied {@link Statement} as appropriate.
-     */
-    protected Statement withPotentialRepeat(FrameworkMethod frameworkMethod, Statement next) {
-
-        Repeat repeatAnnotation = frameworkMethod.getAnnotation(Repeat.class);
-
-        if (repeatAnnotation != null) {
-            next = RepeatStatement.builder().build(repeatAnnotation, next);
-        }
-
-        return next;
-    }
-
-    /**
-     * Retrieve the original JUnit {@code timeout} from the {@link Test @Test}
-     * annotation on the incoming {@linkplain FrameworkMethod test method}.
-     *
-     * @return the timeout, or {@code 0} if none was specified
-     */
-    protected long getOriginalTimeout(FrameworkMethod frameworkMethod) {
-        Test test = frameworkMethod.getAnnotation(Test.class);
-        return (test != null && test.timeout() > 0 ? test.timeout() : 0);
-    }
-}
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/Repeat.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/Repeat.java
deleted file mode 100644
index 43b4d80..0000000
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/Repeat.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.jms.util;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * A Custom Test annotation used to repeat a troublesome test multiple
- * times when attempting to reproduce an intermittent failure.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ java.lang.annotation.ElementType.METHOD })
-public @interface Repeat {
-
-    int repetitions() default 1;
-
-    boolean untilFailure() default false;
-}
\ No newline at end of file
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/RepeatRule.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/RepeatRule.java
deleted file mode 100644
index f0f870d..0000000
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/RepeatRule.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.jms.util;
-
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-
-/**
- * Test rule used to allow a test to have the Repeat annotation applied.
- */
-public class RepeatRule implements TestRule {
-
-    @Override
-    public Statement apply(Statement statement, Description description) {
-        Repeat repeat = description.getAnnotation(Repeat.class);
-
-        if (repeat != null) {
-            statement = RepeatStatement.builder().build(repeat, statement);
-        }
-
-        return statement;
-    }
-}
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/RepeatStatement.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/RepeatStatement.java
deleted file mode 100644
index 0b2b543..0000000
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/RepeatStatement.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.jms.util;
-
-import org.junit.runners.model.Statement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public final class RepeatStatement extends Statement {
-
-    private static final Logger LOG = LoggerFactory.getLogger(RepeatStatement.class);
-
-    private final int repetitions;
-    private final boolean untilFailure;
-    private final Statement statement;
-
-    public static Builder builder() {
-        return new Builder();
-    }
-
-    public RepeatStatement(int times, boolean untilFailure, Statement statement) {
-        this.repetitions = times;
-        this.untilFailure = untilFailure;
-        this.statement = statement;
-    }
-
-    protected RepeatStatement(Builder builder, Statement next) {
-        this.repetitions = builder.getRepetitions();
-        this.untilFailure = builder.isUntilFailure();
-        this.statement = next;
-    }
-
-    @Override
-    public void evaluate() throws Throwable {
-        for (int i = 0; i < repetitions && !untilFailure; i++) {
-            if (untilFailure) {
-                LOG.info("Running test iteration: {}.", i + 1);
-            } else {
-                LOG.info("Running test iteration: {} of configured repetitions: {}", i + 1, repetitions);
-            }
-            statement.evaluate();
-        }
-    }
-
-    /**
-     * Builder for {@link Repeat}.
-     */
-    public static class Builder {
-        private int repetitions = 1;
-        private boolean untilFailure = false;
-
-        protected Builder() {}
-
-        /**
-         * Specifies the number of times to run the test.
-         *
-         * @param repetitions
-         *      The number of times to run the test.
-         *
-         * @return {@code this} for method chaining.
-         */
-        public Builder withRepetitions(int repetitions) {
-            if (repetitions <= 0) {
-                throw new IllegalArgumentException("repetitions must be greater than zero");
-            }
-
-            this.repetitions = repetitions;
-            return this;
-        }
-
-        /**
-         * Specifies the number of times to run the test.
-         *
-         * @param untilFailure
-         *      true if the test should run until a failure occurs.
-         *
-         * @return {@code this} for method chaining.
-         */
-        public Builder withRunUntilFailure(boolean untilFailure) {
-            this.untilFailure = untilFailure;
-            return this;
-        }
-
-        protected int getRepetitions() {
-            return repetitions;
-        }
-
-        protected boolean isUntilFailure()  {
-            return untilFailure;
-        }
-
-        /**
-         * Builds a {@link RepeatStatement} instance using the values in this builder.
-         *
-         * @param next
-         *      The statement instance to wrap with the newly create repeat statement.
-         *
-         * @return a new {@link RepeatStatement} that wraps the given {@link Statement}.
-         */
-        public RepeatStatement build(Statement next) {
-            if (next == null) {
-                throw new NullPointerException("statement cannot be null");
-            }
-
-            return new RepeatStatement(this, next);
-        }
-
-        /**
-         * Builds a {@link RepeatStatement} instance using the values in this builder.
-         *
-         * @param annotation
-         *      The {@link Repeat} annotation that triggered this statement being created.
-         * @param next
-         *      The statement instance to wrap with the newly create repeat statement.
-         *
-         * @return a new {@link RepeatStatement} that wraps the given {@link Statement}.
-         */
-        public RepeatStatement build(Repeat annotation, Statement next) {
-            if (next == null) {
-                throw new NullPointerException("statement cannot be null");
-            }
-
-            if (annotation == null) {
-                throw new NullPointerException("annotation cannot be null");
-            }
-
-            withRepetitions(annotation.repetitions());
-            withRunUntilFailure(annotation.untilFailure());
-
-            return new RepeatStatement(this, next);
-        }
-    }
-}
\ No newline at end of file
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/StopWatchTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/StopWatchTest.java
index fc49ff7..13251fb 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/StopWatchTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/StopWatchTest.java
@@ -16,22 +16,28 @@
  */
 package org.apache.qpid.jms.util;
 
-import junit.framework.TestCase;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
 
 /**
  *
  */
-public class StopWatchTest extends TestCase {
+public class StopWatchTest {
 
+    @Test
     public void testStopWatch() throws Exception {
         StopWatch watch = new StopWatch();
         Thread.sleep(200);
         long taken = watch.stop();
 
         assertEquals(taken, watch.taken());
-        assertTrue("Should take approx 200 millis, was: " + taken, taken > 150);
+        assertTrue(taken > 150, "Should take approx 200 millis, was: " + taken);
     }
 
+    @Test
     public void testStopWatchNotStarted() throws Exception {
         StopWatch watch = new StopWatch(false);
         long taken = watch.stop();
@@ -42,25 +48,27 @@
         taken = watch.stop();
 
         assertEquals(taken, watch.taken());
-        assertTrue("Should take approx 200 millis, was: " + taken, taken > 150);
+        assertTrue(taken > 150, "Should take approx 200 millis, was: " + taken);
     }
 
+    @Test
     public void testStopWatchRestart() throws Exception {
         StopWatch watch = new StopWatch();
         Thread.sleep(200);
         long taken = watch.stop();
 
         assertEquals(taken, watch.taken());
-        assertTrue("Should take approx 200 millis, was: " + taken, taken > 150);
+        assertTrue(taken > 150, "Should take approx 200 millis, was: " + taken);
 
         watch.restart();
         Thread.sleep(100);
         taken = watch.stop();
 
         assertEquals(taken, watch.taken());
-        assertTrue("Should take approx 100 millis, was: " + taken, taken > 50);
+        assertTrue(taken > 50, "Should take approx 100 millis, was: " + taken);
     }
 
+    @Test
     public void testStopWatchTaken() throws Exception {
         StopWatch watch = new StopWatch();
         Thread.sleep(100);
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/StringArrayConverterTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/StringArrayConverterTest.java
index f5269cd..2dc7f36 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/StringArrayConverterTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/StringArrayConverterTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class StringArrayConverterTest extends QpidJmsTestCase {
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ThreadPoolUtilsTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ThreadPoolUtilsTest.java
index dead10e..d41d6da 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ThreadPoolUtilsTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/ThreadPoolUtilsTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.util;
 
-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.util.List;
 import java.util.concurrent.CountDownLatch;
@@ -27,38 +27,44 @@
 import java.util.concurrent.TimeUnit;
 
 import org.apache.qpid.jms.test.QpidJmsTestCase;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test for ThreadPoolUtis support class.
  */
 public class ThreadPoolUtilsTest extends QpidJmsTestCase {
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testCreate() {
         new ThreadPoolUtils();
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testShutdown() throws Exception {
         ExecutorService service = Executors.newSingleThreadExecutor();
         ThreadPoolUtils.shutdown(service);
         assertTrue(service.isShutdown());
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testShutdownNullService() throws Exception {
         ThreadPoolUtils.shutdown(null);
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testShutdownNowWithNoTasks() throws Exception {
         ExecutorService service = Executors.newSingleThreadExecutor();
         assertNotNull(ThreadPoolUtils.shutdownNow(service));
         assertTrue(service.isShutdown());
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testShutdownNowReturnsUnexecuted() throws Exception {
         final CountDownLatch started = new CountDownLatch(1);
         final CountDownLatch finish = new CountDownLatch(1);
@@ -99,7 +105,8 @@
         assertEquals(2, notRun.size());
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testShutdownNowAlreadyShutdown() throws Exception {
         ExecutorService service = Executors.newSingleThreadExecutor();
         service.shutdown();
@@ -107,26 +114,30 @@
         assertTrue(service.isShutdown());
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testShutdownNowNullService() throws Exception {
         assertNotNull(ThreadPoolUtils.shutdownNow(null));
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testShutdownGraceful() throws Exception {
         ExecutorService service = Executors.newSingleThreadExecutor();
         ThreadPoolUtils.shutdownGraceful(service);
         assertTrue(service.isShutdown());
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testShutdownGracefulWithTimeout() throws Exception {
         ExecutorService service = Executors.newSingleThreadExecutor();
         ThreadPoolUtils.shutdownGraceful(service, 1000);
         assertTrue(service.isShutdown());
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testShutdownGracefulWithStuckTask() throws Exception {
         final CountDownLatch started = new CountDownLatch(1);
         final CountDownLatch finish = new CountDownLatch(1);
@@ -152,7 +163,8 @@
         assertTrue(ThreadPoolUtils.awaitTermination(service, 1000));
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testAwaitTerminationWithNullService() throws Exception {
         assertTrue(ThreadPoolUtils.awaitTermination(null, 1000));
     }
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/TypeConversionSupportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/TypeConversionSupportTest.java
index 753b7be..cc4fa17 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/TypeConversionSupportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/TypeConversionSupportTest.java
@@ -16,15 +16,15 @@
  */
 package org.apache.qpid.jms.util;
 
-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.util.Date;
 import java.util.UUID;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class TypeConversionSupportTest {
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/URISupportTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/URISupportTest.java
index 3e16c50..3b22db7 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/URISupportTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/URISupportTest.java
@@ -16,12 +16,12 @@
  */
 package org.apache.qpid.jms.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -31,7 +31,7 @@
 import java.util.Map;
 
 import org.apache.qpid.jms.util.URISupport.CompositeData;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class URISupportTest {
 
@@ -131,8 +131,8 @@
     @Test
     public void testParsingCompositeURI() throws URISyntaxException {
         CompositeData data = URISupport.parseComposite(new URI("broker://(tcp://localhost:61616)?name=foo"));
-        assertEquals("one component", 1, data.getComponents().size());
-        assertEquals("Size: " + data.getParameters(), 1, data.getParameters().size());
+        assertEquals(1, data.getComponents().size(), "one component");
+        assertEquals(1, data.getParameters().size(), "Size: " + data.getParameters());
     }
 
     //---- parseQuery --------------------------------------------------------//
@@ -143,13 +143,13 @@
 
         Map<String, String> map = PropertyUtil.parseQuery(source);
 
-        assertEquals("Size: " + map, 2, map.size());
+        assertEquals(2, map.size(), "Size: " + map);
         assertMapKey(map, "cheese", "Edam");
         assertMapKey(map, "x", "123");
 
         URI result = URISupport.removeQuery(source);
 
-        assertEquals("result", new URI("tcp://localhost:61626/foo/bar"), result);
+        assertEquals(new URI("tcp://localhost:61626/foo/bar"), result, "result");
     }
 
     @Test
@@ -158,17 +158,17 @@
 
         Map<String, String> map = PropertyUtil.parseQuery(source);
 
-        assertEquals("Size: " + map, 2, map.size());
+        assertEquals(2, map.size(), "Size: " + map);
         assertMapKey(map, "cheese", "");
         assertMapKey(map, "x", "");
 
         URI result = URISupport.removeQuery(source);
 
-        assertEquals("result", new URI("tcp://localhost:61626/foo/bar"), result);
+        assertEquals(new URI("tcp://localhost:61626/foo/bar"), result, "result");
     }
 
     protected void assertMapKey(Map<String, String> map, String key, Object expected) {
-        assertEquals("Map key: " + key, map.get(key), expected);
+        assertEquals(expected, map.get(key), "Unexpected value for map key: " + key);
     }
 
     //---- checkParenthesis --------------------------------------------------------//
@@ -210,10 +210,10 @@
         URI source = new URI("vm://localhost");
         URI dest = PropertyUtil.replaceQuery(source, "network=true&one=two");
 
-        assertEquals("correct param count", 2, URISupport.parseParameters(dest).size());
-        assertEquals("same uri, host", source.getHost(), dest.getHost());
-        assertEquals("same uri, scheme", source.getScheme(), dest.getScheme());
-        assertFalse("same uri, ssp", dest.getQuery().equals(source.getQuery()));
+        assertEquals(2, URISupport.parseParameters(dest).size(), "correct param count");
+        assertEquals(source.getHost(), dest.getHost(), "same uri, host");
+        assertEquals(source.getScheme(), dest.getScheme(), "same uri, scheme");
+        assertFalse(dest.getQuery().equals(source.getQuery()), "same uri, ssp");
     }
 
     @Test
@@ -226,14 +226,14 @@
 
         uri = URISupport.applyParameters(uri, parameters);
         Map<String,String> appliedParameters = URISupport.parseParameters(uri);
-        assertEquals("all params applied  with no prefix", 2, appliedParameters.size());
+        assertEquals(2, appliedParameters.size(), "all params applied  with no prefix");
 
         // strip off params again
         uri = PropertyUtil.eraseQuery(uri);
 
         uri = URISupport.applyParameters(uri, parameters, "joe");
         appliedParameters = URISupport.parseParameters(uri);
-        assertTrue("no params applied as none match joe", appliedParameters.isEmpty());
+        assertTrue(appliedParameters.isEmpty(), "no params applied as none match joe");
 
         uri = URISupport.applyParameters(uri, parameters, "t.");
         verifyParams(URISupport.parseParameters(uri));
@@ -274,7 +274,7 @@
 
         uri = URISupport.applyParameters(uri, parameters, "t.");
         Map<String,String> appliedParameters = URISupport.parseParameters(uri);
-        assertEquals("all params applied with no prefix", 3, appliedParameters.size());
+        assertEquals(3, appliedParameters.size(), "all params applied with no prefix");
         verifyParams(appliedParameters);
     }
 
@@ -288,7 +288,7 @@
 
         uri = URISupport.applyParameters(uri, parameters);
         Map<String,String> appliedParameters = URISupport.parseParameters(uri);
-        assertEquals("all params applied with no prefix", 3, appliedParameters.size());
+        assertEquals(3, appliedParameters.size(), "all params applied with no prefix");
         verifyParams(appliedParameters);
     }
 
@@ -303,7 +303,7 @@
     public void testIsCompositeURIWithQueryNoSlashes() throws URISyntaxException {
         URI[] compositeURIs = new URI[] { new URI("test:(part1://host?part1=true)?outside=true"), new URI("broker:(tcp://localhost:61616)?name=foo") };
         for (URI uri : compositeURIs) {
-            assertTrue(uri + " must be detected as composite URI", URISupport.isCompositeURI(uri));
+            assertTrue(URISupport.isCompositeURI(uri), uri + " must be detected as composite URI");
         }
     }
 
@@ -311,7 +311,7 @@
     public void testIsCompositeURIWithQueryAndSlashes() throws URISyntaxException {
         URI[] compositeURIs = new URI[] { new URI("test://(part1://host?part1=true)?outside=true"), new URI("broker://(tcp://localhost:61616)?name=foo") };
         for (URI uri : compositeURIs) {
-            assertTrue(uri + " must be detected as composite URI", URISupport.isCompositeURI(uri));
+            assertTrue(URISupport.isCompositeURI(uri), uri + " must be detected as composite URI");
         }
     }
 
@@ -319,7 +319,7 @@
     public void testIsCompositeURINoQueryNoSlashes() throws URISyntaxException {
         URI[] compositeURIs = new URI[] { new URI("test:(part1://host,part2://(sub1://part,sube2:part))"), new URI("test:(path)/path") };
         for (URI uri : compositeURIs) {
-            assertTrue(uri + " must be detected as composite URI", URISupport.isCompositeURI(uri));
+            assertTrue(URISupport.isCompositeURI(uri), uri + " must be detected as composite URI");
         }
     }
 
@@ -331,7 +331,7 @@
 
     @Test
     public void testIsCompositeURINoQueryNoSlashesNoParentheses() throws URISyntaxException {
-        assertFalse("test:part1" + " must be detected as non-composite URI", URISupport.isCompositeURI(new URI("test:part1")));
+        assertFalse(URISupport.isCompositeURI(new URI("test:part1")), "test:part1" + " must be detected as non-composite URI");
     }
 
     @Test
@@ -339,7 +339,7 @@
         URI[] compositeURIs = new URI[] { new URI("failover://(tcp://bla:61616,tcp://bla:61617)"),
                 new URI("failover://(tcp://localhost:61616,ssl://anotherhost:61617)") };
         for (URI uri : compositeURIs) {
-            assertTrue(uri + " must be detected as composite URI", URISupport.isCompositeURI(uri));
+            assertTrue(URISupport.isCompositeURI(uri), uri + " must be detected as composite URI");
         }
     }
 
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/VariableExpansionTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/VariableExpansionTest.java
index 82c07ce..8647820 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/VariableExpansionTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/VariableExpansionTest.java
@@ -20,19 +20,20 @@
  */
 package org.apache.qpid.jms.util;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeFalse;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.qpid.jms.test.QpidJmsTestCase;
 import org.apache.qpid.jms.util.VariableExpansion.Resolver;
-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.mockito.Mockito;
 
 public class VariableExpansionTest extends QpidJmsTestCase {
@@ -50,10 +51,10 @@
     private String testPropValue;
     private String testVariableForExpansion;
 
-    @Before
+    @BeforeEach
     @Override
-    public void setUp() throws Exception {
-        super.setUp();
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         testNamePrefix = getTestName() + ".";
 
@@ -68,29 +69,29 @@
     public void testResolveWithSysPropResolver() {
         Resolver sysPropResolver = VariableExpansion.SYS_PROP_RESOLVER;
 
-        assertNull("System property value unexpectedly set already", System.getProperty(testPropName));
-        assertNull("Expected resolve to return null as property not set", sysPropResolver.resolve(testPropName));
+        assertNull(System.getProperty(testPropName), "System property value unexpectedly set already");
+        assertNull(sysPropResolver.resolve(testPropName), "Expected resolve to return null as property not set");
 
         setTestSystemProperty(testPropName, testPropValue);
 
-        assertEquals("System property value not as expected", testPropValue, System.getProperty(testPropName));
-        assertEquals("Resolved variable not as expected", testPropValue, sysPropResolver.resolve(testPropName));
+        assertEquals(testPropValue, System.getProperty(testPropName), "System property value not as expected");
+        assertEquals(testPropValue, sysPropResolver.resolve(testPropName), "Resolved variable not as expected");
     }
 
     @Test
     public void testResolveWithEnvVarResolver() {
         // Verify variable is set (by Surefire config),
         // prevents spurious failure if not manually configured when run in IDE.
-        assumeTrue("Environment variable not set as required", System.getenv().containsKey(TEST_ENV_VARIABLE_NAME));
-        assumeFalse("Environment variable unexpectedly set", System.getenv().containsKey(TEST_ENV_VARIABLE_NAME_NOT_SET));
+        assumeTrue(System.getenv().containsKey(TEST_ENV_VARIABLE_NAME), "Environment variable not set as required");
+        assumeFalse(System.getenv().containsKey(TEST_ENV_VARIABLE_NAME_NOT_SET), "Environment variable unexpectedly set");
 
-        assertEquals("Environment variable value not as expected", TEST_ENV_VARIABLE_VALUE, System.getenv(TEST_ENV_VARIABLE_NAME));
+        assertEquals(TEST_ENV_VARIABLE_VALUE, System.getenv(TEST_ENV_VARIABLE_NAME), "Environment variable value not as expected");
 
         final Resolver envVarResolver = VariableExpansion.ENV_VAR_RESOLVER;
 
-        assertNull("Expected resolve to return null as property not set", envVarResolver.resolve(TEST_ENV_VARIABLE_NAME_NOT_SET));
+        assertNull(envVarResolver.resolve(TEST_ENV_VARIABLE_NAME_NOT_SET), "Expected resolve to return null as property not set");
 
-        assertEquals("Resolved variable not as expected", TEST_ENV_VARIABLE_VALUE, envVarResolver.resolve(TEST_ENV_VARIABLE_NAME));
+        assertEquals(TEST_ENV_VARIABLE_VALUE, envVarResolver.resolve(TEST_ENV_VARIABLE_NAME), "Resolved variable not as expected");
     }
 
     // ===== Expansion tests =====
@@ -107,7 +108,7 @@
 
     @Test
     public void testExpandNull() {
-        assertNull("Expected null", VariableExpansion.expand(null, variable -> "foo"));
+        assertNull(VariableExpansion.expand(null, variable -> "foo"), "Expected null");
     }
 
     @Test
@@ -123,19 +124,19 @@
 
         setTestSystemProperty(testPropName, testPropValue);
 
-        assertEquals("System property value not as expected", testPropValue, System.getProperty(testPropName));
+        assertEquals(testPropValue, System.getProperty(testPropName), "System property value not as expected");
 
         String expanded = VariableExpansion.expand(testVariableForExpansion, resolver);
-        assertEquals("Expanded variable not as expected", testPropValue, expanded);
+        assertEquals(testPropValue, expanded, "Expanded variable not as expected");
     }
 
     @Test
     public void testExpandWithEnvVarResolver() {
         // Verify variable is set (by Surefire config),
         // prevents spurious failure if not manually configured when run in IDE.
-        assumeTrue("Environment variable not set as required", System.getenv().containsKey(TEST_ENV_VARIABLE_NAME));
+        assumeTrue(System.getenv().containsKey(TEST_ENV_VARIABLE_NAME), "Environment variable not set as required");
 
-        assertEquals("Environment variable value not as expected", TEST_ENV_VARIABLE_VALUE, System.getenv(TEST_ENV_VARIABLE_NAME));
+        assertEquals(TEST_ENV_VARIABLE_VALUE, System.getenv(TEST_ENV_VARIABLE_NAME), "Environment variable value not as expected");
 
         final Resolver resolver = VariableExpansion.ENV_VAR_RESOLVER;
 
@@ -148,7 +149,7 @@
 
         String expanded = VariableExpansion.expand("${" + TEST_ENV_VARIABLE_NAME + "}", resolver);
 
-        assertEquals("Expanded variable not as expected", TEST_ENV_VARIABLE_VALUE, expanded);
+        assertEquals(TEST_ENV_VARIABLE_VALUE, expanded, "Expanded variable not as expected");
     }
 
     @Test
@@ -166,7 +167,7 @@
 
         String expanded = VariableExpansion.expand(testVariableForExpansion, resolver);
 
-        assertEquals("Expanded variable not as expected", testPropValue, expanded);
+        assertEquals(testPropValue, expanded, "Expanded variable not as expected");
     }
 
     @Test
@@ -277,7 +278,7 @@
 
     private void doBasicExpansionTestImpl(String toExpand, String expectedExpansion, Resolver resolver) {
         String expanded = VariableExpansion.expand(toExpand, resolver);
-        assertEquals("Expanded variable not as expected", expectedExpansion, expanded);
+        assertEquals(expectedExpansion, expanded, "Expanded variable not as expected");
     }
 
     @Test
@@ -308,7 +309,7 @@
         Mockito.verify(mockResolver).resolve(testPropName);
         Mockito.verifyNoMoreInteractions(mockResolver);
 
-        assertEquals("Expanded variable not as expected", defaultValue, expanded);
+        assertEquals(defaultValue, expanded, "Expanded variable not as expected");
     }
 
     @Test
@@ -326,7 +327,7 @@
 
         String expanded = VariableExpansion.expand("${" + propName1 + "}", resolver);
 
-        assertEquals("Expanded variable not as expected", otherPropDefault, expanded);
+        assertEquals(otherPropDefault, expanded, "Expanded variable not as expected");
     }
 
     @Test
@@ -344,7 +345,7 @@
 
         String expanded = VariableExpansion.expand("${" + propName1 + DEFAULT_DELIMINATOR + prop1Default + "}", resolver);
 
-        assertEquals("Expanded variable not as expected", prop1Default, expanded);
+        assertEquals(prop1Default, expanded, "Expanded variable not as expected");
     }
 
     @Test
diff --git a/qpid-jms-discovery/pom.xml b/qpid-jms-discovery/pom.xml
index ee080d2..050ce88 100644
--- a/qpid-jms-discovery/pom.xml
+++ b/qpid-jms-discovery/pom.xml
@@ -48,8 +48,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-discovery/src/test/java/org/apache/qpid/jms/provider/discovery/DiscoveryProviderFactoryTest.java b/qpid-jms-discovery/src/test/java/org/apache/qpid/jms/provider/discovery/DiscoveryProviderFactoryTest.java
index fd92e47..7f0212d 100644
--- a/qpid-jms-discovery/src/test/java/org/apache/qpid/jms/provider/discovery/DiscoveryProviderFactoryTest.java
+++ b/qpid-jms-discovery/src/test/java/org/apache/qpid/jms/provider/discovery/DiscoveryProviderFactoryTest.java
@@ -16,7 +16,11 @@
  */
 package org.apache.qpid.jms.provider.discovery;
 
-import static org.junit.Assert.*;
+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.net.URI;
 import java.net.URISyntaxException;
@@ -24,7 +28,7 @@
 import org.apache.qpid.jms.provider.Provider;
 import org.apache.qpid.jms.provider.failover.FailoverProvider;
 import org.apache.qpid.jms.provider.failover.FailoverProviderFactory;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class DiscoveryProviderFactoryTest {
 
@@ -33,29 +37,29 @@
         URI discoveryUri = new URI("discovery:(multicast://default)");
         Provider provider = DiscoveryProviderFactory.create(discoveryUri);
 
-        assertNotNull("Provider was not created", provider);
-        assertEquals("Provider was not of expected type", DiscoveryProvider.class, provider.getClass());
+        assertNotNull(provider, "Provider was not created");
+        assertEquals(DiscoveryProvider.class, provider.getClass(), "Provider was not of expected type");
 
         DiscoveryProvider discovery = (DiscoveryProvider) provider;
 
-        assertNotNull("Next provider was not present", discovery.getNext());
-        assertEquals("Next Provider was not of expected type", FailoverProvider.class, discovery.getNext().getClass());
+        assertNotNull(discovery.getNext(), "Next provider was not present");
+        assertEquals(FailoverProvider.class, discovery.getNext().getClass(), "Next Provider was not of expected type");
 
         FailoverProvider failoverProvider = (FailoverProvider) discovery.getNext();
-        assertTrue("Expected no nested options", failoverProvider.getNestedOptions().isEmpty());
+        assertTrue(failoverProvider.getNestedOptions().isEmpty(), "Expected no nested options");
     }
 
     @Test
     public void testCreateDiscoveryProviderWithFailoverSyntaxMainOption() throws Exception {
         String optionPrefix = FailoverProviderFactory.FAILOVER_OPTION_PREFIX;
-        assertEquals("Unexpected option prefix", "failover.", optionPrefix);
+        assertEquals("failover.", optionPrefix, "Unexpected option prefix");
         doCreateDiscoveryProviderWithMainOptionTestImpl(optionPrefix);
     }
 
     @Test
     public void testCreateDiscoveryProviderWithDiscoverSyntaxMainOption() throws Exception {
         String optionPrefix = DiscoveryProviderFactory.DISCOVERY_OPTION_PREFIX;
-        assertEquals("Unexpected option prefix", "discovery.", optionPrefix);
+        assertEquals("discovery.", optionPrefix, "Unexpected option prefix");
         doCreateDiscoveryProviderWithMainOptionTestImpl(optionPrefix);
     }
 
@@ -69,30 +73,30 @@
         URI discoveryUri = new URI("discovery:(multicast://default)?" + optionPrefix  + optionKey + "=" + optionValue);
         Provider provider = DiscoveryProviderFactory.create(discoveryUri);
 
-        assertNotNull("Provider was not created", provider);
-        assertEquals("Provider was not of expected type", DiscoveryProvider.class, provider.getClass());
+        assertNotNull(provider, "Provider was not created");
+        assertEquals(DiscoveryProvider.class, provider.getClass(), "Provider was not of expected type");
 
         DiscoveryProvider discovery = (DiscoveryProvider) provider;
 
-        assertNotNull("Next provider was not present", discovery.getNext());
-        assertEquals("Next Provider was not of expected type", FailoverProvider.class, discovery.getNext().getClass());
+        assertNotNull(discovery.getNext(), "Next provider was not present");
+        assertEquals(FailoverProvider.class, discovery.getNext().getClass(), "Next Provider was not of expected type");
 
         FailoverProvider failoverProvider = (FailoverProvider) discovery.getNext();
 
-        assertEquals("option not as expected", option, failoverProvider.getReconnectBackOffMultiplier(), 0.0);
+        assertEquals(option, failoverProvider.getReconnectBackOffMultiplier(), 0.0, "option not as expected");
     }
 
     @Test
     public void testCreateDiscoveryProviderWithFailoverSyntaxNestedOptions() throws Exception {
         String optionPrefix = FailoverProviderFactory.FAILOVER_OPTION_PREFIX + FailoverProviderFactory.FAILOVER_NESTED_OPTION_PREFIX_ADDON;
-        assertEquals("Unexpected option prefix", "failover.nested.", optionPrefix);
+        assertEquals("failover.nested.", optionPrefix, "Unexpected option prefix");
         doCreateDiscoveryProviderWithNestedOptionsTestImpl(optionPrefix);
     }
 
     @Test
     public void testCreateDiscoveryProviderWithDiscoveredSyntaxNestedOption() throws Exception {
         String optionPrefix = DiscoveryProviderFactory.DISCOVERY_OPTION_PREFIX + DiscoveryProviderFactory.DISCOVERY_DISCOVERED_OPTION_PREFIX_ADON;
-        assertEquals("Unexpected option prefix", "discovery.discovered.", optionPrefix);
+        assertEquals("discovery.discovered.", optionPrefix, "Unexpected option prefix");
         doCreateDiscoveryProviderWithNestedOptionsTestImpl(optionPrefix);
     }
 
@@ -102,20 +106,20 @@
         URI discoveryUri = new URI("discovery:(multicast://default)?" + optionPrefix  + clientIdOptionKey + "=" + clientIdValue);
         Provider provider = DiscoveryProviderFactory.create(discoveryUri);
 
-        assertNotNull("Provider was not created", provider);
-        assertEquals("Provider was not of expected type", DiscoveryProvider.class, provider.getClass());
+        assertNotNull(provider, "Provider was not created");
+        assertEquals(DiscoveryProvider.class, provider.getClass(), "Provider was not of expected type");
 
         DiscoveryProvider discovery = (DiscoveryProvider) provider;
 
-        assertNotNull("Next provider was not present", discovery.getNext());
-        assertEquals("Next Provider was not of expected type", FailoverProvider.class, discovery.getNext().getClass());
+        assertNotNull(discovery.getNext(), "Next provider was not present");
+        assertEquals(FailoverProvider.class, discovery.getNext().getClass(), "Next Provider was not of expected type");
 
         FailoverProvider failoverProvider = (FailoverProvider) discovery.getNext();
         failoverProvider.getNestedOptions();
 
-        assertEquals("Expected nested options", 1, failoverProvider.getNestedOptions().size());
-        assertTrue("Expected nested clientID option to be present", failoverProvider.getNestedOptions().containsKey(clientIdOptionKey));
-        assertEquals("nested clientID option not as expected", clientIdValue, failoverProvider.getNestedOptions().get(clientIdOptionKey));
+        assertEquals(1, failoverProvider.getNestedOptions().size(), "Expected nested options");
+        assertTrue(failoverProvider.getNestedOptions().containsKey(clientIdOptionKey), "Expected nested clientID option to be present");
+        assertEquals(clientIdValue, failoverProvider.getNestedOptions().get(clientIdOptionKey), "nested clientID option not as expected");
     }
 
     @Test
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/pom.xml b/qpid-jms-interop-tests/qpid-jms-activemq-tests/pom.xml
index d2d6d68..302bbc0 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/pom.xml
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/pom.xml
@@ -67,8 +67,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-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionCloseVariationsTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionCloseVariationsTest.java
index f4d077d..244a050 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionCloseVariationsTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionCloseVariationsTest.java
@@ -18,25 +18,24 @@
 
 import jakarta.jms.Connection;
 
-import org.apache.activemq.junit.ActiveMQTestRunner;
-import org.apache.activemq.junit.Repeat;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.RepeatedTest;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * A test case for Connection close called under different circumstances.
  */
-@RunWith(ActiveMQTestRunner.class)
 public class JmsConnectionCloseVariationsTest extends AmqpTestSupport {
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testCloseAfterBrokerStopped() throws Exception {
         doTestConnectionClosedAfterBrokerStopped();
     }
 
-    @Repeat(repetitions = 25)
-    @Test(timeout=90000)
+    @RepeatedTest(25)
+    @Timeout(90)
     public void testCloseAfterBrokerStoppedRepeated() throws Exception {
         doTestConnectionClosedAfterBrokerStopped();
     }
@@ -48,13 +47,14 @@
         connection.close();
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testCloseBeforeBrokerStopped() throws Exception {
         doTestConnectionClosedBeforeBrokerStopped();
     }
 
-    @Repeat(repetitions = 25)
-    @Test(timeout=90000)
+    @RepeatedTest(25)
+    @Timeout(90)
     public void testCloseBeforeBrokerStoppedRepeated() throws Exception {
         doTestConnectionClosedBeforeBrokerStopped();
     }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionConcurrentCloseCallsTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionConcurrentCloseCallsTest.java
index a9cb112..c966fb9 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionConcurrentCloseCallsTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionConcurrentCloseCallsTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.qpid.jms;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+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;
@@ -27,7 +27,11 @@
 import jakarta.jms.Session;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-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.junit.jupiter.api.Timeout;
 
 public class JmsConnectionConcurrentCloseCallsTest extends AmqpTestSupport {
 
@@ -35,13 +39,15 @@
     private ExecutorService executor;
     private final int size = 200;
 
+    @BeforeEach
     @Override
-    public void setUp() throws Exception {
-        super.setUp();
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         executor = Executors.newFixedThreadPool(20);
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         try {
@@ -57,7 +63,8 @@
         super.tearDown();
     }
 
-    @Test(timeout=200000)
+    @Test
+    @Timeout(200)
     public void testCloseMultipleTimes() throws Exception {
         connection = (JmsConnection) createAmqpConnection();
         connection.start();
@@ -86,7 +93,7 @@
         }
 
         boolean zero = latch.await(200, TimeUnit.SECONDS);
-        assertTrue("Should complete all", zero);
+        assertTrue(zero, "Should complete all");
 
         // should not fail calling again
         connection.close();
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionInRandomBatchesTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionInRandomBatchesTest.java
index 2816d63..f5d68f0 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionInRandomBatchesTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionInRandomBatchesTest.java
@@ -23,9 +23,11 @@
 import jakarta.jms.Connection;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-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.junit.jupiter.api.Timeout;
 
 /**
  * Test for creation of several open connections in a series of randomly
@@ -41,30 +43,33 @@
     private final int MAX_BATCH_ITERATIONS = 10;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         batchSizeGenerator.setSeed(System.nanoTime());
-        super.setUp();
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         doCloseConnectionBatch();
         super.tearDown();
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testSingleBatch() throws Exception {
         doCreateConnectionBatch(MAX_BATCH_SIZE);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testCreateManyBatches() throws Exception {
         doCreateConnectionInBatches(MAX_BATCH_ITERATIONS, MAX_BATCH_SIZE);
     }
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testCreateRandomSizedBatches() throws Exception {
         doCreateConnectionInBatches(MAX_BATCH_ITERATIONS, RANDOM_SIZE_MARKER);
     }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java
index a624d8e..f9484a7 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsConnectionTest.java
@@ -16,9 +16,10 @@
  */
 package org.apache.qpid.jms;
 
-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.assertNotNull;
+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.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -34,14 +35,16 @@
 import jakarta.jms.Session;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test for basic JmsConnection functionality and error handling.
  */
 public class JmsConnectionTest extends AmqpTestSupport {
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnection() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
         connection = factory.createConnection();
@@ -49,7 +52,8 @@
         connection.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAndStart() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
         connection = factory.createConnection();
@@ -58,7 +62,8 @@
         connection.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateWithDuplicateClientIdFails() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
         JmsConnection connection1 = (JmsConnection) factory.createConnection();
@@ -79,17 +84,20 @@
         connection2.close();
     }
 
-    @Test(expected = JMSException.class)
+    @Test
     public void testSetClientIdAfterStartedFails() throws Exception {
-        JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
-        connection = factory.createConnection();
-        connection.setClientID("Test");
-        connection.start();
-        connection.setClientID("NewTest");
-        connection.close();
+        assertThrows(JMSException.class, () -> {
+            JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
+            connection = factory.createConnection();
+            connection.setClientID("Test");
+            connection.start();
+            connection.setClientID("NewTest");
+            connection.close();
+        });
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAsSystemAdmin() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
         factory.setUsername("system");
@@ -100,7 +108,8 @@
         connection.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionCallSystemAdmin() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
         connection = factory.createConnection("system", "manager");
@@ -109,26 +118,33 @@
         connection.close();
     }
 
-    @Test(timeout=30000, expected = JMSSecurityException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAsUnknwonUser() throws Exception {
-        JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
-        factory.setUsername("unknown");
-        factory.setPassword("unknown");
-        connection = factory.createConnection();
-        assertNotNull(connection);
-        connection.start();
-        connection.close();
+        assertThrows(JMSSecurityException.class, () -> {
+            JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
+            factory.setUsername("unknown");
+            factory.setPassword("unknown");
+            connection = factory.createConnection();
+            assertNotNull(connection);
+            connection.start();
+            connection.close();
+        });
     }
 
-    @Test(timeout=30000, expected = JMSSecurityException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionCallUnknwonUser() throws Exception {
-        JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
-        connection = factory.createConnection("unknown", "unknown");
-        assertNotNull(connection);
-        connection.start();
+        assertThrows(JMSSecurityException.class, () -> {
+            JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
+            connection = factory.createConnection("unknown", "unknown");
+            assertNotNull(connection);
+            connection.start();
+        });
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testBrokerStopWontHangConnectionClose() throws Exception {
         connection = createAmqpConnection();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
@@ -151,7 +167,8 @@
         }
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testConnectionExceptionBrokerStop() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
         connection = createAmqpConnection();
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsMessageIntegrityTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsMessageIntegrityTest.java
index 5ad25cc..0b660a4 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsMessageIntegrityTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsMessageIntegrityTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms;
 
-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.UUID;
 
@@ -36,7 +36,9 @@
 import jakarta.jms.TextMessage;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
 
 /**
  * Tests that messages sent and received don't lose data and have expected
@@ -44,9 +46,10 @@
  */
 public class JmsMessageIntegrityTest extends AmqpTestSupport {
 
+    @BeforeEach
     @Override
-    public void setUp() throws Exception {
-        super.setUp();
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
         connection = createAmqpConnection();
     }
 
@@ -54,7 +57,7 @@
     public void testTextMessage() throws Exception {
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Destination destination = session.createQueue(name.getMethodName());
+        Destination destination = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(destination);
         MessageProducer producer = session.createProducer(destination);
 
@@ -76,7 +79,7 @@
     public void testBytesMessageLength() throws Exception {
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Destination destination = session.createQueue(name.getMethodName());
+        Destination destination = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(destination);
         MessageProducer producer = session.createProducer(destination);
 
@@ -101,7 +104,7 @@
     public void testObjectMessage() throws Exception {
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Destination destination = session.createQueue(name.getMethodName());
+        Destination destination = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(destination);
         MessageProducer producer = session.createProducer(destination);
 
@@ -124,7 +127,7 @@
     public void testBytesMessage() throws Exception {
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Destination destination = session.createQueue(name.getMethodName());
+        Destination destination = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(destination);
         MessageProducer producer = session.createProducer(destination);
 
@@ -151,7 +154,7 @@
     public void testStreamMessage() throws Exception {
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Destination destination = session.createQueue(name.getMethodName());
+        Destination destination = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(destination);
         MessageProducer producer = session.createProducer(destination);
 
@@ -187,7 +190,7 @@
     public void testMapMessage() throws Exception {
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Destination destination = session.createQueue(name.getMethodName());
+        Destination destination = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(destination);
         MessageProducer producer = session.createProducer(destination);
 
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsQueueConnectionTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsQueueConnectionTest.java
index ad7559f..7da09e0 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsQueueConnectionTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsQueueConnectionTest.java
@@ -16,15 +16,17 @@
  */
 package org.apache.qpid.jms;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import jakarta.jms.JMSException;
 import jakarta.jms.JMSSecurityException;
 import jakarta.jms.QueueConnection;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test basic QueueConnection creation etc.
@@ -39,7 +41,8 @@
         assertTrue(connection instanceof QueueConnection);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAsSystemAdmin() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
         factory.setUsername("system");
@@ -49,17 +52,21 @@
         connection.start();
     }
 
-    @Test(timeout=30000, expected = JMSSecurityException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAsUnknwonUser() throws Exception {
-        JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
-        factory.setUsername("unknown");
-        factory.setPassword("unknown");
-        connection = factory.createQueueConnection();
-        assertNotNull(connection);
-        connection.start();
+        assertThrows(JMSSecurityException.class, () -> {
+            JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
+            factory.setUsername("unknown");
+            factory.setPassword("unknown");
+            connection = factory.createQueueConnection();
+            assertNotNull(connection);
+            connection.start();
+        });
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionCallSystemAdmin() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
         connection = factory.createQueueConnection("system", "manager");
@@ -67,11 +74,14 @@
         connection.start();
     }
 
-    @Test(timeout=30000, expected = JMSSecurityException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionCallUnknwonUser() throws Exception {
-        JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
-        connection = factory.createQueueConnection("unknown", "unknown");
-        assertNotNull(connection);
-        connection.start();
+        assertThrows(JMSSecurityException.class, () -> {
+            JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
+            connection = factory.createQueueConnection("unknown", "unknown");
+            assertNotNull(connection);
+            connection.start();
+        });
     }
 }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsSSLConnectionTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsSSLConnectionTest.java
index 953236c..561b7c3 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsSSLConnectionTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsSSLConnectionTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.qpid.jms;
 
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.net.URI;
 
@@ -27,9 +27,10 @@
 import org.apache.activemq.broker.TransportConnector;
 import org.apache.qpid.jms.transports.TransportOptions;
 import org.apache.qpid.jms.transports.TransportSupport;
-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 that we can connect to a broker over SSL.
@@ -44,7 +45,7 @@
 
     private URI connectionURI;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         brokerService = new BrokerService();
         brokerService.setPersistent(false);
@@ -72,7 +73,7 @@
         connectionURI = connector.getPublishableConnectURI();
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         brokerService.stop();
         brokerService.waitUntilStopped();
@@ -89,7 +90,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAndStart() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getConnectionURI(true));
         JmsConnection connection = (JmsConnection) factory.createConnection();
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsTopicConnectionTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsTopicConnectionTest.java
index 33f4723..369180a 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsTopicConnectionTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsTopicConnectionTest.java
@@ -16,15 +16,17 @@
  */
 package org.apache.qpid.jms;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import jakarta.jms.JMSException;
 import jakarta.jms.JMSSecurityException;
 import jakarta.jms.TopicConnection;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  *
@@ -39,7 +41,8 @@
         assertTrue(connection instanceof TopicConnection);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAsSystemAdmin() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
         factory.setUsername("system");
@@ -49,7 +52,8 @@
         connection.start();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionCallSystemAdmin() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
         connection = factory.createTopicConnection("system", "manager");
@@ -57,21 +61,27 @@
         connection.start();
     }
 
-    @Test(timeout=30000, expected = JMSSecurityException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAsUnknwonUser() throws Exception {
-        JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
-        factory.setUsername("unknown");
-        factory.setPassword("unknown");
-        connection = factory.createTopicConnection();
-        assertNotNull(connection);
-        connection.start();
+        assertThrows(JMSSecurityException.class, () -> {
+            JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
+            factory.setUsername("unknown");
+            factory.setPassword("unknown");
+            connection = factory.createTopicConnection();
+            assertNotNull(connection);
+            connection.start();
+        });
     }
 
-    @Test(timeout=30000, expected = JMSSecurityException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionCallUnknownUser() throws Exception {
-        JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
-        connection = factory.createTopicConnection("unknown", "unknown");
-        assertNotNull(connection);
-        connection.start();
+        assertThrows(JMSSecurityException.class, () -> {
+            JmsConnectionFactory factory = new JmsConnectionFactory(getBrokerAmqpConnectionURI());
+            connection = factory.createTopicConnection("unknown", "unknown");
+            assertNotNull(connection);
+            connection.start();
+        });
     }
 }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsWSConnectionTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsWSConnectionTest.java
index fb66084..b4a60f9 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsWSConnectionTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsWSConnectionTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.qpid.jms;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
 import java.net.ServerSocket;
@@ -33,11 +33,11 @@
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.activemq.broker.BrokerService;
 import org.apache.activemq.broker.TransportConnector;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
+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.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,15 +48,14 @@
 
     protected static final Logger LOG = LoggerFactory.getLogger(JmsWSConnectionTest.class);
 
-    @Rule
-    public TestName testName = new TestName();
-
+    private String testName;
     private BrokerService brokerService;
     private URI connectionURI;
     private final int DEFAULT_WS_PORT = 5679;
 
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        this.testName = testInfo.getTestMethod().get().getName();
         brokerService = new BrokerService();
         brokerService.setPersistent(false);
         brokerService.setAdvisorySupport(false);
@@ -72,13 +71,14 @@
         brokerService.waitUntilStarted();
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         brokerService.stop();
         brokerService.waitUntilStopped();
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAndStart() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getConnectionURI());
         JmsConnection connection = (JmsConnection) factory.createConnection();
@@ -87,7 +87,8 @@
         connection.close();
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testSendLargeMessageToClientFromOpenWire() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getConnectionURI());
         JmsConnection connection = (JmsConnection) factory.createConnection();
@@ -134,7 +135,7 @@
     }
 
     protected String getQueueName() {
-        return testName.getMethodName();
+        return testName;
     }
 
     protected String getConnectionURI() throws Exception {
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsWSSConnectionTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsWSSConnectionTest.java
index bde5532..a6c19af 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsWSSConnectionTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/JmsWSSConnectionTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.qpid.jms;
 
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.io.IOException;
 import java.net.ServerSocket;
@@ -30,9 +30,10 @@
 import org.apache.activemq.broker.TransportConnector;
 import org.apache.qpid.jms.transports.TransportOptions;
 import org.apache.qpid.jms.transports.TransportSupport;
-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;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -51,7 +52,7 @@
     private URI connectionURI;
     private final int DEFAULT_WS_PORT = 5679;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         brokerService = new BrokerService();
         brokerService.setPersistent(false);
@@ -82,13 +83,14 @@
         connectionURI = connector.getPublishableConnectURI();
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         brokerService.stop();
         brokerService.waitUntilStopped();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAndStart() throws Exception {
         JmsConnectionFactory factory = new JmsConnectionFactory(getConnectionURI(true));
         JmsConnection connection = (JmsConnection) factory.createConnection();
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ConsumeFromAMQPTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ConsumeFromAMQPTest.java
index f0a0f24..ed6c3e4 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ConsumeFromAMQPTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ConsumeFromAMQPTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.bench;
 
-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.util.ArrayList;
 import java.util.List;
@@ -41,13 +41,13 @@
 import org.apache.activemq.broker.region.policy.PolicyMap;
 import org.apache.activemq.broker.region.policy.VMPendingQueueMessageStoragePolicy;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  *
  */
-@Ignore
+@Disabled
 public class ConsumeFromAMQPTest extends AmqpTestSupport {
 
     private final int MSG_COUNT = 50 * 1000;
@@ -94,14 +94,14 @@
         producer.close();
 
         QueueViewMBean queueView = getProxyToQueue(getDestinationName());
-        assertEquals("Queue should have a message", 1, queueView.getQueueSize());
+        assertEquals(1, queueView.getQueueSize(), "Queue should have a message");
 
         MessageConsumer consumer = session.createConsumer(queue);
         Message received = consumer.receive(7000);
         assertNotNull(received);
         consumer.close();
 
-        assertEquals("Queue should have ano messages", 0, queueView.getQueueSize());
+        assertEquals(0, queueView.getQueueSize(), "Queue should have ano messages");
     }
 
     @Test
@@ -171,7 +171,7 @@
         long startTime = System.currentTimeMillis();
         for (int i = 0; i < msgCount; ++i) {
             Message message = consumer.receive(7000);
-            assertNotNull("Failed to receive message " + i, message);
+            assertNotNull(message, "Failed to receive message " + i);
         }
         long result = (System.currentTimeMillis() - startTime);
 
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProduceToAMQPTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProduceToAMQPTest.java
index e9b0abe..85fb0fa 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProduceToAMQPTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProduceToAMQPTest.java
@@ -34,13 +34,13 @@
 import org.apache.activemq.broker.region.policy.PolicyMap;
 import org.apache.activemq.broker.region.policy.VMPendingQueueMessageStoragePolicy;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  * Collect some basic throughput data on message producer.
  */
-@Ignore
+@Disabled
 public class ProduceToAMQPTest extends AmqpTestSupport {
 
     private final int MSG_COUNT = 50 * 1000;
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProduceToOpenWireTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProduceToOpenWireTest.java
index fdf8432..6083cfa 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProduceToOpenWireTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProduceToOpenWireTest.java
@@ -29,12 +29,12 @@
 
 import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Ignore
+@Disabled
 public class ProduceToOpenWireTest extends AmqpTestSupport {
 
     protected static final Logger LOG = LoggerFactory.getLogger(ProduceToOpenWireTest.class);
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProducerAndConsumerBench.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProducerAndConsumerBench.java
index c9a02bf..45100fd 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProducerAndConsumerBench.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/ProducerAndConsumerBench.java
@@ -16,8 +16,8 @@
  */
 package org.apache.qpid.jms.bench;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Vector;
 import java.util.concurrent.ExecutorService;
@@ -40,13 +40,14 @@
 import org.apache.activemq.broker.region.policy.VMPendingQueueMessageStoragePolicy;
 import org.apache.qpid.jms.JmsConnection;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Ignore
+@Disabled
 public class ProducerAndConsumerBench extends AmqpTestSupport  {
 
     private static final Logger LOG = LoggerFactory.getLogger(ProducerAndConsumerBench.class);
@@ -64,9 +65,9 @@
     private final long NUM_SENDS = 30000;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         for (int i = 0; i < PAYLOAD_SIZE; ++i) {
             payload[i] = (byte) (i % 255);
@@ -74,7 +75,7 @@
     }
 
     @Test
-    public void testProduceConsume() throws Exception {
+    void testProduceConsume() throws Exception {
         this.factory = createAmqpConnectionFactory();
 
         final AtomicLong sharedSendCount = new AtomicLong(NUM_SENDS);
@@ -112,8 +113,8 @@
 
         executorService.shutdown();
         executorService.awaitTermination(30, TimeUnit.MINUTES);
-        assertTrue("Producers done in time", executorService.isTerminated());
-        assertTrue("No exceptions: " + exceptions, exceptions.isEmpty());
+        assertTrue(executorService.isTerminated(), "Producers done in time");
+        assertTrue(exceptions.isEmpty(), "No exceptions: " + exceptions);
 
         double duration = System.currentTimeMillis() - start;
         LOG.info("Duration:            " + duration + "ms");
@@ -131,7 +132,7 @@
             if ((count.get() % 10000) == 0) {
                 LOG.info("Received message: {}", NUM_SENDS - count.get());
             }
-            assertNotNull("got message " + v, consumer.receive(15000));
+            assertNotNull(consumer.receive(15000), "got message " + v);
         }
         consumer.close();
     }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/TransactedProducerSendRateTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/TransactedProducerSendRateTest.java
index a3c674a..3e08dd7 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/TransactedProducerSendRateTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/bench/TransactedProducerSendRateTest.java
@@ -26,13 +26,13 @@
 
 import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  * Compares send rate using a TX Session for QPid JMS and ActiveMQ JMS
  */
-@Ignore
+@Disabled
 public class TransactedProducerSendRateTest extends AmqpTestSupport {
 
     private final int ITERATIONS = 20;
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsAutoAckTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsAutoAckTest.java
index f26e6ba..0668674 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsAutoAckTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsAutoAckTest.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.assertNotNull;
-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.assertTrue;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -34,7 +34,8 @@
 import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -42,45 +43,47 @@
 
     protected static final Logger LOG = LoggerFactory.getLogger(JmsAutoAckTest.class);
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAckedMessageAreConsumed() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         sendToAmqQueue(1);
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
-        assertNotNull("Failed to receive any message.", consumer.receive(3000));
+        assertNotNull(consumer.receive(3000), "Failed to receive any message.");
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAckedMessageAreConsumedAsync() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         sendToAmqQueue(1);
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
         consumer.setMessageListener(new MessageListener() {
@@ -91,13 +94,13 @@
             }
         });
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
     /**
@@ -112,13 +115,14 @@
      *
      * @throws Exception on error during test.
      */
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testRecoverInOnMessage() throws Exception {
         connection = createAmqpConnection();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         sendMessages(connection, queue, 3);
@@ -129,8 +133,8 @@
 
         connection.start();
 
-        assertTrue("Timed out waiting for async listener", latch.await(10, TimeUnit.SECONDS));
-        assertFalse("Test failed in listener, consult logs", listener.getFailed());
+        assertTrue(latch.await(10, TimeUnit.SECONDS), "Timed out waiting for async listener");
+        assertFalse(listener.getFailed(), "Test failed in listener, consult logs");
     }
 
     private static class AutoAckRecoverMsgListener implements MessageListener {
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsClientAckTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsClientAckTest.java
index 418cec9..93ef953 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsClientAckTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsClientAckTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.consumer;
 
-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.ArrayList;
 import java.util.List;
@@ -43,8 +43,9 @@
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.QpidJmsTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,16 +56,17 @@
 
     protected static final Logger LOG = LoggerFactory.getLogger(JmsClientAckTest.class);
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAckedMessageAreConsumed() throws Exception {
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createTextMessage("Hello"));
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
         // Consume the message...
@@ -73,29 +75,30 @@
         assertNotNull(msg);
         msg.acknowledge();
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
 
         connection.close();
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testLastMessageAcked() throws Exception {
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createTextMessage("Hello"));
         producer.send(session.createTextMessage("Hello2"));
         producer.send(session.createTextMessage("Hello3"));
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(3, proxy.getQueueSize());
 
         // Consume the message...
@@ -108,25 +111,26 @@
         assertNotNull(msg);
         msg.acknowledge();
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testUnAckedMessageAreNotConsumedOnSessionClose() throws Exception {
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createTextMessage("Hello"));
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
         // Consume the message...but don't ack it.
@@ -144,25 +148,26 @@
         assertNotNull(msg);
         msg.acknowledge();
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAckedMessageAreConsumedByAsync() throws Exception {
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createTextMessage("Hello"));
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
         // Consume the message...
@@ -179,26 +184,27 @@
             }
         });
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testUnAckedAsyncMessageAreNotConsumedOnSessionClose() throws Exception {
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createTextMessage("Hello"));
 
         final CountDownLatch consumed = new CountDownLatch(1);
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
         // Consume the message...
@@ -211,7 +217,7 @@
             }
         });
 
-        assertTrue("Should have read one message", consumed.await(10, TimeUnit.SECONDS));
+        assertTrue(consumed.await(10, TimeUnit.SECONDS), "Should have read one message");
         session.close();
         assertEquals(1, proxy.getQueueSize());
 
@@ -222,21 +228,22 @@
         assertNotNull(msg);
         msg.acknowledge();
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
-    @Test(timeout=90000)
+    @Test
+    @Timeout(90)
     public void testAckMarksAllConsumerMessageAsConsumed() throws Exception {
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
 
         final int MSG_COUNT = 30;
         final AtomicReference<Message> lastMessage = new AtomicReference<Message>();
@@ -263,36 +270,37 @@
             producer.send(session.createTextMessage("Hello: " + i));
         }
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(MSG_COUNT, proxy.getQueueSize());
 
-        assertTrue("Failed to consume all messages.", done.await(20, TimeUnit.SECONDS));
+        assertTrue(done.await(20, TimeUnit.SECONDS), "Failed to consume all messages.");
         assertNotNull(lastMessage.get());
-        assertTrue("Not all messages appear as in-flight.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getInFlightCount() == MSG_COUNT;
             }
-        }));
+        }), "Not all messages appear as in-flight.");
 
         lastMessage.get().acknowledge();
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testOnlyUnackedAreRecovered() throws Exception {
         connection = createAmqpConnection();
         connection.start();
         Session consumerSession = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = consumerSession.createQueue(name.getMethodName());
+        Queue queue = consumerSession.createQueue(testMethodName);
         MessageConsumer consumer = consumerSession.createConsumer(queue);
         Session producerSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         MessageProducer producer = producerSession.createProducer(queue);
@@ -328,7 +336,8 @@
         rec4.acknowledge();
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testReceiveSomeThenRecover() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -337,11 +346,11 @@
         int consumeBeforeRecover = 2;
 
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
 
         sendMessages(connection, queue, totalCount);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(totalCount, proxy.getQueueSize());
 
         MessageConsumer consumer = session.createConsumer(queue);
@@ -349,7 +358,7 @@
         for(int i = 1; i <= consumeBeforeRecover; i++) {
             Message message = consumer.receive(3000);
             assertNotNull(message);
-            assertEquals("Unexpected message number", i, message.getIntProperty(QpidJmsTestSupport.MESSAGE_NUMBER));
+            assertEquals(i, message.getIntProperty(QpidJmsTestSupport.MESSAGE_NUMBER), "Unexpected message number");
         }
 
         session.recover();
@@ -361,7 +370,7 @@
         List<Integer> messageNumbers = new ArrayList<Integer>();
         for (int i = 1; i <= totalCount; i++) {
             Message message = consumer.receive(3000);
-            assertNotNull("Failed to receive message: " + i, message);
+            assertNotNull(message, "Failed to receive message: " + i);
             int msgNum = message.getIntProperty(QpidJmsTestSupport.MESSAGE_NUMBER);
             messageNumbers.add(msgNum);
 
@@ -370,20 +379,21 @@
             }
         }
 
-        assertEquals("Unexpected size of list", totalCount, messageNumbers.size());
+        assertEquals(totalCount, messageNumbers.size(), "Unexpected size of list");
         for (int i = 0; i < messageNumbers.size(); i++) {
-            assertEquals("Unexpected order of messages: " + messageNumbers, Integer.valueOf(i + 1), messageNumbers.get(i));
+            assertEquals(Integer.valueOf(i + 1), messageNumbers.get(i), "Unexpected order of messages: " + messageNumbers);
         }
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testRecoverRedelivery() throws Exception {
         final CountDownLatch redelivery = new CountDownLatch(6);
         connection = createAmqpConnection();
         connection.start();
 
         final Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         consumer.setMessageListener(new MessageListener() {
@@ -410,12 +420,13 @@
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createTextMessage("test"));
 
-        assertTrue("we got 6 redeliveries", redelivery.await(20, TimeUnit.SECONDS));
+        assertTrue(redelivery.await(20, TimeUnit.SECONDS), "we got 6 redeliveries");
     }
 
     // TODO - Enable once broker prefetch is fully worked out.
-    @Ignore("Fails until Broker get it's prefetch issues resolved.")
-    @Test(timeout=60000)
+    @Disabled("Fails until Broker get it's prefetch issues resolved.")
+    @Test
+    @Timeout(60)
     public void testConsumeBeyondInitialPrefetch() throws Exception {
         final int MESSAGE_COUNT = 2000;
 
@@ -424,7 +435,7 @@
         connection.start();
 
         final Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         consumer.setMessageListener(new MessageListener() {
@@ -446,7 +457,7 @@
             producer.send(session.createTextMessage("test: message[" + (i + 1) + "]"));
         }
 
-        assertTrue("Failed to get all deliveries", consumed.await(45, TimeUnit.SECONDS));
+        assertTrue(consumed.await(45, TimeUnit.SECONDS), "Failed to get all deliveries");
     }
 
     /**
@@ -461,13 +472,14 @@
      *
      * @throws Exception on error during test
      */
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testRecoverInOnMessage() throws Exception {
         connection = createAmqpConnection();
 
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         sendMessages(connection, queue, 3);
@@ -478,11 +490,12 @@
 
         connection.start();
 
-        assertTrue("Timed out waiting for async listener", latch.await(10, TimeUnit.SECONDS));
-        assertFalse("Test failed in listener, consult logs", listener.getFailed());
+        assertTrue(latch.await(10, TimeUnit.SECONDS), "Timed out waiting for async listener");
+        assertFalse(listener.getFailed(), "Test failed in listener, consult logs");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testUnAckedAsyncMessagesGetRedeliveredMultipleTimes() throws Exception {
         final int MESSAGE_COUNT = 30;
         final int ITERATIONS = 20;
@@ -490,19 +503,19 @@
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         session.close();
 
         sendMessages(connection, queue, MESSAGE_COUNT);
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
-        assertTrue("Queue didn't receive all messages", Wait.waitFor(new Wait.Condition() {
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == MESSAGE_COUNT;
             }
-        }));
+        }), "Queue didn't receive all messages");
 
         for (int i = 0; i < ITERATIONS; ++i) {
             session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
@@ -531,16 +544,17 @@
             msg.acknowledge();
         }
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testRepeatedRecoveriesInAsyncListener() throws Exception {
         final int MESSAGE_COUNT = 20;
         final int ITERATIONS = 10;
@@ -551,18 +565,18 @@
         connection = createAmqpConnection();
         connection.start();
         final Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
 
         sendMessages(connection, queue, MESSAGE_COUNT);
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
-        assertTrue("Queue didn't receive all messages", Wait.waitFor(new Wait.Condition() {
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == MESSAGE_COUNT;
             }
-        }));
+        }), "Queue didn't receive all messages");
 
         // Consume the message...
         MessageConsumer consumer = session.createConsumer(queue);
@@ -605,24 +619,24 @@
             }
         });
 
-        assertTrue("Not all messages could be consumed, got " + messagesConsumed.get(), Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 LOG.info("Are we complete: error:{} nessages read:{}", failure.get(), messagesConsumed.get());
                 return failure.get() != null || messagesConsumed.get() == MESSAGE_COUNT;
             }
-        }));
+        }), "Not all messages could be consumed, got " + messagesConsumed.get());
 
-        assertNull("Should not get any failures during this test", failure.get());
+        assertNull(failure.get(), "Should not get any failures during this test");
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
     private static class ClientAckRecoverMsgListener implements MessageListener {
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsConsumerPriorityDispatchTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsConsumerPriorityDispatchTest.java
index a8592b4..f73b895 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsConsumerPriorityDispatchTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsConsumerPriorityDispatchTest.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.assertNotNull;
-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.assertTrue;
 
 import java.net.URI;
 import java.util.concurrent.CountDownLatch;
@@ -35,7 +35,8 @@
 import org.apache.qpid.jms.JmsConnectionListener;
 import org.apache.qpid.jms.message.JmsInboundMessageDispatch;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test for Message priority ordering.
@@ -44,7 +45,8 @@
 
     private final int MSG_COUNT = 10;
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testPrefetchedMessageArePriorityOrdered() throws Exception {
 
         final CountDownLatch received = new CountDownLatch(MSG_COUNT);
@@ -91,7 +93,7 @@
 
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         MessageConsumer consumer = session.createConsumer(queue);
         Message message = null;
@@ -103,7 +105,7 @@
         }
 
         // We need to make sure that all messages are in the prefetch buffer.
-        assertTrue("Failed to receive all messages", received.await(10, TimeUnit.SECONDS));
+        assertTrue(received.await(10, TimeUnit.SECONDS), "Failed to receive all messages");
 
         for (int i = MSG_COUNT - 1; i >= 0; i--) {
             message = consumer.receive(5000);
@@ -112,7 +114,8 @@
         }
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testPrefetchedMessageAreNotPriorityOrdered() throws Exception {
         // We are assuming that Broker side priority support is not enabled in the create broker
         // method in AmqpTestSupport.  If that changes then this test will sometimes fail.
@@ -157,12 +160,12 @@
             }
         });
 
-        assertFalse("Client side priority ordering expected to be disabled for this test",
-                    jmsConnection.isLocalMessagePriority());
+        assertFalse(jmsConnection.isLocalMessagePriority(),
+                    "Client side priority ordering expected to be disabled for this test");
 
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         MessageConsumer consumer = session.createConsumer(queue);
         Message message = null;
@@ -174,7 +177,7 @@
         }
 
         // We need to make sure that all messages are in the prefetch buffer.
-        assertTrue("Failed to receive all messages", received.await(10, TimeUnit.SECONDS));
+        assertTrue(received.await(10, TimeUnit.SECONDS), "Failed to receive all messages");
 
         for (int i = 0; i < 10; i++) {
             message = consumer.receive(5000);
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsDupsOkTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsDupsOkTest.java
index 5d11cb6..fa14320 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsDupsOkTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsDupsOkTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.consumer;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+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 java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -31,7 +31,8 @@
 import jakarta.jms.Session;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -51,13 +52,14 @@
      *
      * @throws Exception on error during test.
      */
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testRecoverInOnMessage() throws Exception {
         connection = createAmqpConnection();
 
         Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         sendMessages(connection, queue, 3);
@@ -68,8 +70,8 @@
 
         connection.start();
 
-        assertTrue("Timed out waiting for async listener", latch.await(10, TimeUnit.SECONDS));
-        assertFalse("Test failed in listener, consult logs", listener.getFailed());
+        assertTrue(latch.await(10, TimeUnit.SECONDS), "Timed out waiting for async listener");
+        assertFalse(listener.getFailed(), "Test failed in listener, consult logs");
     }
 
     private static class DupsOkRecoverMsgListener implements MessageListener {
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsDurableSubscriberTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsDurableSubscriberTest.java
index b8003cb..3d63303 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsDurableSubscriberTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsDurableSubscriberTest.java
@@ -16,11 +16,11 @@
  */
 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.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;
@@ -41,7 +41,8 @@
 import org.apache.qpid.jms.policy.JmsDefaultPresettlePolicy;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-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,10 +61,11 @@
     }
 
     public String getSubscriptionName() {
-        return name.getMethodName() + "-subscriber";
+        return testMethodName + "-subscriber";
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateDurableSubscriber() throws Exception {
         connection = createAmqpConnection();
         connection.setClientID("DURABLE-AMQP");
@@ -74,10 +76,10 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Topic topic = session.createTopic(name.getMethodName());
+        Topic topic = session.createTopic(testMethodName);
         MessageConsumer consumer = session.createDurableSubscriber(topic, getSubscriptionName());
 
-        TopicViewMBean proxy = getProxyToTopic(name.getMethodName());
+        TopicViewMBean proxy = getProxyToTopic(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         assertEquals(1, brokerService.getAdminView().getDurableTopicSubscribers().length);
@@ -91,7 +93,8 @@
         session.unsubscribe(getSubscriptionName());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testDurableSubscriptionUnsubscribe() throws Exception {
         connection = createAmqpConnection();
         connection.setClientID("DURABLE-AMQP");
@@ -102,7 +105,7 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Topic topic = session.createTopic(name.getMethodName());
+        Topic topic = session.createTopic(testMethodName);
         session.createDurableSubscriber(topic, getSubscriptionName()).close();
 
         BrokerViewMBean broker = getProxyToBroker();
@@ -114,7 +117,8 @@
         assertEquals(0, broker.getDurableTopicSubscribers().length);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testDurableSubscriptionUnsubscribeNoExistingSubThrowsJMSEx() throws Exception {
         connection = createAmqpConnection();
         connection.setClientID("DURABLE-AMQP");
@@ -137,7 +141,8 @@
         }
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testDurableSubscriptionUnsubscribeInUseThrowsAndRecovers() throws Exception {
         connection = createAmqpConnection();
         connection.setClientID("DURABLE-AMQP");
@@ -148,7 +153,7 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Topic topic = session.createTopic(name.getMethodName());
+        Topic topic = session.createTopic(testMethodName);
         MessageConsumer consumer = session.createDurableSubscriber(topic, getSubscriptionName());
         assertNotNull(consumer);
 
@@ -176,7 +181,8 @@
         assertEquals(0, broker.getInactiveDurableTopicSubscribers().length);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testDurableGoesOfflineAndReturns() throws Exception {
         connection = createAmqpConnection();
         connection.setClientID("DURABLE-AMQP");
@@ -187,10 +193,10 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Topic topic = session.createTopic(name.getMethodName());
+        Topic topic = session.createTopic(testMethodName);
         TopicSubscriber subscriber = session.createDurableSubscriber(topic, getSubscriptionName());
 
-        TopicViewMBean proxy = getProxyToTopic(name.getMethodName());
+        TopicViewMBean proxy = getProxyToTopic(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         assertEquals(1, brokerService.getAdminView().getDurableTopicSubscribers().length);
@@ -211,7 +217,8 @@
         session.unsubscribe(getSubscriptionName());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testOfflineSubscriberGetsItsMessages() throws Exception {
         connection = createAmqpConnection();
         connection.setClientID("DURABLE-AMQP");
@@ -224,10 +231,10 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Topic topic = session.createTopic(name.getMethodName());
+        Topic topic = session.createTopic(testMethodName);
         TopicSubscriber subscriber = session.createDurableSubscriber(topic, getSubscriptionName());
 
-        TopicViewMBean proxy = getProxyToTopic(name.getMethodName());
+        TopicViewMBean proxy = getProxyToTopic(testMethodName);
         assertEquals(0, proxy.getQueueSize());
         assertEquals(1, brokerService.getAdminView().getDurableTopicSubscribers().length);
         assertEquals(0, brokerService.getAdminView().getInactiveDurableTopicSubscribers().length);
@@ -259,7 +266,7 @@
             }
         });
 
-        assertTrue("Only recieved messages: " + messages.getCount(), messages.await(30, TimeUnit.SECONDS));
+        assertTrue(messages.await(30, TimeUnit.SECONDS), "Only recieved messages: " + messages.getCount());
 
         subscriber.close();
 
@@ -313,20 +320,20 @@
         // Durable now goes inactive.
         durableSubscriber.close();
 
-        assertTrue("Should have no durables.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getDurableTopicSubscribers().length == 0;
             }
-        }));
-        assertTrue("Should have an inactive sub.", Wait.waitFor(new Wait.Condition() {
+        }), "Should have no durables.");
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getInactiveDurableTopicSubscribers().length == 1;
             }
-        }));
+        }), "Should have an inactive sub.");
 
         LOG.debug("Testing that updated noLocal=false subscription does get any messages.");
 
@@ -349,7 +356,7 @@
         // Durable subscriber should receive them
         for (int i = 0; i < MSG_COUNT; ++i) {
             Message message = durableSubscriber.receive(5000);
-            assertNotNull("Should get local messages now", message);
+            assertNotNull(message, "Should get local messages now");
         }
 
         durableSubscriber.close();
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerTest.java
index 8ae2bfd..e203c30 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsMessageConsumerTest.java
@@ -16,10 +16,10 @@
  */
 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.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.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -42,7 +42,8 @@
 import org.apache.qpid.jms.JmsMessageConsumer;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -58,73 +59,77 @@
         return true;
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateMessageConsumer() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         session.createConsumer(queue);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testSyncConsumeFromQueue() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         sendToAmqQueue(1);
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
-        assertNotNull("Failed to receive any message.", consumer.receive(3000));
+        assertNotNull(consumer.receive(3000), "Failed to receive any message.");
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testSyncConsumeFromTopic() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Topic topic = session.createTopic(name.getMethodName());
+        Topic topic = session.createTopic(testMethodName);
         MessageConsumer consumer = session.createConsumer(topic);
 
         sendToAmqTopic(1);
 
-        final TopicViewMBean proxy = getProxyToTopic(name.getMethodName());
+        final TopicViewMBean proxy = getProxyToTopic(testMethodName);
         assertEquals(1, proxy.getEnqueueCount());
 
-        assertNotNull("Failed to receive any message.", consumer.receive(3000));
+        assertNotNull(consumer.receive(3000), "Failed to receive any message.");
 
-        assertTrue("Published message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Published message not consumed.");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testMessageAvailableConsumer() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -134,7 +139,7 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
         ((JmsMessageConsumer) consumer).setAvailableListener(new JmsMessageAvailableListener() {
 
@@ -146,29 +151,29 @@
 
         sendToAmqQueue(MSG_COUNT);
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(MSG_COUNT, proxy.getQueueSize());
 
-        assertTrue("Listener not notified of correct number of messages.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return available.get() == MSG_COUNT;
             }
-        }));
+        }), "Listener not notified of correct number of messages.");
 
         // All should be immediately ready for consume.
         for (int i = 0; i < MSG_COUNT; ++i) {
             assertNotNull(consumer.receiveNoWait());
         }
 
-        assertTrue("Queued message not consumed.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 0;
             }
-        }));
+        }), "Queued message not consumed.");
     }
 
     /**
@@ -180,14 +185,15 @@
      *
      * @throws Exception on error found during test run.
      */
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConsumerReceiveBeforeMessageDispatched() throws Exception {
         final Connection connection = createAmqpConnection();
         this.connection = connection;
         connection.start();
 
         final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        final Queue queue = session.createQueue(name.getMethodName());
+        final Queue queue = session.createQueue(testMethodName);
 
         Thread t = new Thread() {
             @Override
@@ -207,7 +213,8 @@
         assertNotNull(msg);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAsynchronousMessageConsumption() throws Exception {
         final int msgCount = 4;
         final Connection connection = createAmqpConnection();
@@ -217,7 +224,7 @@
 
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue destination = session.createQueue(name.getMethodName());
+        Queue destination = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(destination);
 
         consumer.setMessageListener(new MessageListener() {
@@ -236,7 +243,8 @@
         assertEquals(msgCount, counter.get());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testMessagesAreAckedAMQProducer() throws Exception {
         int messagesSent = 3;
         assertTrue(brokerService.isPersistent());
@@ -244,7 +252,7 @@
         javax.jms.Connection conn = createActiveMQConnection();
         try {
             javax.jms.Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-            javax.jms.Queue queue = session.createQueue(name.getMethodName());
+            javax.jms.Queue queue = session.createQueue(testMethodName);
             javax.jms.MessageProducer p = session.createProducer(queue);
             javax.jms.TextMessage message = null;
             for (int i = 0; i < messagesSent; i++) {
@@ -260,24 +268,25 @@
 
         // After the first restart we should get all messages sent above
         restartPrimaryBroker();
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(messagesSent, proxy.getQueueSize());
         int messagesReceived = readAllMessages();
         assertEquals(messagesSent, messagesReceived);
 
         // This time there should be no messages on this queue
         restartPrimaryBroker();
-        proxy = getProxyToQueue(name.getMethodName());
+        proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testMessagesAreAckedAMQPProducer() throws Exception {
         int messagesSent = 3;
 
         connection = createAmqpConnection();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         producer.setDeliveryMode(DeliveryMode.PERSISTENT);
         TextMessage message = null;
@@ -293,14 +302,14 @@
 
         // After the first restart we should get all messages sent above
         restartPrimaryBroker();
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(messagesSent, proxy.getQueueSize());
         int messagesReceived = readAllMessages();
         assertEquals(messagesSent, messagesReceived);
 
         // This time there should be no messages on this queue
         restartPrimaryBroker();
-        proxy = getProxyToQueue(name.getMethodName());
+        proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
     }
 
@@ -313,7 +322,7 @@
         connection.start();
         try {
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-            Queue queue = session.createQueue(name.getMethodName());
+            Queue queue = session.createQueue(testMethodName);
             int messagesReceived = 0;
             MessageConsumer consumer;
 
@@ -340,12 +349,13 @@
         }
     }
 
-    @Test(timeout=30000)
-    public void testSelectors() throws Exception{
+    @Test
+    @Timeout(30)
+    public void testSelectors() throws Exception {
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer p = session.createProducer(queue);
 
         TextMessage message = session.createTextMessage();
@@ -358,23 +368,24 @@
 
         p.close();
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(2, proxy.getQueueSize());
 
         MessageConsumer consumer = session.createConsumer(queue, "JMSPriority > 8");
         Message msg = consumer.receive(5000);
-        assertNotNull("No message was recieved", msg);
+        assertNotNull(msg, "No message was recieved");
         assertTrue(msg instanceof TextMessage);
         assertEquals("hello + 9", ((TextMessage) msg).getText());
         assertNull(consumer.receive(1000));
     }
 
-    @Test(timeout=45000)
+    @Test
+    @Timeout(45)
     public void testSelectorsWithJMSType() throws Exception {
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
 
         TextMessage message = session.createTextMessage();
@@ -389,20 +400,20 @@
 
         producer.close();
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
-        assertTrue("Queue did not get all expected messages", Wait.waitFor(new Wait.Condition() {
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == 2;
             }
-        }));
+        }), "Queue did not get all expected messages");
 
         MessageConsumer consumer = session.createConsumer(queue, "JMSType = '" + type + "'");
         Message msg = consumer.receive(5000);
-        assertNotNull("No message was recieved", msg);
+        assertNotNull(msg, "No message was recieved");
         assertTrue(msg instanceof TextMessage);
-        assertEquals("Unexpected JMSType value", type, msg.getJMSType());
-        assertEquals("Unexpected message content", "text + type", ((TextMessage) msg).getText());
+        assertEquals(type, msg.getJMSType(), "Unexpected JMSType value");
+        assertEquals("text + type", ((TextMessage) msg).getText(), "Unexpected message content");
     }
 }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsMessageGroupTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsMessageGroupTest.java
index dc9a1ba..02b5c50 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsMessageGroupTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsMessageGroupTest.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.Connection;
 import jakarta.jms.Message;
@@ -29,7 +29,8 @@
 import jakarta.jms.TextMessage;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,12 +38,13 @@
 
     private static final Logger LOG = LoggerFactory.getLogger(JmsMessageGroupTest.class);
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testGroupedMessagesDeliveredToOnlyOneConsumer() throws Exception {
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer1 = session.createConsumer(queue);
         MessageProducer producer = session.createProducer(queue);
 
@@ -59,7 +61,7 @@
         // the first 3
         for (int i = 0; i < 3; i++) {
             TextMessage m1 = (TextMessage) consumer1.receive(3000);
-            assertNotNull("m1 is null for index: " + i, m1);
+            assertNotNull(m1, "m1 is null for index: " + i);
             assertEquals(m1.getIntProperty("JMSXGroupSeq"), i + 1);
         }
 
@@ -75,13 +77,13 @@
         // The last messages should now go the the second consumer.
         for (int i = 0; i < 1; i++) {
             TextMessage m1 = (TextMessage) consumer2.receive(3000);
-            assertNotNull("m1 is null for index: " + i, m1);
+            assertNotNull(m1, "m1 is null for index: " + i);
             assertEquals(m1.getIntProperty("JMSXGroupSeq"), 4 + i);
         }
 
         // assert that there are no other messages left for the consumer 2
         Message m = consumer2.receive(100);
-        assertNull("consumer 2 has some messages left", m);
+        assertNull(m, "consumer 2 has some messages left");
         connection1.close();
     }
 }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java
index 057f40c..d6afe82 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsQueueBrowserTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/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.assertNotNull;
-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.assertTrue;
 
 import java.util.Enumeration;
 import java.util.concurrent.TimeUnit;
@@ -36,7 +36,8 @@
 import org.apache.qpid.jms.JmsConnection;
 import org.apache.qpid.jms.policy.JmsDefaultPrefetchPolicy;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-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 @@
 
     protected static final Logger LOG = LoggerFactory.getLogger(JmsQueueBrowserTest.class);
 
-    @Test(timeout = 40000)
+    @Test
+    @Timeout(40)
     public void testCreateQueueBrowser() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -65,7 +67,8 @@
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout = 40000)
+    @Test
+    @Timeout(40)
     public void testNoMessagesBrowserHasNoElements() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -85,7 +88,8 @@
         assertFalse(enumeration.hasMoreElements());
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testBroseOneInQueue() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -112,7 +116,8 @@
         assertTrue(msg instanceof TextMessage);
     }
 
-    @Test(timeout = 40000)
+    @Test
+    @Timeout(40)
     public void testBrowseAllInQueue() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -140,7 +145,8 @@
         assertEquals(5, count);
     }
 
-    @Test(timeout = 40000)
+    @Test
+    @Timeout(40)
     public void testBrowseAllInQueuePrefetchOne() throws Exception {
         connection = createAmqpConnection();
 
@@ -171,7 +177,8 @@
         assertEquals(5, count);
     }
 
-    @Test(timeout = 40000)
+    @Test
+    @Timeout(40)
     public void testBrowseAllInQueueZeroPrefetch() throws Exception {
         connection = createAmqpConnection();
 
@@ -202,7 +209,8 @@
         assertEquals(5, count);
     }
 
-    @Test(timeout = 40000)
+    @Test
+    @Timeout(40)
     public void testBrowseAllInQueueTxSession() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -229,7 +237,8 @@
         assertEquals(5, count);
     }
 
-    @Test(timeout = 40000)
+    @Test
+    @Timeout(40)
     public void testQueueBrowserInTxSessionLeavesOtherWorkUnaffected() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -272,7 +281,8 @@
         assertEquals(10, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testBrowseAllInQueueSmallPrefetch() throws Exception {
         connection = createAmqpConnection();
         ((JmsDefaultPrefetchPolicy) ((JmsConnection) connection).getPrefetchPolicy()).setQueueBrowserPrefetch(1);
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsZeroPrefetchTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsZeroPrefetchTest.java
index d4dec5e..edf57ac 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsZeroPrefetchTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/consumer/JmsZeroPrefetchTest.java
@@ -16,10 +16,10 @@
  */
 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.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 jakarta.jms.Message;
 import jakarta.jms.MessageConsumer;
@@ -33,7 +33,8 @@
 import org.apache.qpid.jms.policy.JmsDefaultRedeliveryPolicy;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test for MessageConsumer that has a prefetch value of zero.
@@ -45,7 +46,8 @@
         return "jms.prefetchPolicy.all=0";
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testBlockingReceivesUnBlocksOnMessageSend() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -70,7 +72,7 @@
 
         MessageConsumer consumer = session.createConsumer(queue);
         Message answer = consumer.receive();
-        assertNotNull("Should have received a message!", answer);
+        assertNotNull(answer, "Should have received a message!");
 
         final QueueViewMBean queueView = getProxyToQueue(getDestinationName());
 
@@ -85,7 +87,8 @@
         }));
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testRepeatedPullAttempts() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -98,16 +101,17 @@
         // now lets receive it
         MessageConsumer consumer = session.createConsumer(queue);
         Message answer = consumer.receive(5000);
-        assertNotNull("Should have received a message!", answer);
+        assertNotNull(answer, "Should have received a message!");
 
         // check if method will return at all and will return a null
         answer = consumer.receive(1);
-        assertNull("Should have not received a message!", answer);
+        assertNull(answer, "Should have not received a message!");
         answer = consumer.receiveNoWait();
-        assertNull("Should have not received a message!", answer);
+        assertNull(answer, "Should have not received a message!");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testTwoConsumers() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -124,16 +128,17 @@
         MessageConsumer consumer2 = session.createConsumer(queue);
         TextMessage answer = (TextMessage)consumer1.receive(5000);
         assertNotNull(answer);
-        assertEquals("Should have received a message!", answer.getText(), "Msg1");
+        assertEquals(answer.getText(), "Msg1", "Should have received a message!");
         answer = (TextMessage)consumer2.receive(5000);
         assertNotNull(answer);
-        assertEquals("Should have received a message!", answer.getText(), "Msg2");
+        assertEquals(answer.getText(), "Msg2", "Should have received a message!");
 
         answer = (TextMessage)consumer2.receiveNoWait();
-        assertNull("Should have not received a message!", answer);
+        assertNull(answer, "Should have not received a message!");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConsumerWithNoMessageDoesNotHogMessages() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -155,10 +160,11 @@
         MessageConsumer consumer2 = session.createConsumer(queue);
         TextMessage answer = (TextMessage)consumer2.receive(3000);
         assertNotNull(answer);
-        assertEquals("Should have received a message!", answer.getText(), "Msg1");
+        assertEquals(answer.getText(), "Msg1", "Should have received a message!");
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testConsumerReceivePrefetchZeroRedeliveryZero() throws Exception {
         connection = createAmqpConnection();
         connection.start();
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/destinations/JmsTemporaryQueueTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/destinations/JmsTemporaryQueueTest.java
index c702dc5..345be9b 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/destinations/JmsTemporaryQueueTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/destinations/JmsTemporaryQueueTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.destinations;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-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.fail;
 
 import jakarta.jms.Connection;
 import jakarta.jms.IllegalStateException;
@@ -30,7 +30,8 @@
 import jakarta.jms.TemporaryQueue;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,7 +42,8 @@
 
     protected static final Logger LOG = LoggerFactory.getLogger(JmsTemporaryQueueTest.class);
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateTemporaryQueue() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -54,7 +56,8 @@
         assertEquals(1, brokerService.getAdminView().getTemporaryQueues().length);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCantConsumeFromTemporaryQueueCreatedOnAnotherConnection() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -77,7 +80,8 @@
         }
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCantSendToTemporaryQueueFromClosedConnection() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -105,7 +109,8 @@
         }
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCantDeleteTemporaryQueueWithConsumers() throws Exception {
         connection = createAmqpConnection();
         connection.start();
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/destinations/JmsTemporaryTopicTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/destinations/JmsTemporaryTopicTest.java
index 80d1ced..ae804c3 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/destinations/JmsTemporaryTopicTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/destinations/JmsTemporaryTopicTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.destinations;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-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.fail;
 
 import jakarta.jms.Connection;
 import jakarta.jms.IllegalStateException;
@@ -30,7 +30,8 @@
 import jakarta.jms.TemporaryTopic;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,7 +42,8 @@
 
     protected static final Logger LOG = LoggerFactory.getLogger(JmsTemporaryTopicTest.class);
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateTemporaryTopic() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -54,7 +56,8 @@
         assertEquals(1, brokerService.getAdminView().getTemporaryTopics().length);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCantConsumeFromTemporaryTopicCreatedOnAnotherConnection() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -77,7 +80,8 @@
         }
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCantSendToTemporaryTopicFromClosedConnection() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -105,7 +109,8 @@
         }
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCantDeleteTemporaryTopicWithConsumers() throws Exception {
         connection = createAmqpConnection();
         connection.start();
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/FileWatcherDiscoveryTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/FileWatcherDiscoveryTest.java
index 39044b1..06e5d6f 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/FileWatcherDiscoveryTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/FileWatcherDiscoveryTest.java
@@ -16,12 +16,14 @@
  */
 package org.apache.qpid.jms.discovery;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -35,10 +37,11 @@
 import org.apache.qpid.jms.JmsConnectionListener;
 import org.apache.qpid.jms.message.JmsInboundMessageDispatch;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
+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.junit.jupiter.api.io.TempDir;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,8 +53,8 @@
 
     private static final Logger LOG = LoggerFactory.getLogger(FileWatcherDiscoveryTest.class);
 
-    @Rule
-    public TemporaryFolder folder = new TemporaryFolder(new File("./target"));
+    @TempDir
+    public Path folder;
 
     private CountDownLatch connected;
     private CountDownLatch interrupted;
@@ -62,53 +65,56 @@
     private File secondaryBrokerList;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         connected = new CountDownLatch(1);
         interrupted = new CountDownLatch(1);
         restored = new CountDownLatch(1);
 
-        primaryBrokerList = folder.newFile("primaryBrokerURIsFile.txt");
-        secondaryBrokerList = folder.newFile("secondaryBrokerURIsFile.txt");
+        primaryBrokerList = Files.createFile(folder.resolve("primaryBrokerURIsFile.txt")).toFile();
+        secondaryBrokerList =  Files.createFile(folder.resolve("secondaryBrokerURIsFile.txt")).toFile();
 
         LOG.info("Broker URIs going to file: {}", primaryBrokerList);
 
         writeOutBrokerURIsToFile(primaryBrokerList);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConnectedToStoredBrokerURI() throws Exception {
         assertTrue(primaryBrokerList.exists());
 
         connection = createConnection();
         connection.start();
 
-        assertTrue("connection never connected.", connected.await(30, TimeUnit.SECONDS));
+        assertTrue(connected.await(30, TimeUnit.SECONDS), "connection never connected.");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testReconnectWhenURIUpdates() throws Exception {
         assertTrue(primaryBrokerList.exists());
 
         connection = createConnection();
         connection.start();
 
-        assertTrue("connection never connected.", connected.await(30, TimeUnit.SECONDS));
+        assertTrue(connected.await(30, TimeUnit.SECONDS), "connection never connected.");
 
         stopPrimaryBroker();
 
-        assertTrue("connection should be interrupted.", interrupted.await(30, TimeUnit.SECONDS));
+        assertTrue(interrupted.await(30, TimeUnit.SECONDS), "connection should be interrupted.");
 
         startPrimaryBroker();
 
         writeOutBrokerURIsToFile(primaryBrokerList);
 
-        assertTrue("connection should have been reestablished.", restored.await(30, TimeUnit.SECONDS));
+        assertTrue(restored.await(30, TimeUnit.SECONDS), "connection should have been reestablished.");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testReconnectUsingTwoFiles() throws Exception {
         assertTrue(primaryBrokerList.exists());
         assertTrue(secondaryBrokerList.exists());
@@ -116,45 +122,46 @@
         connection = createConnection(new File[]{ primaryBrokerList, secondaryBrokerList });
         connection.start();
 
-        assertTrue("connection never connected.", connected.await(30, TimeUnit.SECONDS));
+        assertTrue(connected.await(30, TimeUnit.SECONDS), "connection never connected.");
 
         stopPrimaryBroker();
 
-        assertTrue("connection should be interrupted.", interrupted.await(30, TimeUnit.SECONDS));
+        assertTrue(interrupted.await(30, TimeUnit.SECONDS), "connection should be interrupted.");
 
         startPrimaryBroker();
 
         writeOutBrokerURIsToFile(secondaryBrokerList);
 
-        assertTrue("connection should have been reestablished.", restored.await(30, TimeUnit.SECONDS));
+        assertTrue(restored.await(30, TimeUnit.SECONDS), "connection should have been reestablished.");
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testWithInitiallyNonExistingFile() throws Exception {
         assertTrue(primaryBrokerList.exists());
 
         final String FILENAME = "nonExistentFile.txt";
 
-        File nonExistentFile = new File(folder.getRoot(), FILENAME);
+        File nonExistentFile = new File(folder.toFile(), FILENAME);
         assertFalse(nonExistentFile.exists());
 
         connection = createConnection(new File[]{ primaryBrokerList, nonExistentFile });
         connection.start();
 
-        assertTrue("connection never connected.", connected.await(30, TimeUnit.SECONDS));
+        assertTrue(connected.await(30, TimeUnit.SECONDS), "connection never connected.");
 
         stopPrimaryBroker();
 
-        assertTrue("connection should be interrupted.", interrupted.await(30, TimeUnit.SECONDS));
+        assertTrue(interrupted.await(30, TimeUnit.SECONDS), "connection should be interrupted.");
 
         startPrimaryBroker();
 
-        folder.newFile(FILENAME);
+        Files.createFile(folder.resolve(FILENAME));
         assertTrue(nonExistentFile.exists());
 
         writeOutBrokerURIsToFile(nonExistentFile);
 
-        assertTrue("connection should have been reestablished.", restored.await(30, TimeUnit.SECONDS));
+        assertTrue(restored.await(30, TimeUnit.SECONDS), "connection should have been reestablished.");
     }
 
     protected Connection createConnection() throws Exception {
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/JmsAmqpDiscoveryTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/JmsAmqpDiscoveryTest.java
index 14050e9..057aec1 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/JmsAmqpDiscoveryTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/JmsAmqpDiscoveryTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.discovery;
 
-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.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import java.net.URI;
 import java.util.concurrent.CountDownLatch;
@@ -39,8 +39,10 @@
 import org.apache.qpid.jms.support.MulticastTestSupport;
 import org.apache.qpid.jms.support.MulticastTestSupport.MulticastSupportResult;
 import org.apache.qpid.jms.support.Wait;
-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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,20 +69,21 @@
     private JmsConnection jmsConnection;
 
     @Override
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
         // Check assumptions *before* trying to start
         // the broker, which may fail otherwise
-        assumeTrue("Multicast does not seem to be working, skip!", multicastWorking);
+        assumeTrue(multicastWorking, "Multicast does not seem to be working, skip!");
 
-        super.setUp();
+        super.setUp(testInfo);
 
         connected = new CountDownLatch(1);
         interrupted = new CountDownLatch(1);
         restored = new CountDownLatch(1);
     }
 
-    @Test(timeout=10000)
+    @Test
+    @Timeout(10)
     public void testFailureToDiscoverLeadsToConnectionFailure() throws Exception {
         // We are using a different group to ensure failure,
         // but shut down the broker anyway.
@@ -93,51 +96,54 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testRunningBrokerIsDiscovered() throws Exception {
         connection = createConnection();
         connection.start();
 
-        assertTrue("connection never connected.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return jmsConnection.isConnected();
             }
-        }));
+        }), "connection never connected.");
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testConnectionFailsWhenBrokerGoesDown() throws Exception {
         connection = createConnection();
         connection.start();
 
-        assertTrue("connection never connected.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return jmsConnection.isConnected();
             }
-        }));
+        }), "connection never connected.");
 
         LOG.info("Connection established, stopping broker.");
         stopPrimaryBroker();
 
-        assertTrue("Interrupted event never fired", interrupted.await(10, TimeUnit.SECONDS));
+        assertTrue(interrupted.await(10, TimeUnit.SECONDS), "Interrupted event never fired");
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testConnectionRestoresAfterBrokerRestarted() throws Exception {
         connection = createConnection();
         connection.start();
 
-        assertTrue("connection never connected.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return jmsConnection.isConnected();
             }
-        }));
+        }), "connection never connected.");
 
         stopPrimaryBroker();
         assertTrue(interrupted.await(10, TimeUnit.SECONDS));
@@ -145,18 +151,19 @@
         assertTrue(restored.await(10, TimeUnit.SECONDS));
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testDiscoversAndReconnectsToSecondaryBroker() throws Exception {
         connection = createConnection();
         connection.start();
 
-        assertTrue("connection never connected.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return jmsConnection.isConnected();
             }
-        }));
+        }), "connection never connected.");
 
         startNewBroker();
         stopPrimaryBroker();
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/JmsDiscoveryProviderTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/JmsDiscoveryProviderTest.java
index 447311c..4430084 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/JmsDiscoveryProviderTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/discovery/JmsDiscoveryProviderTest.java
@@ -16,9 +16,10 @@
  */
 package org.apache.qpid.jms.discovery;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import java.io.IOException;
 import java.net.URI;
@@ -30,11 +31,10 @@
 import org.apache.qpid.jms.provider.discovery.DiscoveryProviderFactory;
 import org.apache.qpid.jms.support.MulticastTestSupport;
 import org.apache.qpid.jms.support.MulticastTestSupport.MulticastSupportResult;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,15 +53,13 @@
         multicastWorking = msr.isMulticastWorking();
     }
 
-    @Rule public TestName name = new TestName();
-
     private BrokerService broker;
 
-    @Before
+    @BeforeEach
     public void setup() throws Exception {
         // Check assumptions *before* trying to start
         // the broker, which may fail otherwise
-        assumeTrue("Multicast does not seem to be working, skip!", multicastWorking);
+        assumeTrue(multicastWorking, "Multicast does not seem to be working, skip!");
 
         broker = createBroker();
         try {
@@ -76,7 +74,7 @@
         }
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         if (broker != null) {
             broker.stop();
@@ -85,7 +83,8 @@
         }
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateDiscoveryProvider() throws Exception {
         URI discoveryUri = new URI("discovery:multicast://default");
         Provider provider = DiscoveryProviderFactory.create(discoveryUri);
@@ -97,7 +96,8 @@
         provider.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testStartFailsWithNoListener() throws Exception {
         URI discoveryUri = new URI("discovery:multicast://default");
         Provider provider =
@@ -113,11 +113,14 @@
         provider.close();
     }
 
-    @Test(timeout=30000, expected=IOException.class)
+    @Test
+    @Timeout(30)
     public void testCreateFailsWithUnknownAgent() throws Exception {
-        URI discoveryUri = new URI("discovery:unknown://default");
-        Provider provider = DiscoveryProviderFactory.create(discoveryUri);
-        provider.close();
+        assertThrows(IOException.class, () -> {
+            URI discoveryUri = new URI("discovery:unknown://default");
+            Provider provider = DiscoveryProviderFactory.create(discoveryUri);
+            provider.close();
+        });
     }
 
     protected BrokerService createBroker() throws Exception {
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsFailoverTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsFailoverTest.java
index 2115daa..c977edf 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsFailoverTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsFailoverTest.java
@@ -16,11 +16,12 @@
  */
 package org.apache.qpid.jms.failover;
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+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.concurrent.CountDownLatch;
@@ -42,7 +43,8 @@
 import org.apache.qpid.jms.JmsConnectionFactory;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Basic tests for the FailoverProvider implementation
@@ -54,7 +56,8 @@
         return true;
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testFailoverConnects() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
         Connection connection = createAmqpConnection(brokerURI);
@@ -62,7 +65,8 @@
         connection.close();
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testFailoverConnectsWithMultipleURIs() throws Exception {
         URI brokerURI = new URI("failover://(amqp://127.0.0.1:5678,amqp://localhost:5777," +
                                 getBrokerAmqpConnectionURI() + ")?failover.useReconnectBackOff=false");
@@ -71,22 +75,26 @@
         connection.close();
     }
 
-    @Test(timeout=30000, expected = JMSSecurityException.class)
+    @Test
+    @Timeout(30)
     public void testCreateConnectionAsUnknwonUser() throws Exception {
-        URI brokerURI = new URI(getAmqpFailoverURI() +
-            "?failover.maxReconnectAttempts=5");
+        assertThrows(JMSSecurityException.class, () -> {
+            URI brokerURI = new URI(getAmqpFailoverURI() +
+                "?failover.maxReconnectAttempts=5");
 
-        JmsConnectionFactory factory = new JmsConnectionFactory(brokerURI);
-        factory.setUsername("unknown");
-        factory.setPassword("unknown");
+            JmsConnectionFactory factory = new JmsConnectionFactory(brokerURI);
+            factory.setUsername("unknown");
+            factory.setPassword("unknown");
 
-        connection = factory.createConnection();
-        assertNotNull(connection);
-        connection.start();
-        connection.close();
+            connection = factory.createConnection();
+            assertNotNull(connection);
+            connection.start();
+            connection.close();
+        });
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testStartupReconnectAttempts() throws Exception {
         URI brokerURI = new URI("failover://(amqp://localhost:5677)" +
                                 "?failover.startupMaxReconnectAttempts=5" +
@@ -104,7 +112,8 @@
         }
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testStartupReconnectAttemptsMultipleHosts() throws Exception {
         URI brokerURI = new URI("failover://(amqp://localhost:5678,amqp://localhost:5677)" +
                                 "?failover.startupMaxReconnectAttempts=6" +
@@ -122,7 +131,8 @@
         }
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testStartFailureWithAsyncExceptionListener() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI() +
             "?failover.maxReconnectAttempts=5" +
@@ -143,10 +153,11 @@
 
         stopPrimaryBroker();
 
-        assertTrue("No async exception", failed.await(15, TimeUnit.SECONDS));
+        assertTrue(failed.await(15, TimeUnit.SECONDS), "No async exception");
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testBasicStateRestoration() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
@@ -154,7 +165,7 @@
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         session.createProducer(queue);
         session.createConsumer(queue);
 
@@ -163,74 +174,76 @@
 
         restartPrimaryBroker();
 
-        assertTrue("Should have a new connection.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getCurrentConnectionsCount() == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have a new connection.");
 
-        assertTrue("Should one new Queue Subscription.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getQueueSubscribers().length == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)), "Should one new Queue Subscription.");
 
-        assertTrue("Should one new Queue Producer.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getQueueProducers().length == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)), "Should one new Queue Producer.");
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testDurableSubscriberRestores() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
         connection = createAmqpConnection(brokerURI);
-        connection.setClientID(name.getMethodName());
+        connection.setClientID(testMethodName);
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Topic topic = session.createTopic(name.getMethodName());
-        MessageConsumer consumer = session.createDurableSubscriber(topic, name.getMethodName());
+        Topic topic = session.createTopic(testMethodName);
+        MessageConsumer consumer = session.createDurableSubscriber(topic, testMethodName);
         assertNotNull(consumer);
 
         assertEquals(1, brokerService.getAdminView().getDurableTopicSubscribers().length);
 
         restartPrimaryBroker();
 
-        assertTrue("Should have a new connection.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getCurrentConnectionsCount() == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have a new connection.");
 
-        assertTrue("Should have no inactive subscribers.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getInactiveDurableTopicSubscribers().length == 0;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have no inactive subscribers.");
 
-        assertTrue("Should have one durable sub.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getDurableTopicSubscribers().length == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have one durable sub.");
     }
 
-    @Test(timeout=90000)
+    @Test
+    @Timeout(90)
     public void testBadFirstURIConnectsAndProducerWorks() throws Exception {
         URI brokerURI = new URI("failover://(amqp://localhost:5679," + getBrokerAmqpConnectionURI() + ")");
 
@@ -239,7 +252,7 @@
 
         final int MSG_COUNT = 10;
         final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageProducer producer = session.createProducer(queue);
         producer.setDeliveryMode(DeliveryMode.PERSISTENT);
         final CountDownLatch failed = new CountDownLatch(1);
@@ -250,20 +263,21 @@
             producer.send(session.createTextMessage("Message: " + i));
         }
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
 
-        assertTrue("Should have all messages sent.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == MSG_COUNT;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have all messages sent.");
 
         assertFalse(failed.getCount() == 0);
     }
 
-    @Test(timeout=90000)
+    @Test
+    @Timeout(90)
     public void testNonTxProducerRecoversAfterFailover() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
@@ -272,7 +286,7 @@
 
         final int MSG_COUNT = 20;
         final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageProducer producer = session.createProducer(queue);
         producer.setDeliveryMode(DeliveryMode.PERSISTENT);
         final CountDownLatch failed = new CountDownLatch(1);
@@ -306,37 +320,38 @@
         TimeUnit.SECONDS.sleep(2);  // Gives FailoverProvider some CPU time
         restartPrimaryBroker();
 
-        assertTrue("Should have a new connection.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getCurrentConnectionsCount() == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have a new connection.");
 
-        assertTrue("Should have a recovered producer.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getQueueProducers().length == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)), "Should have a recovered producer.");
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
 
-        assertTrue("Should have all messages sent.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == MSG_COUNT;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)), "Should have all messages sent.");
 
         assertFalse(failed.getCount() == 0);
         connection.close();
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testPullConsumerTimedReceiveRecovers() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI() + "?jms.prefetchPolicy.all=0");
 
@@ -347,7 +362,7 @@
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageConsumer consumer = session.createConsumer(queue);
 
         Thread receiver = new Thread(new Runnable() {
@@ -374,29 +389,30 @@
 
         restartPrimaryBroker();
 
-        assertTrue("Should have a new connection.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getCurrentConnectionsCount() == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have a new connection.");
 
-        assertTrue("Should one new Queue Subscription.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getQueueSubscribers().length == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)), "Should one new Queue Subscription.");
 
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createMessage());
 
-        assertTrue("Consumer should have recovered", received.await(30, TimeUnit.SECONDS));
+        assertTrue(received.await(30, TimeUnit.SECONDS), "Consumer should have recovered");
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testPullConsumerReceiveRecovers() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI() + "?jms.prefetchPolicy.all=0");
 
@@ -407,7 +423,7 @@
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageConsumer consumer = session.createConsumer(queue);
 
         Thread receiver = new Thread(new Runnable() {
@@ -434,25 +450,25 @@
 
         restartPrimaryBroker();
 
-        assertTrue("Should have a new connection.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getCurrentConnectionsCount() == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have a new connection.");
 
-        assertTrue("Should one new Queue Subscription.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getQueueSubscribers().length == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)), "Should one new Queue Subscription.");
 
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createMessage());
 
-        assertTrue("Consumer should have recovered", received.await(30, TimeUnit.SECONDS));
+        assertTrue(received.await(30, TimeUnit.SECONDS), "Consumer should have recovered");
     }
 }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsOfflineBehaviorTests.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsOfflineBehaviorTests.java
index a883ab8..0804947 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsOfflineBehaviorTests.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsOfflineBehaviorTests.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.failover;
 
-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.net.URI;
 import java.util.List;
@@ -34,15 +34,17 @@
 import org.apache.qpid.jms.JmsConnection;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test various client behaviors when the connection has gone offline.
  */
 public class JmsOfflineBehaviorTests extends AmqpTestSupport {
 
-    @Test(timeout=60000)
-    public void testConnectionCloseDoesNotBlock() throws Exception {
+    @Test
+    @Timeout(60)
+    void testConnectionCloseDoesNotBlock() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
         Connection connection = createAmqpConnection(brokerURI);
         connection.start();
@@ -50,8 +52,9 @@
         connection.close();
     }
 
-    @Test(timeout=60000)
-    public void testSessionCloseDoesNotBlock() throws Exception {
+    @Test
+    @Timeout(60)
+    void testSessionCloseDoesNotBlock() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
         Connection connection = createAmqpConnection(brokerURI);
         connection.start();
@@ -61,14 +64,15 @@
         connection.close();
     }
 
-    @Test(timeout=60000)
-    public void testClientAckDoesNotBlock() throws Exception {
+    @Test
+    @Timeout(60)
+    void testClientAckDoesNotBlock() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
         Connection connection = createAmqpConnection(brokerURI);
         connection.start();
 
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
         MessageProducer producer = session.createProducer(queue);
         producer.send(session.createTextMessage("Test"));
@@ -81,14 +85,15 @@
         connection.close();
     }
 
-    @Test(timeout=60000)
-    public void testProducerCloseDoesNotBlock() throws Exception {
+    @Test
+    @Timeout(60)
+    void testProducerCloseDoesNotBlock() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
         Connection connection = createAmqpConnection(brokerURI);
         connection.start();
 
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
 
         stopPrimaryBroker();
@@ -96,14 +101,15 @@
         connection.close();
     }
 
-    @Test(timeout=60000)
-    public void testConsumerCloseDoesNotBlock() throws Exception {
+    @Test
+    @Timeout(60)
+    void testConsumerCloseDoesNotBlock() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
         Connection connection = createAmqpConnection(brokerURI);
         connection.start();
 
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         stopPrimaryBroker();
@@ -111,14 +117,15 @@
         connection.close();
     }
 
-    @Test(timeout=60000)
-    public void testSessionCloseWithOpenResourcesDoesNotBlock() throws Exception {
+    @Test
+    @Timeout(60)
+    void testSessionCloseWithOpenResourcesDoesNotBlock() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
         Connection connection = createAmqpConnection(brokerURI);
         connection.start();
 
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         session.createConsumer(queue);
         session.createProducer(queue);
 
@@ -127,8 +134,9 @@
         connection.close();
     }
 
-    @Test(timeout=60000)
-    public void testGetRemoteURI() throws Exception {
+    @Test
+    @Timeout(60)
+    void testGetRemoteURI() throws Exception {
 
         startNewBroker();
 
@@ -144,7 +152,7 @@
 
         stopPrimaryBroker();
 
-        assertTrue("Should connect to secondary URI.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
@@ -155,19 +163,20 @@
 
                 return false;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should connect to secondary URI.");
 
         connection.close();
     }
 
-    @Test(timeout=60000)
-    public void testClosedReourcesAreNotRestored() throws Exception {
+    @Test
+    @Timeout(60)
+    void testClosedReourcesAreNotRestored() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI() + "?failover.maxReconnectDelay=500");
         Connection connection = createAmqpConnection(brokerURI);
         connection.start();
 
         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         session.createConsumer(queue);
         session.createProducer(queue);
 
@@ -178,13 +187,13 @@
         session.close();
         restartPrimaryBroker();
 
-        assertTrue("Should have a new connection.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getCurrentConnectionsCount() == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have a new connection.");
 
         assertEquals(0, brokerService.getAdminView().getQueueSubscribers().length);
         assertEquals(0, brokerService.getAdminView().getQueueProducers().length);
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxConsumerFailoverTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxConsumerFailoverTest.java
index 75764ea..5604bbb 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxConsumerFailoverTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxConsumerFailoverTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.failover;
 
-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.net.URI;
 import java.util.concurrent.TimeUnit;
@@ -34,7 +34,8 @@
 import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test MessageConsumer behavior when in a TX and failover occurs.
@@ -50,7 +51,8 @@
      * Test that the TX doesn't start until the first ack so a failover
      * before that should allow Commit to work as expected.
      */
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testTxConsumerReceiveAfterFailoverCommits() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
@@ -59,35 +61,35 @@
 
         final int MSG_COUNT = 5;
         final Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageConsumer consumer = session.createConsumer(queue);
 
         sendMessages(connection, queue, MSG_COUNT);
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(MSG_COUNT, proxy.getQueueSize());
 
         stopPrimaryBroker();
         restartPrimaryBroker();
 
-        assertTrue("Should have a new connection.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getCurrentConnectionsCount() == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have a new connection.");
 
-        assertTrue("Should have a recovered consumer.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getQueueSubscribers().length == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)), "Should have a recovered consumer.");
 
         for (int i = 0; i < MSG_COUNT; ++i) {
             Message received = consumer.receive(3000);
-            assertNotNull("Mesage was not expected but not received", received);
+            assertNotNull(received, "Mesage was not expected but not received");
         }
 
         try {
@@ -100,7 +102,8 @@
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testTxConsumerReceiveThenFailoverCommitFails() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
@@ -109,22 +112,22 @@
 
         final int MSG_COUNT = 5;
         final Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageConsumer consumer = session.createConsumer(queue);
 
         sendMessages(connection, queue, MSG_COUNT);
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(MSG_COUNT, proxy.getQueueSize());
 
         for (int i = 0; i < MSG_COUNT; ++i) {
             Message received = consumer.receive(3000);
-            assertNotNull("Mesage was not expected but not received", received);
+            assertNotNull(received, "Mesage was not expected but not received");
         }
 
         stopPrimaryBroker();
         restartPrimaryBroker();
 
-        proxy = getProxyToQueue(name.getMethodName());
+        proxy = getProxyToQueue(testMethodName);
         assertEquals(MSG_COUNT, proxy.getQueueSize());
 
         try {
@@ -138,7 +141,8 @@
         assertEquals(MSG_COUNT, proxy.getQueueSize());
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testTxConsumerRollbackAfterFailoverGetsNoErrors() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
@@ -147,25 +151,25 @@
 
         final int MSG_COUNT = 5;
         final Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageConsumer consumer = session.createConsumer(queue);
 
         sendMessages(connection, queue, MSG_COUNT);
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(MSG_COUNT, proxy.getQueueSize());
 
         for (int i = 0; i < MSG_COUNT; ++i) {
             Message received = consumer.receive(3000);
-            assertNotNull("Mesage was not expected but not received", received);
+            assertNotNull(received, "Mesage was not expected but not received");
         }
 
-        proxy = getProxyToQueue(name.getMethodName());
+        proxy = getProxyToQueue(testMethodName);
         assertEquals(MSG_COUNT, proxy.getQueueSize());
 
         stopPrimaryBroker();
         restartPrimaryBroker();
 
-        proxy = getProxyToQueue(name.getMethodName());
+        proxy = getProxyToQueue(testMethodName);
         assertEquals(MSG_COUNT, proxy.getQueueSize());
 
         try {
@@ -184,7 +188,8 @@
      * Tests that if some receives happen and then a failover followed by additional
      * receives the commit will fail and no messages are left on the broker.
      */
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testTxConsumerReceiveWorksAfterFailoverButCommitFails() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
@@ -193,16 +198,16 @@
 
         final int MSG_COUNT = 10;
         final Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageConsumer consumer = session.createConsumer(queue);
 
         sendMessages(connection, queue, MSG_COUNT);
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(MSG_COUNT, proxy.getQueueSize());
 
         for (int i = 0; i < MSG_COUNT / 2; ++i) {
             Message received = consumer.receive(3000);
-            assertNotNull("Mesage was not expected but not received", received);
+            assertNotNull(received, "Mesage was not expected but not received");
             LOG.info("consumer received message #{} - {}", i + 1, received.getJMSMessageID());
         }
 
@@ -211,12 +216,12 @@
         stopPrimaryBroker();
         restartPrimaryBroker();
 
-        proxy = getProxyToQueue(name.getMethodName());
+        proxy = getProxyToQueue(testMethodName);
         assertEquals(MSG_COUNT, proxy.getQueueSize());
 
         for (int i = 0; i < MSG_COUNT / 2; ++i) {
             Message received = consumer.receive(3000);
-            assertNotNull("Mesage was not expected but not received", received);
+            assertNotNull(received, "Mesage was not expected but not received");
             LOG.info("consumer received message #{} - {}", i + 1, received.getJMSMessageID());
         }
 
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxProducerFailoverTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxProducerFailoverTest.java
index 9e643c6..7f32d63 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxProducerFailoverTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxProducerFailoverTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.failover;
 
-import static org.junit.Assert.assertEquals;
-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.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.net.URI;
 import java.util.concurrent.TimeUnit;
@@ -31,18 +31,15 @@
 import jakarta.jms.TransactionRolledBackException;
 
 import org.apache.activemq.broker.jmx.QueueViewMBean;
-import org.apache.activemq.junit.ActiveMQTestRunner;
-import org.apache.activemq.junit.Repeat;
 import org.apache.qpid.jms.JmsConnection;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test MessageProducer behavior when in a TX and failover occurs.
  */
-@RunWith(ActiveMQTestRunner.class)
 public class JmsTxProducerFailoverTest extends AmqpTestSupport {
 
     @Override
@@ -54,9 +51,9 @@
      * Test that the TX doesn't start until the first send so a failover
      * before then should allow Commit to work as expected.
      */
-    @Test(timeout=60000)
-    @Repeat(repetitions = 1)
-    public void testTxProducerSendAfterFailoverCommits() throws Exception {
+    @Test
+    @Timeout(60)
+    void testTxProducerSendAfterFailoverCommits() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
         connection = createAmqpConnection(brokerURI);
@@ -64,38 +61,38 @@
 
         final int MSG_COUNT = 5;
         final Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageProducer producer = session.createProducer(queue);
         producer.setDeliveryMode(DeliveryMode.PERSISTENT);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         stopPrimaryBroker();
         restartPrimaryBroker();
 
-        assertTrue("Should have a new connection.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getCurrentConnectionsCount() == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(100)), "Should have a new connection.");
 
-        assertTrue("Should have a recovered producer.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return brokerService.getAdminView().getQueueProducers().length == 1;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)), "Should have a recovered producer.");
 
         for (int i = 0; i < MSG_COUNT; ++i) {
             LOG.debug("Producer sening message #{}", i + 1);
             producer.send(session.createTextMessage("Message: " + i));
         }
 
-        proxy = getProxyToQueue(name.getMethodName());
+        proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         try {
@@ -112,9 +109,9 @@
      * Tests that even if all sends complete prior to failover the commit that follows
      * will fail and the message are not present on the broker.
      */
-    @Test(timeout=60000)
-    @Repeat(repetitions = 1)
-    public void testTxProducerSendsThenFailoverCommitFails() throws Exception {
+    @Test
+    @Timeout(60)
+    void testTxProducerSendsThenFailoverCommitFails() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
         connection = createAmqpConnection(brokerURI);
@@ -122,11 +119,11 @@
 
         final int MSG_COUNT = 5;
         final Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageProducer producer = session.createProducer(queue);
         producer.setDeliveryMode(DeliveryMode.PERSISTENT);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         for (int i = 0; i < MSG_COUNT; ++i) {
@@ -139,7 +136,7 @@
         stopPrimaryBroker();
         restartPrimaryBroker();
 
-        proxy = getProxyToQueue(name.getMethodName());
+        proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         try {
@@ -152,9 +149,9 @@
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout=60000)
-    @Repeat(repetitions = 1)
-    public void testTxProducerRollbackAfterFailoverGetsNoErrors() throws Exception {
+    @Test
+    @Timeout(60)
+    void testTxProducerRollbackAfterFailoverGetsNoErrors() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
         connection = createAmqpConnection(brokerURI);
@@ -165,11 +162,11 @@
 
         final int MSG_COUNT = 5;
         final Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageProducer producer = session.createProducer(queue);
         producer.setDeliveryMode(DeliveryMode.PERSISTENT);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         for (int i = 0; i < MSG_COUNT; ++i) {
@@ -182,7 +179,7 @@
         stopPrimaryBroker();
         restartPrimaryBroker();
 
-        proxy = getProxyToQueue(name.getMethodName());
+        proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         try {
@@ -202,9 +199,9 @@
      * Tests that if some sends happen and then a failover followed by additional
      * sends the commit will fail and no messages are left on the broker.
      */
-    @Test(timeout=60000)
-    @Repeat(repetitions = 1)
-    public void testTxProducerSendWorksButCommitFails() throws Exception {
+    @Test
+    @Timeout(60)
+    void testTxProducerSendWorksButCommitFails() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 
         connection = createAmqpConnection(brokerURI);
@@ -212,11 +209,11 @@
 
         final int MSG_COUNT = 10;
         final Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         final MessageProducer producer = session.createProducer(queue);
         producer.setDeliveryMode(DeliveryMode.PERSISTENT);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         for (int i = 0; i < MSG_COUNT / 2; ++i) {
@@ -229,7 +226,7 @@
         stopPrimaryBroker();
         restartPrimaryBroker();
 
-        proxy = getProxyToQueue(name.getMethodName());
+        proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         for (int i = MSG_COUNT / 2; i < MSG_COUNT; ++i) {
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsAnonymousProducerTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsAnonymousProducerTest.java
index ead4049..80ec188 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsAnonymousProducerTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsAnonymousProducerTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.producer;
 
-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;
@@ -37,14 +37,16 @@
 import org.apache.activemq.broker.jmx.TopicViewMBean;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.util.StopWatch;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test JMS Anonymous Producer functionality.
  */
 public class JmsAnonymousProducerTest extends AmqpTestSupport {
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateProducer() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -57,32 +59,34 @@
         assertTrue(brokerService.getAdminView().getTotalProducerCount() == 0);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAnonymousSend() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         assertNotNull(session);
         MessageProducer producer = session.createProducer(null);
 
         Message message = session.createMessage();
         producer.send(queue, message);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAnonymousSendToTopic() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Topic topic = session.createTopic(name.getMethodName());
+        Topic topic = session.createTopic(testMethodName);
         assertNotNull(session);
         MessageProducer producer = session.createProducer(null);
         assertNotNull(producer);
@@ -92,32 +96,36 @@
         Message message = session.createMessage();
         producer.send(topic, message);
 
-        TopicViewMBean proxy = getProxyToTopic(name.getMethodName());
+        TopicViewMBean proxy = getProxyToTopic(testMethodName);
         assertEquals(1, proxy.getEnqueueCount());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAnonymousSendToThreeDestinations() throws Exception {
         StopWatch timer = new StopWatch();
         doTestAnonymousProducerSendToMultipleDests(3, 1);
         LOG.info("Time to send to three destinations: {} ms", timer.taken());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAnonymousSendToTenDestinations() throws Exception {
         StopWatch timer = new StopWatch();
         doTestAnonymousProducerSendToMultipleDests(10, 1);
         LOG.info("Time to send to ten destinations: {} ms", timer.taken());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAnonymousSendToOneHundredDestinations() throws Exception {
         StopWatch timer = new StopWatch();
         doTestAnonymousProducerSendToMultipleDests(100, 1);
         LOG.info("Time to send to one hundred destinations: {} ms", timer.taken());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testAnonymousSendToTenDestinationsTenTimes() throws Exception {
         StopWatch timer = new StopWatch();
         doTestAnonymousProducerSendToMultipleDests(10, 10);
@@ -133,7 +141,7 @@
 
         List<Queue> queues = new ArrayList<Queue>(numDestinations);
         for (int i = 0; i < numDestinations; ++i) {
-            queues.add(session.createQueue(name.getMethodName() + i));
+            queues.add(session.createQueue(testMethodName + i));
         }
 
         assertNotNull(session);
@@ -153,7 +161,8 @@
     }
 
     // TODO - Should only get JMSSecurityException on ActiveMQ 5.12.2+
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testAnonymousProducerNotAuthorized() throws Exception {
         connection = createAmqpConnection("guest", "password");
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java
index cdac401..b3753d2 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.producer;
 
-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.Arrays;
 import java.util.concurrent.TimeUnit;
@@ -39,14 +39,16 @@
 import org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test Various behaviors of the JMS MessageProducer implementation.
  */
 public class JmsMessageProducerTest extends AmqpTestSupport {
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateMessageProducer() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -54,14 +56,15 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         session.createProducer(queue);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testProducerNotAuthorized() throws Exception {
         connection = createAmqpConnection("guest", "password");
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
@@ -74,19 +77,20 @@
         }
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMultipleMessagesPersistent() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
 
         final int MSG_COUNT = 100;
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         producer.setDeliveryMode(DeliveryMode.PERSISTENT);
@@ -107,19 +111,20 @@
         assertEquals(MSG_COUNT, proxy.getQueueSize());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testSendMultipleMessagesNonPersistent() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
 
         final int MSG_COUNT = 100;
 
-        final QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        final QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
@@ -135,18 +140,19 @@
             LOG.trace("sent message: {}", i);
         }
 
-        assertTrue("Should all make it to the Queue.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return proxy.getQueueSize() == MSG_COUNT;
             }
-        }));
+        }), "Should all make it to the Queue.");
 
         producer.close();
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testPersistentSendsAreMarkedPersistent() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -154,11 +160,11 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         producer.setDeliveryMode(DeliveryMode.PERSISTENT);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         Message message = session.createMessage();
@@ -172,7 +178,8 @@
         assertTrue(message.getJMSDeliveryMode() == DeliveryMode.PERSISTENT);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testProducerWithNoTTLSendsMessagesWithoutTTL() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -180,10 +187,10 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         Message message = session.createMessage();
@@ -197,7 +204,8 @@
         assertEquals(0, message.getJMSExpiration());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testProducerWithNoMessageIdCanBeConsumed() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -205,11 +213,11 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         producer.setDisableMessageID(true);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
 
         for (int i = 0; i < 10; ++i) {
@@ -238,13 +246,14 @@
         return builder.toString();
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testSendLargeMessage() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
         connection.start();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        String queueName = name.toString();
+        String queueName = testMethodName.toString();
         Queue queue = session.createQueue(queueName);
 
         MessageProducer producer = session.createProducer(queue);
@@ -265,17 +274,20 @@
         assertEquals(messageText, textMessage.getText());
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testProducerWithTTL() throws Exception {
         doProducerWithTTLTestImpl(false, null);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testProducerWithTTLDisableTimestamp() throws Exception {
         doProducerWithTTLTestImpl(true, null);
     }
 
-    @Test(timeout = 20000)
+    @Test
+    @Timeout(20)
     public void testProducerWithTTLDisableTimestampAndNoAmqpTtl() throws Exception {
         doProducerWithTTLTestImpl(true, 0L);
     }
@@ -287,7 +299,7 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
 
         Message message = session.createMessage();
         if(propJMS_AMQP_TTL != null) {
@@ -310,6 +322,6 @@
                     new Object[] { message.getJMSExpiration(), message.getJMSTimestamp(),
                     message.getJMSExpiration() - message.getJMSTimestamp()});
         }
-        assertNull("Unexpected message received, see log for details", message);
+        assertNull(message, "Unexpected message received, see log for details");
     }
 }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsProduceMessageTypesTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsProduceMessageTypesTest.java
index 44a0054..85095e8 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsProduceMessageTypesTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsProduceMessageTypesTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.producer;
 
-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 jakarta.jms.BytesMessage;
 import jakarta.jms.MapMessage;
@@ -33,29 +33,32 @@
 
 import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test basic MessageProducer functionality.
  */
 public class JmsProduceMessageTypesTest extends AmqpTestSupport {
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testSendJMSMessage() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         Message message = session.createMessage();
         producer.send(message);
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testSendJMSBytesMessage() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -64,12 +67,12 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         BytesMessage message = session.createBytesMessage();
         message.writeUTF(payload);
         producer.send(message);
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
         MessageConsumer consumer = session.createConsumer(queue);
@@ -80,20 +83,21 @@
         assertEquals(payload, bytes.readUTF());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testSendJMSMapMessage() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         MapMessage message = session.createMapMessage();
         message.setBoolean("Boolean", false);
         message.setString("STRING", "TEST");
         producer.send(message);
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
         MessageConsumer consumer = session.createConsumer(queue);
@@ -105,7 +109,8 @@
         assertEquals(false, map.getBooleanProperty("Boolean"));
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testSendJMSStreamMessage() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -114,12 +119,12 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         StreamMessage message = session.createStreamMessage();
         message.writeString(payload);
         producer.send(message);
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
         MessageConsumer consumer = session.createConsumer(queue);
@@ -130,7 +135,8 @@
         assertEquals(payload, stream.readString());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testSendJMSTextMessage() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -139,11 +145,11 @@
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         TextMessage message = session.createTextMessage("TEST");
         producer.send(message);
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
         MessageConsumer consumer = session.createConsumer(queue);
@@ -154,18 +160,19 @@
         assertEquals(payload, text.getText());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testSendJMSObjectMessage() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         ObjectMessage message = session.createObjectMessage("TEST");
         producer.send(message);
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
     }
 }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsProducerFlowControlFailIfNoSpaceTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsProducerFlowControlFailIfNoSpaceTest.java
index 86ddf29..28ea9fe 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsProducerFlowControlFailIfNoSpaceTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsProducerFlowControlFailIfNoSpaceTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.qpid.jms.producer;
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -36,7 +36,9 @@
 import org.apache.qpid.jms.JmsConnection;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,9 +52,10 @@
 
     private List<Exception> exceptions;
 
+    @BeforeEach
     @Override
-    public void setUp() throws Exception {
-        super.setUp();
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp(testInfo);
 
         exceptions = new ArrayList<Exception>();
     }
@@ -117,13 +120,13 @@
         producer.send(session.createTextMessage("Message:1"));
         producer.send(session.createTextMessage("Message:2"));
 
-        assertTrue("Should have got an error from no space.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return !exceptions.isEmpty();
             }
-        }));
+        }), "Should have got an error from no space.");
 
         connection.close();
     }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderTest.java
index 5647e03..0d4aae1 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsQueueSenderTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.qpid.jms.producer;
 
-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.Queue;
 import jakarta.jms.QueueConnection;
@@ -28,7 +28,7 @@
 import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.qpid.jms.JmsConnectionFactory;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test basic QueueSender functionality.
@@ -43,11 +43,11 @@
 
         QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         QueueSender sender = session.createSender(queue);
         assertNotNull(sender);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(0, proxy.getQueueSize());
         connection.close();
     }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherTest.java
index 1c56747..b5e1011 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/producer/JmsTopicPublisherTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.qpid.jms.producer;
 
-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.Session;
 import jakarta.jms.Topic;
@@ -28,7 +28,7 @@
 import org.apache.activemq.broker.jmx.TopicViewMBean;
 import org.apache.qpid.jms.JmsConnectionFactory;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * test basic TopicPublisher functionality.
@@ -43,11 +43,11 @@
 
         TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
         assertNotNull(session);
-        Topic topic = session.createTopic(name.getMethodName());
+        Topic topic = session.createTopic(testMethodName);
         TopicPublisher publisher = session.createPublisher(topic);
         assertNotNull(publisher);
 
-        TopicViewMBean proxy = getProxyToTopic(name.getMethodName());
+        TopicViewMBean proxy = getProxyToTopic(testMethodName);
         assertEquals(0, proxy.getEnqueueCount());
         connection.close();
     }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/session/JmsSessionTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/session/JmsSessionTest.java
index 010b17d..199fac2 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/session/JmsSessionTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/session/JmsSessionTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.session;
 
-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.util.concurrent.TimeUnit;
 
@@ -33,14 +33,16 @@
 import org.apache.activemq.broker.jmx.BrokerViewMBean;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test basic Session functionality.
  */
 public class JmsSessionTest extends AmqpTestSupport {
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateSession() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -52,7 +54,8 @@
         session.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testSessionCreateProducer() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -66,7 +69,8 @@
         session.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testSessionCreateConsumer() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -80,7 +84,8 @@
         session.close();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateTemporaryQueue() throws Exception {
         connection = createAmqpConnection();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
@@ -92,7 +97,8 @@
         assertEquals(1, broker.getTemporaryQueues().length);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testDeleteTemporaryQueue() throws Exception {
         connection = createAmqpConnection();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
@@ -106,16 +112,17 @@
         TemporaryQueue tempQueue = (TemporaryQueue) queue;
         tempQueue.delete();
 
-        assertTrue("Temp Queue should be deleted.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return broker.getTemporaryQueues().length == 0;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)), "Temp Queue should be deleted.");
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testCreateTemporaryTopic() throws Exception {
         connection = createAmqpConnection();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
@@ -127,7 +134,8 @@
         assertEquals(1, broker.getTemporaryTopics().length);
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testDeleteTemporaryTopic() throws Exception {
         connection = createAmqpConnection();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
@@ -141,12 +149,12 @@
         TemporaryTopic tempTopic = (TemporaryTopic) topic;
         tempTopic.delete();
 
-        assertTrue("Temp Topic should be deleted.", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return broker.getTemporaryTopics().length == 0;
             }
-        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)));
+        }, TimeUnit.SECONDS.toMillis(30), TimeUnit.MILLISECONDS.toMillis(50)), "Temp Topic should be deleted.");
     }
 }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/support/AmqpTestSupport.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/support/AmqpTestSupport.java
index c5435be..4ce0a6a 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/support/AmqpTestSupport.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/support/AmqpTestSupport.java
@@ -128,7 +128,7 @@
 
             return new URI(uri);
         } catch (Exception e) {
-            throw new RuntimeException();
+            throw new RuntimeException(e);
         }
     }
 
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/support/QpidJmsTestSupport.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/support/QpidJmsTestSupport.java
index e3709e3..821922a 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/support/QpidJmsTestSupport.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/support/QpidJmsTestSupport.java
@@ -53,10 +53,9 @@
 import org.apache.activemq.security.TempDestinationAuthorizationEntry;
 import org.apache.activemq.store.kahadb.KahaDBStore;
 import org.apache.activemq.util.JMXSupport;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.rules.TestName;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,8 +68,6 @@
 
     public static final String KAHADB_DIRECTORY = "target/activemq-data";
 
-    @Rule public TestName name = new TestName();
-
     protected static final Logger LOG = LoggerFactory.getLogger(QpidJmsTestSupport.class);
     protected BrokerService brokerService;
     protected final List<BrokerService> brokers = new ArrayList<BrokerService>();
@@ -78,16 +75,18 @@
     protected int numberOfMessages;
     protected Connection connection;
     protected javax.jms.Connection jmsConnection;
+    protected String testMethodName;
 
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        this.testMethodName = testInfo.getTestMethod().get().getName();
         LOG.info("========== setUp " + getTestName() + " ==========");
         exceptions.clear();
         startPrimaryBroker();
         this.numberOfMessages = 2000;
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         LOG.info("========== tearDown " + getTestName() + " ==========");
         Exception firstError = null;
@@ -132,7 +131,7 @@
     }
 
     public String getDestinationName() {
-        return name.getMethodName();
+        return testMethodName;
     }
 
     public URI getBrokerActiveMQClientConnectionURI() {
@@ -407,7 +406,7 @@
     protected void sendToAmqQueue(int count) throws Exception {
         javax.jms.Connection activemqConnection = createActiveMQConnection();
         javax.jms.Session amqSession = activemqConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        javax.jms.Queue amqTestQueue = amqSession.createQueue(name.getMethodName());
+        javax.jms.Queue amqTestQueue = amqSession.createQueue(testMethodName);
         sendMessages(activemqConnection, amqTestQueue, count);
         activemqConnection.close();
     }
@@ -415,7 +414,7 @@
     protected void sendToAmqTopic(int count) throws Exception {
         javax.jms.Connection activemqConnection = createActiveMQConnection();
         javax.jms.Session amqSession = activemqConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        javax.jms.Topic amqTestTopic = amqSession.createTopic(name.getMethodName());
+        javax.jms.Topic amqTestTopic = amqSession.createTopic(testMethodName);
         sendMessages(activemqConnection, amqTestTopic, count);
         activemqConnection.close();
     }
@@ -504,6 +503,6 @@
     }
 
     protected String getTestName() {
-        return getClass().getSimpleName() + "." + name.getMethodName();
+        return getClass().getSimpleName() + "." + testMethodName;
     }
 }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedConsumerTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedConsumerTest.java
index 3c6ac7a..3878fe5 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedConsumerTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedConsumerTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.transactions;
 
-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.net.URI;
 import java.util.ArrayList;
@@ -43,7 +43,8 @@
 import org.apache.qpid.jms.message.JmsInboundMessageDispatch;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.QpidJmsTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test consumer behavior for Transacted Session Consumers.
@@ -53,7 +54,8 @@
     private final String MSG_NUM = "MSG_NUM";
     private final int MSG_COUNT = 1000;
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateConsumerFromTxSession() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -62,12 +64,13 @@
         assertNotNull(session);
         assertTrue(session.getTransacted());
 
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
         assertNotNull(consumer);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConsumedInTxAreAcked() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -75,13 +78,13 @@
         sendToAmqQueue(1);
 
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         Message message = consumer.receive(5000);
         assertNotNull(message);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(1, proxy.getQueueSize());
 
         session.commit();
@@ -89,7 +92,8 @@
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testRollbackRececeivedMessageAndClose() throws Exception {
 
         connection = createAmqpConnection();
@@ -112,18 +116,19 @@
         connection.close();
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testReceiveAndRollback() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         sendToAmqQueue(2);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(2, proxy.getQueueSize());
 
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         Message message = consumer.receive(3000);
@@ -141,24 +146,25 @@
 
         // Consume again.. the prev message should get redelivered.
         message = consumer.receive(5000);
-        assertNotNull("Should have re-received the message again!", message);
+        assertNotNull(message, "Should have re-received the message again!");
         session.commit();
 
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testReceiveTwoThenRollback() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         sendToAmqQueue(2);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(2, proxy.getQueueSize());
 
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         Message message = consumer.receive(3000);
@@ -171,26 +177,27 @@
 
         // Consume again.. the prev message should get redelivered.
         message = consumer.receive(5000);
-        assertNotNull("Should have re-received the message again!", message);
+        assertNotNull(message, "Should have re-received the message again!");
         message = consumer.receive(5000);
-        assertNotNull("Should have re-received the message again!", message);
+        assertNotNull(message, "Should have re-received the message again!");
         session.commit();
 
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testReceiveTwoThenCloseSessionToRollback() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         sendToAmqQueue(2);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(2, proxy.getQueueSize());
 
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         Message message = consumer.receive(3000);
@@ -203,16 +210,17 @@
 
         // Consume again.. the prev message should get redelivered.
         message = consumer.receive(5000);
-        assertNotNull("Should have re-received the message again!", message);
+        assertNotNull(message, "Should have re-received the message again!");
         message = consumer.receive(5000);
-        assertNotNull("Should have re-received the message again!", message);
+        assertNotNull(message, "Should have re-received the message again!");
 
         session.close();
 
         assertEquals(2, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testReceiveSomeThenRollback() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -221,17 +229,17 @@
         int consumeBeforeRollback = 2;
         sendToAmqQueue(totalCount);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(totalCount, proxy.getQueueSize());
 
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
 
         for(int i = 1; i <= consumeBeforeRollback; i++) {
             Message message = consumer.receive(3000);
             assertNotNull(message);
-            assertEquals("Unexpected message number", i, message.getIntProperty(QpidJmsTestSupport.MESSAGE_NUMBER));
+            assertEquals(i, message.getIntProperty(QpidJmsTestSupport.MESSAGE_NUMBER), "Unexpected message number");
         }
 
         session.rollback();
@@ -243,34 +251,35 @@
         List<Integer> messageNumbers = new ArrayList<Integer>();
         for(int i = 1; i <= totalCount; i++) {
             Message message = consumer.receive(3000);
-            assertNotNull("Failed to receive message: " + i, message);
+            assertNotNull(message, "Failed to receive message: " + i);
             int msgNum = message.getIntProperty(QpidJmsTestSupport.MESSAGE_NUMBER);
             messageNumbers.add(msgNum);
         }
 
         session.commit();
 
-        assertEquals("Unexpected size of list", totalCount, messageNumbers.size());
+        assertEquals(totalCount, messageNumbers.size(), "Unexpected size of list");
         for(int i = 0; i < messageNumbers.size(); i++)
         {
-            assertEquals("Unexpected order of messages: " + messageNumbers, Integer.valueOf(i + 1), messageNumbers.get(i));
+            assertEquals(Integer.valueOf(i + 1), messageNumbers.get(i), "Unexpected order of messages: " + messageNumbers);
         }
 
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCloseConsumerBeforeCommit() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         sendToAmqQueue(2);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(2, proxy.getQueueSize());
 
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
         TextMessage message = (TextMessage) consumer.receive(5000);
         assertNotNull(message);
@@ -289,14 +298,15 @@
         assertEquals(0, proxy.getQueueSize());
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testJMSXDeliveryCount() throws Exception {
         sendToAmqQueue(1);
 
         connection = createAmqpConnection();
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
         assertEquals(true, session.getTransacted());
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
         connection.start();
 
@@ -328,7 +338,8 @@
         session.commit();
     }
 
-    @Test(timeout=30000)
+    @Test
+    @Timeout(30)
     public void testSessionTransactedCommitWithLocalPriorityReordering() throws Exception {
         connection = createAmqpConnection();
         ((JmsConnection) connection).setLocalMessagePriority(true);
@@ -398,7 +409,7 @@
         session.commit();
 
         // Wait for them all to arrive at the consumer
-        assertTrue("Messages didnt all arrive in given time.", messagesArrived.await(5, TimeUnit.SECONDS));
+        assertTrue(messagesArrived.await(5, TimeUnit.SECONDS), "Messages didnt all arrive in given time.");
 
         // Receive the other messages. Expect higher priority messages first.
         msg = consumer.receive(3000);
@@ -429,7 +440,8 @@
         session.close();
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testSingleConsumedMessagePerTxCase() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -467,7 +479,8 @@
         session.close();
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConsumeAllMessagesInSingleTxCase() throws Exception {
         connection = createAmqpConnection();
         connection.start();
@@ -505,13 +518,14 @@
         session.close();
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testConsumerClosesAfterItsTXCommits() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         Session mgmtSession = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = mgmtSession.createQueue(name.getMethodName());
+        Queue queue = mgmtSession.createQueue(testMethodName);
 
         // Send a message that will be rolled back.
         Session senderSession = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
@@ -524,7 +538,7 @@
         Session txSession = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
         MessageConsumer consumer = txSession.createConsumer(queue);
         Message received = consumer.receive(1000);
-        assertNotNull("Consumer didn't receive the message", received);
+        assertNotNull(received, "Consumer didn't receive the message");
         txSession.rollback();
         consumer.close();
 
@@ -532,13 +546,14 @@
         Session nonTxSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         consumer = nonTxSession.createConsumer(queue);
         received = consumer.receive(1000);
-        assertNotNull("receiver3 didn't received the message", received);
+        assertNotNull(received, "receiver3 didn't received the message");
         consumer.close();
 
         connection.close();
     }
 
-    @Test(timeout = 90000)
+    @Test
+    @Timeout(90)
     public void testConsumerMessagesInOrder() throws Exception {
 
         final int ITERATIONS = 5;
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedProducerTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedProducerTest.java
index f0793e5..e12683a 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedProducerTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedProducerTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.transactions;
 
-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 jakarta.jms.Message;
 import jakarta.jms.MessageConsumer;
@@ -30,14 +30,16 @@
 
 import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Test for messages produced inside a local transaction.
  */
 public class JmsTransactedProducerTest extends AmqpTestSupport {
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateTxSessionAndProducer() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -47,19 +49,20 @@
         assertNotNull(session);
         assertTrue(session.getTransacted());
 
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         assertNotNull(producer);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testTXProducerReusesMessage() throws Exception {
         final int MSG_COUNT = 10;
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
         Session nonTxSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = nonTxSession.createConsumer(queue);
         MessageProducer producer = session.createProducer(queue);
 
@@ -72,19 +75,20 @@
         Message msg = consumer.receive(1000);
         assertNull(msg);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         session.commit();
         assertEquals(MSG_COUNT, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testTXProducerCommitsAreQueued() throws Exception {
         final int MSG_COUNT = 10;
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
         Session nonTxSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = nonTxSession.createConsumer(queue);
         MessageProducer producer = session.createProducer(queue);
 
@@ -95,25 +99,26 @@
         Message msg = consumer.receive(2000);
         assertNull(msg);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         session.commit();
         assertEquals(MSG_COUNT, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testTXProducerRollbacksNotQueued() throws Exception {
         final int MSG_COUNT = 10;
         connection = createAmqpConnection();
         connection.start();
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
 
         for (int i = 0; i < MSG_COUNT; ++i) {
             producer.send(session.createTextMessage());
         }
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         session.rollback();
         assertEquals(0, proxy.getQueueSize());
     }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedSessionTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedSessionTest.java
index 4e584ee..e257aed 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedSessionTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactedSessionTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.qpid.jms.transactions;
 
-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 jakarta.jms.Destination;
 import jakarta.jms.Message;
@@ -31,14 +31,16 @@
 
 import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * Basic tests for Session in Transacted mode.
  */
 public class JmsTransactedSessionTest extends AmqpTestSupport {
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCreateTxSession() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -51,7 +53,8 @@
         session.close();
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testCommitOnSessionWithNoWork() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -64,7 +67,8 @@
         session.commit();
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testRollbackOnSessionWithNoWork() throws Exception {
         connection = createAmqpConnection();
         assertNotNull(connection);
@@ -77,18 +81,19 @@
         session.rollback();
     }
 
-    @Test(timeout=60000)
+    @Test
+    @Timeout(60)
     public void testCloseSessionRollsBack() throws Exception {
         connection = createAmqpConnection();
         connection.start();
 
         sendToAmqQueue(2);
 
-        QueueViewMBean proxy = getProxyToQueue(name.getMethodName());
+        QueueViewMBean proxy = getProxyToQueue(testMethodName);
         assertEquals(2, proxy.getQueueSize());
 
         Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageConsumer consumer = session.createConsumer(queue);
         Message message = consumer.receive(5000);
         assertNotNull(message);
@@ -100,12 +105,14 @@
         assertEquals(2, proxy.getQueueSize());
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testRollbackSentMessagesThenConsumeWithTopic() throws Exception {
         doRollbackSentMessagesThenConsumeTestImpl(true);
     }
 
-    @Test(timeout = 60000)
+    @Test
+    @Timeout(60)
     public void testRollbackSentMessagesThenConsumeWithQueue() throws Exception {
         doRollbackSentMessagesThenConsumeTestImpl(false);
     }
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactionRedeliveryPolicyTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactionRedeliveryPolicyTest.java
index 5b47785..0c076a0 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactionRedeliveryPolicyTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/transactions/JmsTransactionRedeliveryPolicyTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.qpid.jms.transactions;
 
-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.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -36,7 +36,8 @@
 import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 
 /**
  * test redelivery policy application in a TX session.
@@ -48,7 +49,8 @@
         return "jms.redeliveryPolicy.maxRedeliveries=5";
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testSyncConsumeAndRollbackWithMaxRedeliveries() throws Exception {
         final int MAX_REDELIVERIES = 5;
         final int MSG_COUNT = 5;
@@ -92,13 +94,13 @@
 
         assertNull(consumer.receive(50));
 
-        assertTrue("Message should get DLQ'd", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return queueView.getQueueSize() == 0;
             }
-        }));
+        }), "Message should get DLQ'd");
 
         QueueViewMBean dlq = getProxyToQueue("ActiveMQ.DLQ");
         assertEquals(MSG_COUNT, dlq.getQueueSize());
@@ -106,7 +108,8 @@
         session.commit();
     }
 
-    @Test(timeout = 30000)
+    @Test
+    @Timeout(30)
     public void testAsyncConsumeAndRollbackWithMaxRedeliveries() throws Exception {
         final int MAX_REDELIVERIES = 5;
         final int MSG_COUNT = 5;
@@ -138,7 +141,7 @@
             final CountDownLatch done = new CountDownLatch(MSG_COUNT);
             consumer.setMessageListener(new MaxRedeliveryListener(done, i));
 
-            assertTrue("Not All Messages Received", done.await(10, TimeUnit.SECONDS));
+            assertTrue(done.await(10, TimeUnit.SECONDS), "Not All Messages Received");
             assertEquals(MSG_COUNT, queueView.getQueueSize());
 
             consumer.setMessageListener(null);
@@ -148,13 +151,13 @@
 
         assertNull(consumer.receive(50));
 
-        assertTrue("Message should get DLQ'd", Wait.waitFor(new Wait.Condition() {
+        assertTrue(Wait.waitFor(new Wait.Condition() {
 
             @Override
             public boolean isSatisfied() throws Exception {
                 return queueView.getQueueSize() == 0;
             }
-        }));
+        }), "Message should get DLQ'd");
 
         QueueViewMBean dlq = getProxyToQueue("ActiveMQ.DLQ");
         assertEquals(MSG_COUNT, dlq.getQueueSize());
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/usecases/JmsLargeMessageSendRecvTimedTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/usecases/JmsLargeMessageSendRecvTimedTest.java
index 244f5d5..1666304 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/usecases/JmsLargeMessageSendRecvTimedTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/usecases/JmsLargeMessageSendRecvTimedTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.qpid.jms.usecases;
 
-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.util.Arrays;
 import java.util.Random;
@@ -33,8 +33,9 @@
 import jakarta.jms.Session;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -54,27 +55,31 @@
         return payload;
     }
 
-    @Test(timeout = 2 * 60 * 1000)
+    @Test
+    @Timeout(120)
     public void testSendSmallerMessages() throws Exception {
         for (int i = 512; i <= (16 * 1024); i += 512) {
             doTestSendLargeMessage(i);
         }
     }
 
-    @Test(timeout = 2 * 60 * 1000)
+    @Test
+    @Timeout(120)
     public void testSendFixedSizedMessages() throws Exception {
         doTestSendLargeMessage(65536);
         doTestSendLargeMessage(65536 * 2);
         doTestSendLargeMessage(65536 * 4);
     }
 
-    @Test(timeout = 5 * 60 * 1000)
+    @Test
+    @Timeout(300)
     public void testSend10MBMessage() throws Exception {
         doTestSendLargeMessage(1024 * 1024 * 10);
     }
 
-    @Ignore
-    @Test(timeout = 5 * 60 * 1000)
+    @Disabled
+    @Test
+    @Timeout(300)
     public void testSend100MBMessage() throws Exception {
         doTestSendLargeMessage(1024 * 1024 * 100);
     }
@@ -88,7 +93,7 @@
 
         long startTime = System.currentTimeMillis();
         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-        Queue queue = session.createQueue(name.getMethodName());
+        Queue queue = session.createQueue(testMethodName);
         MessageProducer producer = session.createProducer(queue);
         BytesMessage message = session.createBytesMessage();
         message.writeBytes(payload);
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/usecases/JmsLargeMessagesInGroupsTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/usecases/JmsLargeMessagesInGroupsTest.java
index acd8dcd..e8ad891 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/usecases/JmsLargeMessagesInGroupsTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/usecases/JmsLargeMessagesInGroupsTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.qpid.jms.usecases;
 
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -29,7 +29,8 @@
 import jakarta.jms.Session;
 
 import org.apache.qpid.jms.support.AmqpTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,7 +44,8 @@
     private static final int RECEIVE_TIMEOUT = 5000;
     private static final String JMSX_GROUP_ID = "JmsGroupsTest";
 
-    @Test(timeout = 60 * 1000)
+    @Test
+    @Timeout(60)
     public void testGroupSeqIsNeverLost() throws Exception {
         AtomicInteger sequenceCounter = new AtomicInteger();