diff --git a/archetypes/jersey-heroku-webapp/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java b/archetypes/jersey-heroku-webapp/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java
index f0c141c..1212f6f 100644
--- a/archetypes/jersey-heroku-webapp/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java
+++ b/archetypes/jersey-heroku-webapp/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java
@@ -5,8 +5,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import ${package}.MyResource;
 
diff --git a/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/pom.xml b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/pom.xml
index 42416bb..9dcb68b 100644
--- a/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/pom.xml
+++ b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/pom.xml
@@ -38,9 +38,9 @@
         </dependency>
         -->
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.12</version>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>\${junit-jupiter.version}</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
@@ -77,6 +77,7 @@
 
     <properties>
         <jersey.version>${project.version}</jersey.version>
+        <junit-jupiter.version>5.9.1</junit-jupiter.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 </project>
diff --git a/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java
index 6986107..901bc19 100644
--- a/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java
+++ b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java
@@ -6,17 +6,17 @@
 
 import org.glassfish.grizzly.http.server.HttpServer;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class MyResourceTest {
 
     private HttpServer server;
     private WebTarget target;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         // start the server
         server = Main.startServer();
@@ -32,7 +32,7 @@
         target = c.target(Main.BASE_URI);
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         server.stop();
     }
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/AsyncTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/AsyncTest.java
index 82e2d5d..4c6702b 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/AsyncTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/AsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,10 +40,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.hamcrest.Matchers;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Asynchronous connector test.
@@ -210,7 +210,7 @@
             }
         });
 
-        assertTrue("Waiting for results has timed out.", latch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS));
+        assertTrue(latch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS), "Waiting for results has timed out.");
         final long toc = System.currentTimeMillis();
 
         assertEquals("DONE-1", r1.get());
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/AuthTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/AuthTest.java
index dceb272..9bced7a 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/AuthTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/AuthTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,12 +44,12 @@
 import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.CredentialsProvider;
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.junit.Ignore;
-import org.junit.Test;
-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 org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Paul Sandoz
@@ -398,7 +398,7 @@
     }
 
     @Test
-    @Ignore("JERSEY-1750: Cannot retry request with a non-repeatable request entity. How to buffer the entity?"
+    @Disabled("JERSEY-1750: Cannot retry request with a non-repeatable request entity. How to buffer the entity?"
             + " Allow repeatable write in jersey?")
     public void testAuthPost() {
         CredentialsProvider credentialsProvider = new org.apache.http.impl.client.BasicCredentialsProvider();
@@ -474,7 +474,7 @@
     }
 
     @Test
-    @Ignore("JERSEY-1750: Cannot retry request with a non-repeatable request entity. How to buffer the entity?"
+    @Disabled("JERSEY-1750: Cannot retry request with a non-repeatable request entity. How to buffer the entity?"
             + " Allow repeatable write in jersey?")
     public void testAuthInteractivePost() {
         CredentialsProvider credentialsProvider = new org.apache.http.impl.client.BasicCredentialsProvider();
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/CookieTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/CookieTest.java
index c387fce..5e2c66b 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/CookieTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/CookieTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,11 +34,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/CustomLoggingFilter.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/CustomLoggingFilter.java
index d6c4259..a26aea8 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/CustomLoggingFilter.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/CustomLoggingFilter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 import javax.ws.rs.container.ContainerResponseContext;
 import javax.ws.rs.container.ContainerResponseFilter;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Custom logging filter.
@@ -43,28 +43,28 @@
     @Override
     public void filter(ClientRequestContext context) throws IOException {
         System.out.println("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ClientRequestContext context, ClientResponseContext clientResponseContext) throws IOException {
         System.out.println("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         postFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context) throws IOException {
         System.out.println("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context, ContainerResponseContext containerResponseContext) throws IOException {
         System.out.println("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         postFilterCalled++;
     }
 }
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/DisableContentEncodingTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/DisableContentEncodingTest.java
index 4e2681f..dfd5b17 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/DisableContentEncodingTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/DisableContentEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.apache.http.client.config.RequestConfig;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Ondrej Kosatka
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/FollowRedirectsTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/FollowRedirectsTest.java
index f55bf78..c789a1a 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/FollowRedirectsTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/FollowRedirectsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,8 +36,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Apache connector follow redirect tests.
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/GZIPContentEncodingTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/GZIPContentEncodingTest.java
index fb2503e..bfa8698 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/GZIPContentEncodingTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/GZIPContentEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HelloWorldTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HelloWorldTest.java
index e6a29e5..dab72b3 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HelloWorldTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -63,11 +63,11 @@
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.apache.http.params.HttpParams;
 import org.apache.http.protocol.HttpContext;
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Jakub Podlesak
@@ -160,11 +160,11 @@
         try {
             target.request().get();
             if (exceptionExpected) {
-                Assert.fail("Exception expected");
+                Assertions.fail("Exception expected");
             }
         } catch (Exception e) {
             if (!exceptionExpected) {
-                Assert.fail("Exception not expected");
+                Assertions.fail("Exception not expected");
             }
         } finally {
             clientTwo.close();
@@ -603,10 +603,10 @@
             final String response = rootTarget.path("error2").request().get(String.class);
             fail("Exception expected. Received: " + response);
         } catch (InternalServerErrorException isee) {
-            assertEquals("Received unexpected data.", "Error2.", isee.getResponse().readEntity(String.class));
+            assertEquals("Error2.", isee.getResponse().readEntity(String.class), "Received unexpected data.");
             // Test buffering:
             // second read would fail if entity was not buffered
-            assertEquals("Unexpected data in the entity buffer.", "Error2.", isee.getResponse().readEntity(String.class));
+            assertEquals("Error2.", isee.getResponse().readEntity(String.class), "Unexpected data in the entity buffer.");
         }
 
         assertEquals(0, connectionCounter.get());
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpEntityTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpEntityTest.java
index f7d2b16..19d9784 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpEntityTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
@@ -65,8 +65,8 @@
         InputStreamEntity entity = new InputStreamEntity(bais);
 
         try (Response response = target().request().post(Entity.entity(entity, MediaType.APPLICATION_OCTET_STREAM))) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals(ECHO_MESSAGE, response.readEntity(String.class));
+            Assertions.assertEquals(200, response.getStatus());
+            Assertions.assertEquals(ECHO_MESSAGE, response.readEntity(String.class));
         }
     }
 
@@ -75,8 +75,8 @@
         ByteArrayEntity entity = new ByteArrayEntity(ECHO_MESSAGE.getBytes());
 
         try (Response response = target().request().post(Entity.entity(entity, MediaType.APPLICATION_OCTET_STREAM))) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals(ECHO_MESSAGE, response.readEntity(String.class));
+            Assertions.assertEquals(200, response.getStatus());
+            Assertions.assertEquals(ECHO_MESSAGE, response.readEntity(String.class));
         }
     }
 }
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpHeadersTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpHeadersTest.java
index 5302bef..c4d5ed7 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpHeadersTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpHeadersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,9 +43,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpMethodTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpMethodTest.java
index f507504..b21940d 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpMethodTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/HttpMethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,13 +39,12 @@
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/LargeDataTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/LargeDataTest.java
index 938096c..059a3c0 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/LargeDataTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/LargeDataTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,8 +37,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * The LargeDataTest reproduces a problem when bytes of large data sent are incorrectly sent.
@@ -107,9 +107,8 @@
                 throw exception;
             }
 
-            Assert.assertEquals("Unexpected error: " + response.getStatus(),
-                    Status.Family.SUCCESSFUL,
-                    response.getStatusInfo().getFamily());
+            Assertions.assertEquals(Status.Family.SUCCESSFUL, response.getStatusInfo().getFamily(),
+                    "Unexpected error: " + response.getStatus());
         } finally {
             response.close();
         }
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/ManagedClientTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/ManagedClientTest.java
index a263177..d3c5644 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/ManagedClientTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/ManagedClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,8 +46,8 @@
 import org.glassfish.jersey.server.Uri;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Jersey programmatic managed client test
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/NoEntityTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/NoEntityTest.java
index a162e14..27ba0ca 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/NoEntityTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/NoEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,7 +31,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/RetryHandlerTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/RetryHandlerTest.java
index f779d12..7a135af 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/RetryHandlerTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/RetryHandlerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,8 +36,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.apache.http.client.HttpRequestRetryHandler;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class RetryHandlerTest extends JerseyTest {
     private static final int READ_TIMEOUT_MS = 100;
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/SpecialHeaderTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/SpecialHeaderTest.java
index 25bfadb..0d17af5 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/SpecialHeaderTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/SpecialHeaderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -67,23 +67,23 @@
 
 
     @Test
-    @Ignore("Apache connector does not provide information about encoding for gzip and deflate encoding")
+    @Disabled("Apache connector does not provide information about encoding for gzip and deflate encoding")
     public void testEncoded() {
         final Response response = target().path("resource/encoded").request("text/plain").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("get", response.readEntity(String.class));
-        Assert.assertEquals("gzip", response.getHeaderString(HttpHeaders.CONTENT_ENCODING));
-        Assert.assertEquals("text/plain", response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-        Assert.assertEquals(3, response.getHeaderString(HttpHeaders.CONTENT_LENGTH));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("get", response.readEntity(String.class));
+        Assertions.assertEquals("gzip", response.getHeaderString(HttpHeaders.CONTENT_ENCODING));
+        Assertions.assertEquals("text/plain", response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        Assertions.assertEquals(3, response.getHeaderString(HttpHeaders.CONTENT_LENGTH));
     }
 
     @Test
     public void testNonEncoded() {
         final Response response = target().path("resource/non-encoded").request("text/plain").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("get", response.readEntity(String.class));
-        Assert.assertNull(response.getHeaderString(HttpHeaders.CONTENT_ENCODING));
-        Assert.assertEquals("text/plain", response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-        Assert.assertEquals("3", response.getHeaderString(HttpHeaders.CONTENT_LENGTH));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("get", response.readEntity(String.class));
+        Assertions.assertNull(response.getHeaderString(HttpHeaders.CONTENT_ENCODING));
+        Assertions.assertEquals("text/plain", response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        Assertions.assertEquals("3", response.getHeaderString(HttpHeaders.CONTENT_LENGTH));
     }
 }
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/StreamingTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/StreamingTest.java
index c5ef31e..10dcbcf 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/StreamingTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/StreamingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,8 +38,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/TimeoutTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/TimeoutTest.java
index 66860cf..6947b66 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/TimeoutTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/TimeoutTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,11 +31,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Martin Matula
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/TraceSupportTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/TraceSupportTest.java
index c0442f2..e6c593b 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/TraceSupportTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/TraceSupportTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -45,10 +45,10 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * This very basic resource showcases support of a HTTP TRACE method,
@@ -129,9 +129,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsProgrammatic) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // toLowerCase - http header field names are case insensitive
-                    responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                    responseEntity.contains(expectedFragment),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
@@ -143,9 +143,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsAnnotated) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // toLowerCase - http header field names are case insensitive
-                    responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                    responseEntity.contains(expectedFragment),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/UnderlyingCookieStoreAccessTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/UnderlyingCookieStoreAccessTest.java
index 3238c81..808fef9 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/UnderlyingCookieStoreAccessTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/UnderlyingCookieStoreAccessTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,9 +23,9 @@
 import org.glassfish.jersey.client.ClientConfig;
 
 import org.apache.http.client.CookieStore;
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 /**
  * Test of access to the underlying CookieStore instance used by the connector.
@@ -44,9 +44,9 @@
         final WebTarget target = client.target("http://localhost/");
         final CookieStore csOnTarget = ApacheConnectorProvider.getCookieStore(target);
 
-        assertNotNull("CookieStore instance set on JerseyClient should not be null.", csOnClient);
-        assertNotNull("CookieStore instance set on JerseyWebTarget should not be null.", csOnTarget);
-        assertSame("CookieStore instance set on JerseyClient should be the same instance as the one set on JerseyWebTarget"
-                + "(provided the target instance has not been further configured).", csOnClient, csOnTarget);
+        assertNotNull(csOnClient, "CookieStore instance set on JerseyClient should not be null.");
+        assertNotNull(csOnTarget, "CookieStore instance set on JerseyWebTarget should not be null.");
+        assertSame(csOnClient, csOnTarget, "CookieStore instance set on JerseyClient should be the same instance as the one "
+                + "set on JerseyWebTarget (provided the target instance has not been further configured).");
     }
 }
diff --git a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/UnderlyingHttpClientAccessTest.java b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/UnderlyingHttpClientAccessTest.java
index 61b9bd0..18b3eee 100644
--- a/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/UnderlyingHttpClientAccessTest.java
+++ b/connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/UnderlyingHttpClientAccessTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,9 +23,9 @@
 import org.glassfish.jersey.client.ClientConfig;
 
 import org.apache.http.client.HttpClient;
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 /**
  * Test of access to the underlying HTTP client instance used by the connector.
@@ -47,11 +47,9 @@
         final WebTarget target = client.target("http://localhost/");
         final HttpClient hcOnTarget = ApacheConnectorProvider.getHttpClient(target);
 
-        assertNotNull("HTTP client instance set on JerseyClient should not be null.", hcOnClient);
-        assertNotNull("HTTP client instance set on JerseyWebTarget should not be null.", hcOnTarget);
-        assertSame("HTTP client instance set on JerseyClient should be the same instance as the one set on JerseyWebTarget"
-                        + "(provided the target instance has not been further configured).",
-                hcOnClient, hcOnTarget
-        );
+        assertNotNull(hcOnClient, "HTTP client instance set on JerseyClient should not be null.");
+        assertNotNull(hcOnTarget, "HTTP client instance set on JerseyWebTarget should not be null.");
+        assertSame(hcOnClient, hcOnTarget, "HTTP client instance set on JerseyClient should be the same instance as the one "
+                + "set on JerseyWebTarget (provided the target instance has not been further configured).");
     }
 }
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AsyncTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AsyncTest.java
index 50e8f65..6ac74e5 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AsyncTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AsyncTest.java
@@ -40,10 +40,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.hamcrest.Matchers;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Asynchronous connector test.
@@ -210,7 +210,7 @@
             }
         });
 
-        assertTrue("Waiting for results has timed out.", latch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS));
+        assertTrue(latch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS), "Waiting for results has timed out.");
         final long toc = System.currentTimeMillis();
 
         assertEquals("DONE-1", r1.get());
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AuthTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AuthTest.java
index f59c0cf..c16e485 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AuthTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AuthTest.java
@@ -44,12 +44,12 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
-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 org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Paul Sandoz
@@ -398,7 +398,7 @@
     }
 
     @Test
-    @Ignore("JERSEY-1750: Cannot retry request with a non-repeatable request entity. How to buffer the entity?"
+    @Disabled("JERSEY-1750: Cannot retry request with a non-repeatable request entity. How to buffer the entity?"
             + " Allow repeatable write in jersey?")
     public void testAuthPost() {
         CredentialsStore credentialsProvider = new BasicCredentialsProvider();
@@ -474,7 +474,7 @@
     }
 
     @Test
-    @Ignore("JERSEY-1750: Cannot retry request with a non-repeatable request entity. How to buffer the entity?"
+    @Disabled("JERSEY-1750: Cannot retry request with a non-repeatable request entity. How to buffer the entity?"
             + " Allow repeatable write in jersey?")
     public void testAuthInteractivePost() {
         CredentialsStore credentialsProvider = new BasicCredentialsProvider();
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CookieTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CookieTest.java
index 0e619a6..1ff2300 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CookieTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CookieTest.java
@@ -34,11 +34,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CustomLoggingFilter.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CustomLoggingFilter.java
index 27caeda..60e4cc8 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CustomLoggingFilter.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CustomLoggingFilter.java
@@ -27,7 +27,7 @@
 import javax.ws.rs.container.ContainerResponseContext;
 import javax.ws.rs.container.ContainerResponseFilter;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Custom logging filter.
@@ -43,28 +43,28 @@
     @Override
     public void filter(ClientRequestContext context) throws IOException {
         System.out.println("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ClientRequestContext context, ClientResponseContext clientResponseContext) throws IOException {
         System.out.println("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         postFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context) throws IOException {
         System.out.println("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context, ContainerResponseContext containerResponseContext) throws IOException {
         System.out.println("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         postFilterCalled++;
     }
 }
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/DisableContentEncodingTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/DisableContentEncodingTest.java
index 51bc6a0..9bd1572 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/DisableContentEncodingTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/DisableContentEncodingTest.java
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Ondrej Kosatka
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/FollowRedirectsTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/FollowRedirectsTest.java
index 9377a0a..27a54c9 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/FollowRedirectsTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/FollowRedirectsTest.java
@@ -36,8 +36,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Apache connector follow redirect tests.
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/GZIPContentEncodingTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/GZIPContentEncodingTest.java
index 0230ba1..298ca42 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/GZIPContentEncodingTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/GZIPContentEncodingTest.java
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HelloWorldTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HelloWorldTest.java
index e0f6612..2dc697c 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HelloWorldTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HelloWorldTest.java
@@ -52,11 +52,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Jakub Podlesak
@@ -149,11 +149,11 @@
         try {
             target.request().get();
             if (exceptionExpected) {
-                Assert.fail("Exception expected");
+                Assertions.fail("Exception expected");
             }
         } catch (Exception e) {
             if (!exceptionExpected) {
-                Assert.fail("Exception not expected");
+                Assertions.fail("Exception not expected");
             }
         } finally {
             clientTwo.close();
@@ -389,10 +389,10 @@
             final String response = rootTarget.path("error2").request().get(String.class);
             fail("Exception expected. Received: " + response);
         } catch (InternalServerErrorException isee) {
-            assertEquals("Received unexpected data.", "Error2.", isee.getResponse().readEntity(String.class));
+            assertEquals("Error2.", isee.getResponse().readEntity(String.class), "Received unexpected data.");
             // Test buffering:
             // second read would fail if entity was not buffered
-            assertEquals("Unexpected data in the entity buffer.", "Error2.", isee.getResponse().readEntity(String.class));
+            assertEquals("Error2.", isee.getResponse().readEntity(String.class), "Unexpected data in the entity buffer.");
         }
 
         assertEquals(0, connectionCounter.get());
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpEntityTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpEntityTest.java
index cad5ea8..5581fc9 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpEntityTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpEntityTest.java
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
@@ -66,8 +66,8 @@
         InputStreamEntity entity = new InputStreamEntity(bais, ContentType.TEXT_PLAIN);
 
         try (Response response = target().request().post(Entity.entity(entity, MediaType.APPLICATION_OCTET_STREAM))) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals(ECHO_MESSAGE, response.readEntity(String.class));
+            Assertions.assertEquals(200, response.getStatus());
+            Assertions.assertEquals(ECHO_MESSAGE, response.readEntity(String.class));
         }
     }
 
@@ -76,8 +76,8 @@
         ByteArrayEntity entity = new ByteArrayEntity(ECHO_MESSAGE.getBytes(), ContentType.TEXT_PLAIN);
 
         try (Response response = target().request().post(Entity.entity(entity, MediaType.APPLICATION_OCTET_STREAM))) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals(ECHO_MESSAGE, response.readEntity(String.class));
+            Assertions.assertEquals(200, response.getStatus());
+            Assertions.assertEquals(ECHO_MESSAGE, response.readEntity(String.class));
         }
     }
 }
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpHeadersTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpHeadersTest.java
index c63b7a8..cea6db2 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpHeadersTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpHeadersTest.java
@@ -43,9 +43,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpMethodTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpMethodTest.java
index 00a45a1..1f48303 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpMethodTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpMethodTest.java
@@ -41,11 +41,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/LargeDataTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/LargeDataTest.java
index 40f1b41..fc67712 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/LargeDataTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/LargeDataTest.java
@@ -37,8 +37,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * The LargeDataTest reproduces a problem when bytes of large data sent are incorrectly sent.
@@ -107,9 +107,8 @@
                 throw exception;
             }
 
-            Assert.assertEquals("Unexpected error: " + response.getStatus(),
-                    Status.Family.SUCCESSFUL,
-                    response.getStatusInfo().getFamily());
+            Assertions.assertEquals(Status.Family.SUCCESSFUL, response.getStatusInfo().getFamily(),
+                    "Unexpected error: " + response.getStatus());
         } finally {
             response.close();
         }
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/ManagedClientTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/ManagedClientTest.java
index 46ba4ee..cd34682 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/ManagedClientTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/ManagedClientTest.java
@@ -46,8 +46,8 @@
 import org.glassfish.jersey.server.Uri;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Jersey programmatic managed client test
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/NoEntityTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/NoEntityTest.java
index cdea49b..e00ded9 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/NoEntityTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/NoEntityTest.java
@@ -31,7 +31,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/RetryStrategyTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/RetryStrategyTest.java
index 6254c43..cdfc30f 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/RetryStrategyTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/RetryStrategyTest.java
@@ -40,8 +40,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class RetryStrategyTest extends JerseyTest {
     private static final int READ_TIMEOUT_MS = 100;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/SpecialHeaderTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/SpecialHeaderTest.java
index ce6a377..8803ac4 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/SpecialHeaderTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/SpecialHeaderTest.java
@@ -29,9 +29,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -67,23 +67,23 @@
 
 
     @Test
-    @Ignore("Apache connector does not provide information about encoding for gzip and deflate encoding")
+    @Disabled("Apache connector does not provide information about encoding for gzip and deflate encoding")
     public void testEncoded() {
         final Response response = target().path("resource/encoded").request("text/plain").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("get", response.readEntity(String.class));
-        Assert.assertEquals("gzip", response.getHeaderString(HttpHeaders.CONTENT_ENCODING));
-        Assert.assertEquals("text/plain", response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-        Assert.assertEquals(3, response.getHeaderString(HttpHeaders.CONTENT_LENGTH));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("get", response.readEntity(String.class));
+        Assertions.assertEquals("gzip", response.getHeaderString(HttpHeaders.CONTENT_ENCODING));
+        Assertions.assertEquals("text/plain", response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        Assertions.assertEquals(3, response.getHeaderString(HttpHeaders.CONTENT_LENGTH));
     }
 
     @Test
     public void testNonEncoded() {
         final Response response = target().path("resource/non-encoded").request("text/plain").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("get", response.readEntity(String.class));
-        Assert.assertNull(response.getHeaderString(HttpHeaders.CONTENT_ENCODING));
-        Assert.assertEquals("text/plain", response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-        Assert.assertEquals("3", response.getHeaderString(HttpHeaders.CONTENT_LENGTH));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("get", response.readEntity(String.class));
+        Assertions.assertNull(response.getHeaderString(HttpHeaders.CONTENT_ENCODING));
+        Assertions.assertEquals("text/plain", response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        Assertions.assertEquals("3", response.getHeaderString(HttpHeaders.CONTENT_LENGTH));
     }
 }
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/StreamingTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/StreamingTest.java
index ea90e79..7a05f61 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/StreamingTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/StreamingTest.java
@@ -37,8 +37,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TimeoutTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TimeoutTest.java
index 7eab1b3..0d69457 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TimeoutTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TimeoutTest.java
@@ -31,11 +31,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Martin Matula
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TraceSupportTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TraceSupportTest.java
index d95c2f2..c4c2d3a 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TraceSupportTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TraceSupportTest.java
@@ -45,10 +45,10 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * This very basic resource showcases support of a HTTP TRACE method,
@@ -129,9 +129,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsProgrammatic) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // toLowerCase - http header field names are case insensitive
-                    responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                    responseEntity.contains(expectedFragment),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
@@ -143,9 +143,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsAnnotated) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // toLowerCase - http header field names are case insensitive
-                    responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                    responseEntity.contains(expectedFragment),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingCookieStoreAccessTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingCookieStoreAccessTest.java
index 8248fdd..1250637 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingCookieStoreAccessTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingCookieStoreAccessTest.java
@@ -23,9 +23,9 @@
 import org.apache.hc.client5.http.cookie.CookieStore;
 import org.glassfish.jersey.client.ClientConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 /**
  * Test of access to the underlying CookieStore instance used by the connector.
@@ -44,9 +44,9 @@
         final WebTarget target = client.target("http://localhost/");
         final CookieStore csOnTarget = Apache5ConnectorProvider.getCookieStore(target);
 
-        assertNotNull("CookieStore instance set on JerseyClient should not be null.", csOnClient);
-        assertNotNull("CookieStore instance set on JerseyWebTarget should not be null.", csOnTarget);
-        assertSame("CookieStore instance set on JerseyClient should be the same instance as the one set on JerseyWebTarget"
-                + "(provided the target instance has not been further configured).", csOnClient, csOnTarget);
+        assertNotNull(csOnClient, "CookieStore instance set on JerseyClient should not be null.");
+        assertNotNull(csOnTarget, "CookieStore instance set on JerseyWebTarget should not be null.");
+        assertSame(csOnClient, csOnTarget, "CookieStore instance set on JerseyClient should be the same instance as the one "
+                + "set on JerseyWebTarget (provided the target instance has not been further configured).");
     }
 }
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingHttpClientAccessTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingHttpClientAccessTest.java
index 0c2e320..d8aec2c 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingHttpClientAccessTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingHttpClientAccessTest.java
@@ -23,9 +23,9 @@
 import org.apache.hc.client5.http.classic.HttpClient;
 import org.glassfish.jersey.client.ClientConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 /**
  * Test of access to the underlying HTTP client instance used by the connector.
@@ -47,11 +47,9 @@
         final WebTarget target = client.target("http://localhost/");
         final HttpClient hcOnTarget = Apache5ConnectorProvider.getHttpClient(target);
 
-        assertNotNull("HTTP client instance set on JerseyClient should not be null.", hcOnClient);
-        assertNotNull("HTTP client instance set on JerseyWebTarget should not be null.", hcOnTarget);
-        assertSame("HTTP client instance set on JerseyClient should be the same instance as the one set on JerseyWebTarget"
-                        + "(provided the target instance has not been further configured).",
-                hcOnClient, hcOnTarget
-        );
+        assertNotNull(hcOnClient, "HTTP client instance set on JerseyClient should not be null.");
+        assertNotNull(hcOnTarget, "HTTP client instance set on JerseyWebTarget should not be null.");
+        assertSame(hcOnClient, hcOnTarget, "HTTP client instance set on JerseyClient should be the same instance as the one"
+                + " set on JerseyWebTarget (provided the target instance has not been further configured).");
     }
 }
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/AsyncTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/AsyncTest.java
index 754c371..bc970c7 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/AsyncTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/AsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,9 +36,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.hamcrest.Matchers;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Asynchronous connector test.
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/CustomizersTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/CustomizersTest.java
index 75e0ca0..23a8288 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/CustomizersTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/CustomizersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,9 +32,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import com.ning.http.client.AsyncHttpClientConfig;
 import com.ning.http.client.RequestBuilder;
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/FollowRedirectsTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/FollowRedirectsTest.java
index 21f8879..2d86199 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/FollowRedirectsTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/FollowRedirectsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Grizzly connector follow redirect tests.
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpHeadersTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpHeadersTest.java
index 2772864..8157609 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpHeadersTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpHeadersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,9 +26,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests the headers.
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpMethodTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpMethodTest.java
index 3f90504..6752870 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpMethodTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpMethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,7 +19,7 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -30,8 +30,8 @@
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests the Http methods.
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/NoEntityTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/NoEntityTest.java
index a6db9ee..8e7cfe5 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/NoEntityTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/NoEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,7 +31,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/ParallelTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/ParallelTest.java
index 8cd48ba..2016b58 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/ParallelTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/ParallelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,10 +37,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests the parallel execution of multiple requests.
@@ -120,15 +120,15 @@
 
             startBarrier.await(1, TimeUnit.SECONDS);
 
-            assertTrue("Waiting for clients to finish has timed out.", doneLatch.await(5 * getAsyncTimeoutMultiplier(),
-                    TimeUnit.SECONDS));
+            assertTrue(doneLatch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS),
+                    "Waiting for clients to finish has timed out.");
 
-            assertEquals("Resource counter", PARALLEL_CLIENTS, resourceCounter.get());
+            assertEquals(PARALLEL_CLIENTS, resourceCounter.get(), "Resource counter");
 
-            assertEquals("Received counter", PARALLEL_CLIENTS, receivedCounter.get());
+            assertEquals(PARALLEL_CLIENTS, receivedCounter.get(), "Received counter");
         } finally {
             executor.shutdownNow();
-            Assert.assertTrue("Executor termination", executor.awaitTermination(5, TimeUnit.SECONDS));
+            Assertions.assertTrue(executor.awaitTermination(5, TimeUnit.SECONDS), "Executor termination");
         }
     }
 }
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TimeoutTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TimeoutTest.java
index f920bd7..0d771af 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TimeoutTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TimeoutTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,11 +29,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Martin Matula
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TraceSupportTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TraceSupportTest.java
index d5b2cf5..d11646b 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TraceSupportTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TraceSupportTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -45,10 +45,10 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * This very basic resource showcases support of a HTTP TRACE method,
@@ -129,9 +129,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsProgrammatic) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // toLowerCase - http header field names are case insensitive
-                    responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                    responseEntity.contains(expectedFragment),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
@@ -143,9 +143,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsAnnotated) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // toLowerCase - http header field names are case insensitive
-                    responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                    responseEntity.contains(expectedFragment),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/UnderlyingHttpClientAccessTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/UnderlyingHttpClientAccessTest.java
index eee7992..2edae61 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/UnderlyingHttpClientAccessTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/UnderlyingHttpClientAccessTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,9 +22,9 @@
 
 import org.glassfish.jersey.client.ClientConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 import com.ning.http.client.AsyncHttpClient;
 
@@ -48,11 +48,9 @@
         final WebTarget target = client.target("http://localhost/");
         final AsyncHttpClient hcOnTarget = GrizzlyConnectorProvider.getHttpClient(target);
 
-        assertNotNull("HTTP client instance set on JerseyClient should not be null.", hcOnClient);
-        assertNotNull("HTTP client instance set on JerseyWebTarget should not be null.", hcOnTarget);
-        assertSame("HTTP client instance set on JerseyClient should be the same instance as the one set on JerseyWebTarget"
-                        + "(provided the target instance has not been further configured).",
-                hcOnClient, hcOnTarget
-        );
+        assertNotNull(hcOnClient, "HTTP client instance set on JerseyClient should not be null.");
+        assertNotNull(hcOnTarget, "HTTP client instance set on JerseyWebTarget should not be null.");
+        assertSame(hcOnClient, hcOnTarget, "HTTP client instance set on JerseyClient should be the same instance as the one "
+                + "set on JerseyWebTarget (provided the target instance has not been further configured).");
     }
 }
diff --git a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/AsyncTest.java b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/AsyncTest.java
index b6189db..4d6c9b3 100644
--- a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/AsyncTest.java
+++ b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/AsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,7 +21,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.hamcrest.Matchers;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -36,8 +36,8 @@
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Logger;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Asynchronous connector test.
diff --git a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/BasicHelidonConnectorTest.java b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/BasicHelidonConnectorTest.java
index 4af0ebe..48d7db5 100644
--- a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/BasicHelidonConnectorTest.java
+++ b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/BasicHelidonConnectorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,10 +21,11 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
@@ -45,7 +46,9 @@
 import javax.ws.rs.core.Response;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -55,21 +58,9 @@
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
-@RunWith(Parameterized.class)
-public class BasicHelidonConnectorTest extends JerseyTest {
-
-    private final String entityType;
-
-    public BasicHelidonConnectorTest(String entityType) {
-        this.entityType = entityType;
-    }
-
-    @Parameterized.Parameters
-    public static Object[] data() {
-        return new Object[]{"BYTE_ARRAY_OUTPUT_STREAM", "READABLE_BYTE_CHANNEL", "OUTPUT_STREAM_PUBLISHER"};
-    }
+public class BasicHelidonConnectorTest {
 
     @Path("basic")
     public static class BasicResource {
@@ -112,6 +103,10 @@
         }
     }
 
+    public static List<String> data() {
+        return Arrays.asList("BYTE_ARRAY_OUTPUT_STREAM", "READABLE_BYTE_CHANNEL", "OUTPUT_STREAM_PUBLISHER");
+    }
+
     @Path("async")
     public static class AsyncResource {
         private static CountDownLatch shortLong = null;
@@ -137,181 +132,200 @@
         }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(BasicResource.class, AsyncResource.class)
-                .property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, "WARNING");
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        data().forEach(entityType -> {
+            BasicHelidonConnectorTemplateTest test = new BasicHelidonConnectorTemplateTest(entityType) {};
+            tests.add(TestHelper.toTestContainer(test, entityType));
+        });
+        return tests;
     }
 
-    @Override
-    protected void configureClient(ClientConfig config) {
-        super.configureClient(config);
-        config.connectorProvider(new HelidonConnectorProvider());
-        config.property("jersey.config.helidon.client.entity.type", entityType);
-    }
+    public abstract static class BasicHelidonConnectorTemplateTest extends JerseyTest {
 
-    @Test
-    public void testBasicGet() {
-        try (Response response = target("basic").path("get").request().get()) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals("ok", response.readEntity(String.class));
+        private final String entityType;
+
+        public BasicHelidonConnectorTemplateTest(String entityType) {
+            this.entityType = entityType;
         }
-    }
 
-    @Test
-    public void testBasicPost() {
-        try (Response response = target("basic").path("post").request()
-                .buildPost(Entity.entity("ok", MediaType.TEXT_PLAIN_TYPE)).invoke()) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals("okok", response.readEntity(String.class));
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(BasicResource.class, AsyncResource.class)
+                    .property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, "WARNING");
         }
-    }
 
-    @Test
-    public void queryGetTest() {
-        try (Response response = target("basic").path("getquery")
-                .queryParam("first", "hello")
-                .queryParam("second", "world")
-                .request().get()) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals("helloworld", response.readEntity(String.class));
+        @Override
+        protected void configureClient(ClientConfig config) {
+            super.configureClient(config);
+            config.connectorProvider(new HelidonConnectorProvider());
+            config.property("jersey.config.helidon.client.entity.type", entityType);
         }
-    }
 
-    @Test
-    public void testHeaders() {
-        String[][] headers = new String[][]{{"X-TEST-ONE", "ONE"}, {"X-TEST-TWO", "TWO"}, {"X-TEST-THREE", "THREE"}};
-        MultivaluedHashMap<String, Object> map = new MultivaluedHashMap<>();
-        Arrays.stream(headers).forEach(a -> map.add(a[0], a[1]));
-        try (Response response = target("basic").path("headers").request().headers(map).get()) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals("ok", response.readEntity(String.class));
-            for (int i = 0; i != headers.length; i++) {
-                Assert.assertTrue(response.getHeaders().containsKey(headers[i][0]));
-                Assert.assertEquals(headers[i][1], response.getStringHeaders().getFirst(headers[i][0]));
+        @Test
+        public void testBasicGet() {
+            try (Response response = target("basic").path("get").request().get()) {
+                Assertions.assertEquals(200, response.getStatus());
+                Assertions.assertEquals("ok", response.readEntity(String.class));
             }
         }
-    }
 
-    @Test
-    public void testProduces() {
-        try (Response response = target("basic").path("produces/consumes").request("test/z-test")
-                .put(Entity.entity("ok", new MediaType("test", "x-test")))) {
-            Assert.assertEquals(406, response.getStatus());
+        @Test
+        public void testBasicPost() {
+            try (Response response = target("basic").path("post").request()
+                    .buildPost(Entity.entity("ok", MediaType.TEXT_PLAIN_TYPE)).invoke()) {
+                Assertions.assertEquals(200, response.getStatus());
+                Assertions.assertEquals("okok", response.readEntity(String.class));
+            }
         }
 
-        try (Response response = target("basic").path("produces/consumes").request()
-                .put(Entity.entity("ok", new MediaType("test", "x-test")))) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals("okok", response.readEntity(String.class));
-            Assert.assertEquals("test/y-test", response.getStringHeaders().getFirst(HttpHeaders.CONTENT_TYPE));
-        }
-    }
-
-    @Test
-    public void testAsyncGet() throws ExecutionException, InterruptedException {
-        Future<Response> futureResponse = target("basic").path("get").request().async().get();
-        try (Response response = futureResponse.get()) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals("ok", response.readEntity(String.class));
-        }
-    }
-
-    @Test
-    public void testConsumes() {
-        try (Response response = target("basic").path("produces/consumes").request("test/y-test")
-                .put(Entity.entity("ok", new MediaType("test", "z-test")))) {
-            Assert.assertEquals(415, response.getStatus());
+        @Test
+        public void queryGetTest() {
+            try (Response response = target("basic").path("getquery")
+                    .queryParam("first", "hello")
+                    .queryParam("second", "world")
+                    .request().get()) {
+                Assertions.assertEquals(200, response.getStatus());
+                Assertions.assertEquals("helloworld", response.readEntity(String.class));
+            }
         }
 
-        try (Response response = target("basic").path("produces/consumes").request("test/y-test")
-                .put(Entity.entity("ok", MediaType.WILDCARD_TYPE))) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals("okok", response.readEntity(String.class));
-            Assert.assertEquals("test/y-test", response.getStringHeaders().getFirst(HttpHeaders.CONTENT_TYPE));
-        }
-    }
-
-    @Test
-    public void testRxGet() throws ExecutionException, InterruptedException {
-        CompletableFuture<Response> futureResponse =
-                target("basic").path("get").request().rx(JerseyCompletionStageRxInvoker.class).get();
-
-        try (Response response = futureResponse.get()) {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals("ok", response.readEntity(String.class));
-        }
-    }
-
-    @Test
-    public void testInputStreamEntity() throws IOException {
-        try (Response response = target("basic").path("get").request().get()) {
-            Assert.assertEquals(200, response.getStatus());
-            InputStream is = response.readEntity(InputStream.class);
-            Assert.assertEquals('o', is.read());
-            Assert.assertEquals('k', is.read());
-            is.close();
-        }
-    }
-
-    // -----------Async
-
-    @Test
-    public void testTwoClientsAsync() throws ExecutionException, InterruptedException {
-        try (Response resetResponse = target("async").path("reset").request().get()) {
-            Assert.assertEquals(204, resetResponse.getStatus());
+        @Test
+        public void testHeaders() {
+            String[][] headers = new String[][]{{"X-TEST-ONE", "ONE"}, {"X-TEST-TWO", "TWO"}, {"X-TEST-THREE", "THREE"}};
+            MultivaluedHashMap<String, Object> map = new MultivaluedHashMap<>();
+            Arrays.stream(headers).forEach(a -> map.add(a[0], a[1]));
+            try (Response response = target("basic").path("headers").request().headers(map).get()) {
+                Assertions.assertEquals(200, response.getStatus());
+                Assertions.assertEquals("ok", response.readEntity(String.class));
+                for (int i = 0; i != headers.length; i++) {
+                    Assertions.assertTrue(response.getHeaders().containsKey(headers[i][0]));
+                    Assertions.assertEquals(headers[i][1], response.getStringHeaders().getFirst(headers[i][0]));
+                }
+            }
         }
 
-        ClientConfig config = new ClientConfig();
-        config.connectorProvider(new HelidonConnectorProvider());
+        @Test
+        public void testProduces() {
+            try (Response response = target("basic").path("produces/consumes").request("test/z-test")
+                    .put(Entity.entity("ok", new MediaType("test", "x-test")))) {
+                Assertions.assertEquals(406, response.getStatus());
+            }
 
-        Client longClient = ClientBuilder.newClient(config);
-        Invocation.Builder longRequest = longClient.target(getBaseUri()).path("async/long").request();
-
-        Client shortClient = ClientBuilder.newClient(config);
-        Invocation.Builder shortRequest = shortClient.target(getBaseUri()).path("async/short").request();
-
-        Future<Response> futureLongResponse = longRequest.async().get();
-        Future<Response> futureShortResponse = shortRequest.async().get();
-
-        try (Response shortResponse = futureShortResponse.get()) {
-            Assert.assertEquals(200, shortResponse.getStatus());
-            Assert.assertEquals("short", shortResponse.readEntity(String.class));
+            try (Response response = target("basic").path("produces/consumes").request()
+                    .put(Entity.entity("ok", new MediaType("test", "x-test")))) {
+                Assertions.assertEquals(200, response.getStatus());
+                Assertions.assertEquals("okok", response.readEntity(String.class));
+                Assertions.assertEquals("test/y-test", response.getStringHeaders().getFirst(HttpHeaders.CONTENT_TYPE));
+            }
         }
 
-        try (Response longResponse = futureLongResponse.get()) {
-            Assert.assertEquals(200, longResponse.getStatus());
-            Assert.assertEquals("long", longResponse.readEntity(String.class));
-        }
-    }
-
-    @Test
-    public void testOneClientsTwoReqestsAsync() throws ExecutionException, InterruptedException {
-        try (Response resetResponse = target("async").path("reset").request().get()) {
-            Assert.assertEquals(204, resetResponse.getStatus());
+        @Test
+        public void testAsyncGet() throws ExecutionException, InterruptedException {
+            Future<Response> futureResponse = target("basic").path("get").request().async().get();
+            try (Response response = futureResponse.get()) {
+                Assertions.assertEquals(200, response.getStatus());
+                Assertions.assertEquals("ok", response.readEntity(String.class));
+            }
         }
 
-        Invocation.Builder longRequest = target().path("async/long").request();
-        Invocation.Builder shortRequest = target().path("async/short").request();
+        @Test
+        public void testConsumes() {
+            try (Response response = target("basic").path("produces/consumes").request("test/y-test")
+                    .put(Entity.entity("ok", new MediaType("test", "z-test")))) {
+                Assertions.assertEquals(415, response.getStatus());
+            }
 
-        Future<Response> futureLongResponse = longRequest.async().get();
-        Future<Response> futureShortResponse = shortRequest.async().get();
-
-        try (Response shortResponse = futureShortResponse.get()) {
-            Assert.assertEquals(200, shortResponse.getStatus());
-            Assert.assertEquals("short", shortResponse.readEntity(String.class));
+            try (Response response = target("basic").path("produces/consumes").request("test/y-test")
+                    .put(Entity.entity("ok", MediaType.WILDCARD_TYPE))) {
+                Assertions.assertEquals(200, response.getStatus());
+                Assertions.assertEquals("okok", response.readEntity(String.class));
+                Assertions.assertEquals("test/y-test", response.getStringHeaders().getFirst(HttpHeaders.CONTENT_TYPE));
+            }
         }
 
-        try (Response longResponse = futureLongResponse.get()) {
-            Assert.assertEquals(200, longResponse.getStatus());
-            Assert.assertEquals("long", longResponse.readEntity(String.class));
-        }
-    }
+        @Test
+        public void testRxGet() throws ExecutionException, InterruptedException {
+            CompletableFuture<Response> futureResponse =
+                    target("basic").path("get").request().rx(JerseyCompletionStageRxInvoker.class).get();
 
-    @Test
-    public void testOptionsWithEntity() {
-        Response response = target("basic").path("get").request().build("OPTIONS", Entity.text("OPTIONS")).invoke();
-        assertEquals(200, response.getStatus());
-        response.close();
+            try (Response response = futureResponse.get()) {
+                Assertions.assertEquals(200, response.getStatus());
+                Assertions.assertEquals("ok", response.readEntity(String.class));
+            }
+        }
+
+        @Test
+        public void testInputStreamEntity() throws IOException {
+            try (Response response = target("basic").path("get").request().get()) {
+                Assertions.assertEquals(200, response.getStatus());
+                InputStream is = response.readEntity(InputStream.class);
+                Assertions.assertEquals('o', is.read());
+                Assertions.assertEquals('k', is.read());
+                is.close();
+            }
+        }
+
+        // -----------Async
+
+        @Test
+        public void testTwoClientsAsync() throws ExecutionException, InterruptedException {
+            try (Response resetResponse = target("async").path("reset").request().get()) {
+                Assertions.assertEquals(204, resetResponse.getStatus());
+            }
+
+            ClientConfig config = new ClientConfig();
+            config.connectorProvider(new HelidonConnectorProvider());
+
+            Client longClient = ClientBuilder.newClient(config);
+            Invocation.Builder longRequest = longClient.target(getBaseUri()).path("async/long").request();
+
+            Client shortClient = ClientBuilder.newClient(config);
+            Invocation.Builder shortRequest = shortClient.target(getBaseUri()).path("async/short").request();
+
+            Future<Response> futureLongResponse = longRequest.async().get();
+            Future<Response> futureShortResponse = shortRequest.async().get();
+
+            try (Response shortResponse = futureShortResponse.get()) {
+                Assertions.assertEquals(200, shortResponse.getStatus());
+                Assertions.assertEquals("short", shortResponse.readEntity(String.class));
+            }
+
+            try (Response longResponse = futureLongResponse.get()) {
+                Assertions.assertEquals(200, longResponse.getStatus());
+                Assertions.assertEquals("long", longResponse.readEntity(String.class));
+            }
+        }
+
+        @Test
+        public void testOneClientsTwoReqestsAsync() throws ExecutionException, InterruptedException {
+            try (Response resetResponse = target("async").path("reset").request().get()) {
+                Assertions.assertEquals(204, resetResponse.getStatus());
+            }
+
+            Invocation.Builder longRequest = target().path("async/long").request();
+            Invocation.Builder shortRequest = target().path("async/short").request();
+
+            Future<Response> futureLongResponse = longRequest.async().get();
+            Future<Response> futureShortResponse = shortRequest.async().get();
+
+            try (Response shortResponse = futureShortResponse.get()) {
+                Assertions.assertEquals(200, shortResponse.getStatus());
+                Assertions.assertEquals("short", shortResponse.readEntity(String.class));
+            }
+
+            try (Response longResponse = futureLongResponse.get()) {
+                Assertions.assertEquals(200, longResponse.getStatus());
+                Assertions.assertEquals("long", longResponse.readEntity(String.class));
+            }
+        }
+
+        @Test
+        public void testOptionsWithEntity() {
+            Response response = target("basic").path("get").request().build("OPTIONS", Entity.text("OPTIONS")).invoke();
+            assertEquals(200, response.getStatus());
+            response.close();
+        }
     }
 }
diff --git a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/FollowRedirectsTest.java b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/FollowRedirectsTest.java
index 87105d6..60a2826 100644
--- a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/FollowRedirectsTest.java
+++ b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/FollowRedirectsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,7 +22,7 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -36,7 +36,7 @@
 import java.io.IOException;
 import java.util.logging.Logger;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Helidon connector follow redirect tests.
diff --git a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/LargeDataTest.java b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/LargeDataTest.java
index 8a7a690..8b6792e 100644
--- a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/LargeDataTest.java
+++ b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/LargeDataTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,8 +20,8 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
@@ -106,9 +106,8 @@
                 throw exception;
             }
 
-            Assert.assertEquals("Unexpected error: " + response.getStatus(),
-                    Status.Family.SUCCESSFUL,
-                    response.getStatusInfo().getFamily());
+            Assertions.assertEquals(Status.Family.SUCCESSFUL, response.getStatusInfo().getFamily(),
+                    "Unexpected error: " + response.getStatus());
         } finally {
             response.close();
         }
diff --git a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/ParallelTest.java b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/ParallelTest.java
index 94a1d26..6ef37cd 100644
--- a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/ParallelTest.java
+++ b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/ParallelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,8 +19,8 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -38,8 +38,8 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests the parallel execution of multiple requests.
@@ -119,15 +119,15 @@
 
             startBarrier.await(1, TimeUnit.SECONDS);
 
-            assertTrue("Waiting for clients to finish has timed out.", doneLatch.await(5 * getAsyncTimeoutMultiplier(),
-                                                                                       TimeUnit.SECONDS));
+            assertTrue(doneLatch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS),
+                "Waiting for clients to finish has timed out.");
 
-            assertEquals("Resource counter", PARALLEL_CLIENTS, resourceCounter.get());
+            assertEquals(PARALLEL_CLIENTS, resourceCounter.get(), "Resource counter");
 
-            assertEquals("Received counter", PARALLEL_CLIENTS, receivedCounter.get());
+            assertEquals(PARALLEL_CLIENTS, receivedCounter.get(), "Received counter");
         } finally {
             executor.shutdownNow();
-            Assert.assertTrue("Executor termination", executor.awaitTermination(5, TimeUnit.SECONDS));
+            Assertions.assertTrue(executor.awaitTermination(5, TimeUnit.SECONDS), "Executor termination");
         }
     }
 }
diff --git a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/TimeoutTest.java b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/TimeoutTest.java
index 1fe6374..3ae1470 100644
--- a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/TimeoutTest.java
+++ b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/TimeoutTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,8 +20,8 @@
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -29,8 +29,8 @@
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
 
-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;
 
 /**
  * @author Martin Matula
@@ -82,7 +82,7 @@
         }
     }
 
-    @Ignore
+    @Disabled
     // TODO - WebClient change request
     public void testTimeoutInRequest() {
         try {
diff --git a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/sse/EventOutputTest.java b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/sse/EventOutputTest.java
index 5eb76e8..cd98a6d 100644
--- a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/sse/EventOutputTest.java
+++ b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/sse/EventOutputTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.media.sse.SseFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -48,10 +48,10 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 import static org.hamcrest.Matchers.containsString;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Event output tests.
@@ -179,12 +179,12 @@
             closeTimedOut = es.close(5, TimeUnit.SECONDS);
         }
 
-        assertEquals("Unexpected event count", 2, eventComments.size());
+        assertEquals(2, eventComments.size(), "Unexpected event count");
         for (int i = 1; i <= 2; i++) {
-            assertEquals("Unexpected comment data on event #" + i, "No comment #" + i, eventComments.poll());
+            assertEquals("No comment #" + i, eventComments.poll(), "Unexpected comment data on event #" + i);
         }
-        assertTrue("Event latch has timed out", latchTimedOut);
-        assertTrue("EventSource.close() has timed out", closeTimedOut);
+        assertTrue(latchTimedOut, "Event latch has timed out");
+        assertTrue(closeTimedOut, "EventSource.close() has timed out");
     }
 
     @Test
@@ -265,8 +265,8 @@
         }
 
         // 2.0.0.-M3 assertEquals("Unexpected event count", 1, counter.get());
-        assertEquals("Unexpected event data", "single", eventData.get());
-        assertTrue("Event latch has timed out", latchTimedOut);
-        assertTrue("EventSource.close() has timed out", closeTimedOut);
+        assertEquals("single", eventData.get(), "Unexpected event data");
+        assertTrue(latchTimedOut, "Event latch has timed out");
+        assertTrue(closeTimedOut, "EventSource.close() has timed out");
     }
 }
diff --git a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/sse/SseTest.java b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/sse/SseTest.java
index cba0763..a102d9b 100644
--- a/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/sse/SseTest.java
+++ b/connectors/helidon-connector/src/test/java/org/glassfish/jersey/helidon/connector/sse/SseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,8 +20,8 @@
 import org.glassfish.jersey.helidon.connector.HelidonConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Singleton;
@@ -119,8 +119,8 @@
             latch.await(WAIT_TIME, TimeUnit.MILLISECONDS);
         }
 
-        Assert.assertEquals("AAAAAAAAAA", sb.toString());
-        Assert.assertEquals(0, latch.getCount());
+        Assertions.assertEquals("AAAAAAAAAA", sb.toString());
+        Assertions.assertEquals(0, latch.getCount());
     }
 
     @Test
@@ -137,11 +137,11 @@
         clientOne.messageLatch.await(WAIT_TIME, TimeUnit.MILLISECONDS);
         clientTwo.messageLatch.await(WAIT_TIME, TimeUnit.MILLISECONDS);
 
-        Assert.assertEquals(0, clientOne.messageLatch.getCount());
-        Assert.assertEquals(0, clientTwo.messageLatch.getCount());
+        Assertions.assertEquals(0, clientOne.messageLatch.getCount());
+        Assertions.assertEquals(0, clientTwo.messageLatch.getCount());
 
-        Assert.assertEquals(BroadcasterResource.WELCOME + PALINDROME + PALINDROME, clientOne.message.toString());
-        Assert.assertEquals(BroadcasterResource.WELCOME + PALINDROME + PALINDROME, clientTwo.message.toString());
+        Assertions.assertEquals(BroadcasterResource.WELCOME + PALINDROME + PALINDROME, clientOne.message.toString());
+        Assertions.assertEquals(BroadcasterResource.WELCOME + PALINDROME + PALINDROME, clientTwo.message.toString());
 
         clientOne.close();
         clientTwo.close();
@@ -168,13 +168,13 @@
             source.open();
 
             latch.await(WAIT_TIME, TimeUnit.MILLISECONDS);
-            Assert.assertEquals(0, latch.getCount());
+            Assertions.assertEquals(0, latch.getCount());
         }
 
         private void broadcast() {
             try (Response r = target.path("broadcast/broadcast")
                     .request().buildPost(Entity.entity(PALINDROME, MediaType.TEXT_PLAIN)).invoke()) {
-                Assert.assertEquals(204, r.getStatus());
+                Assertions.assertEquals(204, r.getStatus());
             }
         }
 
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/HttpMethodTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/HttpMethodTest.java
index 60f5f1b..0f68e20 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/HttpMethodTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/HttpMethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,7 +19,7 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -30,8 +30,8 @@
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests the Http methods.
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/AsynchronousBodyInputStreamTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/AsynchronousBodyInputStreamTest.java
index 3d64abe..f67aa01 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/AsynchronousBodyInputStreamTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/AsynchronousBodyInputStreamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,14 +26,13 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.junit.Test;
-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.Assert.fail;
-
-import static junit.framework.TestCase.assertNull;
+import org.junit.jupiter.api.Test;
+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.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/AsynchronousBodyOutputStreamTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/AsynchronousBodyOutputStreamTest.java
index 2feea43..e936df7 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/AsynchronousBodyOutputStreamTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/AsynchronousBodyOutputStreamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,13 +31,12 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
-import org.junit.Test;
-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 junit.framework.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+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 static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ChunkedBodyOutputStreamTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ChunkedBodyOutputStreamTest.java
index 474e9e9..a54345b 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ChunkedBodyOutputStreamTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ChunkedBodyOutputStreamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,11 +19,11 @@
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.TestCase.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ConnectionPoolTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ConnectionPoolTest.java
index 9585c54..2c5be92 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ConnectionPoolTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ConnectionPoolTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,9 +44,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/CookieTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/CookieTest.java
index 82fee74..33ccc85 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/CookieTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/CookieTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,9 +34,9 @@
 import org.glassfish.jersey.jdk.connector.JdkConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
@@ -102,7 +102,7 @@
                 .get();
         // Issue 4678 happens here. HttpParser splits the headers value by comma.
         List<Object> setCookies = response.getHeaders().get(HttpHeaders.SET_COOKIE);
-        assertEquals("Expected 1 cookie, but it received: " + setCookies, 1, setCookies.size());
+        assertEquals(1, setCookies.size(), "Expected 1 cookie, but it received: " + setCookies);
         NewCookie newCookie = response.getCookies().get("foo2");
         assertEquals("bar", newCookie.getValue());
     }
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/EntityWriteTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/EntityWriteTest.java
index 65ce246..0024fb8 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/EntityWriteTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/EntityWriteTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/HttpConnectionTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/HttpConnectionTest.java
index d2af874..44b5dcf 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/HttpConnectionTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/HttpConnectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,8 +40,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.AfterClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Test;
 import static org.glassfish.jersey.jdk.connector.internal.HttpConnection.State.CLOSED;
 import static org.glassfish.jersey.jdk.connector.internal.HttpConnection.State.CONNECTING;
 import static org.glassfish.jersey.jdk.connector.internal.HttpConnection.State.CONNECT_TIMEOUT;
@@ -53,8 +53,8 @@
 import static org.glassfish.jersey.jdk.connector.internal.HttpConnection.State.RECEIVING_HEADER;
 import static org.glassfish.jersey.jdk.connector.internal.HttpConnection.State.RESPONSE_TIMEOUT;
 import static org.glassfish.jersey.jdk.connector.internal.HttpConnection.State.SENDING_REQUEST;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Petr Janouch
@@ -64,7 +64,7 @@
     private static final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
     private static final Throwable testError = new Throwable();
 
-    @AfterClass
+    @AfterAll
     public static void cleanUp() {
         scheduler.shutdownNow();
     }
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/HttpParserTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/HttpParserTest.java
index 3dccc76..f3ed35a 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/HttpParserTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/HttpParserTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,13 +25,13 @@
 import java.util.List;
 import java.util.Map;
 
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-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 org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Petr Janouch
@@ -42,7 +42,7 @@
 
     private HttpParser httpParser;
 
-    @Before
+    @BeforeEach
     public void prepare() {
         httpParser = new HttpParser(1000, 1000);
     }
@@ -350,7 +350,7 @@
     /**
      * This seems to be broken in Grizzly parser
      */
-    @Ignore
+    @Disabled
     @Test
     public void testChunkExtension() throws ParseException, IOException {
         httpParser.reset(true);
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ModifyHeaderInBodyWriterTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ModifyHeaderInBodyWriterTest.java
index f35cba7..6032eef 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ModifyHeaderInBodyWriterTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ModifyHeaderInBodyWriterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -41,8 +41,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/MultiValueHeaderTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/MultiValueHeaderTest.java
index 8934830..b606a90 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/MultiValueHeaderTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/MultiValueHeaderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Adam Lindenthal
@@ -74,10 +74,10 @@
                 .header("tools", "drill")
                 .get();
 
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
 
         final String values = response.getHeaderString("animals");
-        Assert.assertEquals("mole,hedgehog,bat,rabbit", values);
+        Assertions.assertEquals("mole,hedgehog,bat,rabbit", values);
     }
 
 }
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ProxyTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ProxyTest.java
index 266646c..73d0f33 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ProxyTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ProxyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,10 +42,10 @@
 import org.glassfish.grizzly.http.server.Request;
 import org.glassfish.grizzly.http.server.Response;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/PublicSitesTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/PublicSitesTest.java
index 40f0181..03cb5dc 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/PublicSitesTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/PublicSitesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,16 +24,16 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Petr Janouch
  */
-@Ignore
+@Disabled
 public class PublicSitesTest extends JerseyTest {
 
     @Test
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ReadChunkedEntity.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ReadChunkedEntity.java
index 49dc28d..6853c06 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ReadChunkedEntity.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ReadChunkedEntity.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/RedirectTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/RedirectTest.java
index 52722ec..966e1fc 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/RedirectTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/RedirectTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,11 +33,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/SslFilterTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/SslFilterTest.java
index 0a9dc13..7cef70b 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/SslFilterTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/SslFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,11 +39,11 @@
 import javax.net.ssl.SSLSocket;
 
 import org.glassfish.jersey.SslConfigurator;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * @author Petr Janouch
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AsyncTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AsyncTest.java
index 53f98f3..6934a60 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AsyncTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,9 +36,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.hamcrest.Matchers;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Asynchronous connector test.
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AuthFilterTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AuthFilterTest.java
index a3c90f7..e6b8636 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AuthFilterTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AuthFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AuthTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AuthTest.java
index 9008d9b..f74656b 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AuthTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/AuthTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,9 +39,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.eclipse.jetty.client.util.BasicAuthentication;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/CookieTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/CookieTest.java
index d6cb6f1..31b9898 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/CookieTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/CookieTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,11 +37,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/CustomLoggingFilter.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/CustomLoggingFilter.java
index 8ab646b..c2ffba7 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/CustomLoggingFilter.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/CustomLoggingFilter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 import javax.ws.rs.container.ContainerResponseContext;
 import javax.ws.rs.container.ContainerResponseFilter;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Custom logging filter.
@@ -43,28 +43,28 @@
     @Override
     public void filter(ClientRequestContext context) throws IOException {
         System.out.println("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ClientRequestContext context, ClientResponseContext clientResponseContext) throws IOException {
         System.out.println("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         postFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context) throws IOException {
         System.out.println("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context, ContainerResponseContext containerResponseContext) throws IOException {
         System.out.println("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         postFilterCalled++;
     }
 }
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/EntityTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/EntityTest.java
index eaaa126..7a8b3d2 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/EntityTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/EntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,8 +36,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests the Http content negotiation.
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ErrorTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ErrorTest.java
index 3425f63..128807a 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ErrorTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ErrorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,8 +31,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/FollowRedirectsTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/FollowRedirectsTest.java
index b618241..448494c 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/FollowRedirectsTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/FollowRedirectsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,8 +39,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Jetty connector follow redirect tests.
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/GZIPContentEncodingTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/GZIPContentEncodingTest.java
index 9ecb0aa..5769766 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/GZIPContentEncodingTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/GZIPContentEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,8 +36,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/HelloWorldTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/HelloWorldTest.java
index 73743eb..e2e36ac 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/HelloWorldTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,9 +37,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/HttpHeadersTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/HttpHeadersTest.java
index b6e3ec8..73a327f 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/HttpHeadersTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/HttpHeadersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,10 +33,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 
 /**
@@ -96,6 +96,6 @@
     @Test
     public void testUserAgent() {
         String response = target().path("test").request().get(String.class);
-        assertTrue("User-agent header should start with 'Jersey', but was " + response, response.startsWith("Jersey"));
+        assertTrue(response.startsWith("Jersey"), "User-agent header should start with 'Jersey', but was " + response);
     }
 }
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ManagedClientTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ManagedClientTest.java
index 4c26067..9cb3984 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ManagedClientTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ManagedClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,8 +46,8 @@
 import org.glassfish.jersey.server.Uri;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Jersey programmatic managed client test
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/MethodTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/MethodTest.java
index 6ce7a91..2e25101 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/MethodTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/MethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests the Http methods.
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/NoEntityTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/NoEntityTest.java
index 35ca436..8b64d10 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/NoEntityTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/NoEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,7 +31,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/SyncResponseSizeTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/SyncResponseSizeTest.java
index 423cc7e..21816cf 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/SyncResponseSizeTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/SyncResponseSizeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,7 +21,7 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -37,10 +37,10 @@
 import java.util.logging.Logger;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Default synchronous jetty client implementation has a hard response size limit of 2MiB.
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/TimeoutTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/TimeoutTest.java
index 48c5bed..ec79442 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/TimeoutTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/TimeoutTest.java
@@ -16,12 +16,6 @@
 
 package org.glassfish.jersey.jetty.connector;
 
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.util.concurrent.TimeUnit;
@@ -46,7 +40,13 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+
+import org.junit.jupiter.api.Test;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Martin Matula
@@ -200,7 +200,7 @@
         int pauseMillis = 50;
 
         try {
-        target("test")
+            target("test")
                 .property(JettyClientProperties.TOTAL_TIMEOUT, 100L)
                 .property(CommonProperties.OUTBOUND_CONTENT_LENGTH_BUFFER_SERVER, "-1")
                 .path("stream")
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/TraceSupportTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/TraceSupportTest.java
index f2642eb..022667a 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/TraceSupportTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/TraceSupportTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -45,10 +45,10 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * This very basic resource showcases support of a HTTP TRACE method,
@@ -129,9 +129,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsProgrammatic) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // toLowerCase - http header field names are case insensitive
-                    responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                    responseEntity.contains(expectedFragment),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
@@ -143,9 +143,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsAnnotated) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // toLowerCase - http header field names are case insensitive
-                    responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                    responseEntity.contains(expectedFragment),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/UnderlyingHttpClientAccessTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/UnderlyingHttpClientAccessTest.java
index ff64489..e5d9ec6 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/UnderlyingHttpClientAccessTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/UnderlyingHttpClientAccessTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,12 +23,12 @@
 import org.glassfish.jersey.client.ClientConfig;
 
 import org.eclipse.jetty.client.HttpClient;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test of access to the underlying HTTP client instance used by the connector.
@@ -50,12 +50,10 @@
         final WebTarget target = client.target("http://localhost/");
         final HttpClient hcOnTarget = JettyConnectorProvider.getHttpClient(target);
 
-        assertNotNull("HTTP client instance set on JerseyClient should not be null.", hcOnClient);
-        assertNotNull("HTTP client instance set on JerseyWebTarget should not be null.", hcOnTarget);
-        assertSame("HTTP client instance set on JerseyClient should be the same instance as the one set on JerseyWebTarget"
-                        + "(provided the target instance has not been further configured).",
-                hcOnClient, hcOnTarget
-        );
+        assertNotNull(hcOnClient, "HTTP client instance set on JerseyClient should not be null.");
+        assertNotNull(hcOnTarget, "HTTP client instance set on JerseyWebTarget should not be null.");
+        assertSame(hcOnClient, hcOnTarget, "HTTP client instance set on JerseyClient should be the same instance as the one "
+                + "set on JerseyWebTarget (provided the target instance has not been further configured).");
     }
 
     @Test
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/AsyncTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/AsyncTest.java
index 6a9637b..6217b52 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/AsyncTest.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/AsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,9 +35,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.hamcrest.Matchers;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Asynchronous connector test.
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/CustomLoggingFilter.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/CustomLoggingFilter.java
index 44dbc2a..e83ca38 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/CustomLoggingFilter.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/CustomLoggingFilter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,7 +28,7 @@
 import javax.ws.rs.container.ContainerResponseContext;
 import javax.ws.rs.container.ContainerResponseFilter;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Custom logging filter.
@@ -46,28 +46,28 @@
     @Override
     public void filter(ClientRequestContext context) throws IOException {
         LOGGER.info("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ClientRequestContext context, ClientResponseContext clientResponseContext) throws IOException {
         LOGGER.info("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         postFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context) throws IOException {
         LOGGER.info("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context, ContainerResponseContext containerResponseContext) throws IOException {
         LOGGER.info("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         postFilterCalled++;
     }
 }
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/FollowRedirectsTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/FollowRedirectsTest.java
index 2695622..3a52c65 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/FollowRedirectsTest.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/FollowRedirectsTest.java
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey.netty.connector;
 
-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 java.util.logging.Logger;
@@ -37,7 +37,7 @@
 import org.glassfish.jersey.netty.connector.internal.RedirectException;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class FollowRedirectsTest extends JerseyTest {
 
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HelloWorldTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HelloWorldTest.java
index 20caa53..d30c9b9 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HelloWorldTest.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,9 +36,9 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HttpHeadersTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HttpHeadersTest.java
index f5438e5..905e155 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HttpHeadersTest.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HttpHeadersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests the headers.
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HugeEntityTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HugeEntityTest.java
index 44d7f38..f3cfd7e 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HugeEntityTest.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HugeEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,7 +38,7 @@
 import org.glassfish.jersey.client.RequestEntityProcessing;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/MethodTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/MethodTest.java
index f0c639b..d4ec718 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/MethodTest.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/MethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests the Http methods.
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/NoEntityTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/NoEntityTest.java
index 2677c3e..f9670ce 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/NoEntityTest.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/NoEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,7 +29,7 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Paul Sandoz
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/ParallelTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/ParallelTest.java
index e457b31..43ce709 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/ParallelTest.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/ParallelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,10 +36,10 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests the parallel execution of multiple requests.
@@ -119,15 +119,15 @@
 
             startBarrier.await(1, TimeUnit.SECONDS);
 
-            assertTrue("Waiting for clients to finish has timed out.", doneLatch.await(5 * getAsyncTimeoutMultiplier(),
-                                                                                       TimeUnit.SECONDS));
+            assertTrue(doneLatch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS),
+                "Waiting for clients to finish has timed out.");
 
-            assertEquals("Resource counter", PARALLEL_CLIENTS, resourceCounter.get());
+            assertEquals(PARALLEL_CLIENTS, resourceCounter.get(), "Resource counter");
 
-            assertEquals("Received counter", PARALLEL_CLIENTS, receivedCounter.get());
+            assertEquals(PARALLEL_CLIENTS, receivedCounter.get(), "Received counter");
         } finally {
             executor.shutdownNow();
-            Assert.assertTrue("Executor termination", executor.awaitTermination(5, TimeUnit.SECONDS));
+            Assertions.assertTrue(executor.awaitTermination(5, TimeUnit.SECONDS), "Executor termination");
         }
     }
 }
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/TimeoutTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/TimeoutTest.java
index f88e132..26c2884 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/TimeoutTest.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/TimeoutTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,11 +29,11 @@
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Martin Matula
diff --git a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/TraceSupportTest.java b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/TraceSupportTest.java
index 4ce24f5..102307f 100644
--- a/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/TraceSupportTest.java
+++ b/connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/TraceSupportTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,10 +44,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * This very basic resource showcases support of a HTTP TRACE method,
@@ -128,9 +128,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsProgrammatic) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                       // toLowerCase - http header field names are case insensitive
-                       responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                       responseEntity.contains(expectedFragment),
+                       "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
@@ -142,9 +142,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsAnnotated) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                       // toLowerCase - http header field names are case insensitive
-                       responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                       responseEntity.contains(expectedFragment),
+                       "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
diff --git a/connectors/pom.xml b/connectors/pom.xml
index d3a0f47..9e60cb3 100644
--- a/connectors/pom.xml
+++ b/connectors/pom.xml
@@ -60,8 +60,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/containers/jdk-http/pom.xml b/containers/jdk-http/pom.xml
index a2d341d..fc8d735 100644
--- a/containers/jdk-http/pom.xml
+++ b/containers/jdk-http/pom.xml
@@ -39,6 +39,11 @@
             <scope>test</scope>
             <version>${commons.io.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/AbstractJdkHttpServerTester.java b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/AbstractJdkHttpServerTester.java
index 9e1660a..02b4773 100644
--- a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/AbstractJdkHttpServerTester.java
+++ b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/AbstractJdkHttpServerTester.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 import org.glassfish.jersey.internal.util.PropertiesHelper;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
-import org.junit.After;
+import org.junit.jupiter.api.AfterEach;
 
 /**
  * Abstract JDK HTTP Server unit tester.
@@ -103,7 +103,7 @@
         }
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         if (server != null) {
             stopServer();
diff --git a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/BasicJdkHttpServerTest.java b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/BasicJdkHttpServerTest.java
index 67eaab8..32a98e1 100644
--- a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/BasicJdkHttpServerTest.java
+++ b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/BasicJdkHttpServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.internal.util.JdkVersion;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.After;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -72,7 +72,7 @@
         }
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         if (server != null) {
             server.stop(3);
diff --git a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpPackageTest.java b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpPackageTest.java
index ea327c0..6b5100d 100644
--- a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpPackageTest.java
+++ b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpPackageTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Jdk Http Container package scanning test.
diff --git a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpsServerTest.java b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpsServerTest.java
index e814720..02a0dda 100644
--- a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpsServerTest.java
+++ b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpsServerTest.java
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.internal.util.JdkVersion;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.After;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
 
 import com.sun.net.httpserver.HttpServer;
 import com.sun.net.httpserver.HttpsConfigurator;
@@ -45,7 +45,8 @@
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Jdk Https Server tests.
@@ -95,9 +96,10 @@
      * Test, that exception is thrown when attempting to start a {@link HttpsServer} with empty SSLContext.
      * @throws Exception
      */
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testStartHttpServerNoSslContext() throws Exception {
-        server = JdkHttpServerFactory.createHttpServer(httpsUri, rc, null, true);
+        assertThrows(IllegalArgumentException.class,
+            () -> JdkHttpServerFactory.createHttpServer(httpsUri, rc, null, true));
     }
 
     /**
@@ -105,18 +107,20 @@
      * not configured correctly.
      * @throws Exception
      */
-    @Test(expected = SSLHandshakeException.class)
+    @Test
     public void testCreateHttpsServerDefaultSslContext() throws Throwable {
-        server = JdkHttpServerFactory.createHttpServer(httpsUri, rc, SSLContext.getDefault(), true);
-        assertThat(server, instanceOf(HttpsServer.class));
+        assertThrows(SSLHandshakeException.class, () -> {
+            server = JdkHttpServerFactory.createHttpServer(httpsUri, rc, SSLContext.getDefault(), true);
+            assertThat(server, instanceOf(HttpsServer.class));
 
-        // access the https server with not configured client
-        final Client client = ClientBuilder.newBuilder().newClient();
-        try {
-            client.target(httpsUri).path("testHttps").request().get(String.class);
-        } catch (final ProcessingException e) {
-            throw e.getCause();
-        }
+            // access the https server with not configured client
+            final Client client = ClientBuilder.newBuilder().newClient();
+            try {
+                client.target(httpsUri).path("testHttps").request().get(String.class);
+            } catch (final ProcessingException e) {
+                throw e.getCause();
+            }
+        });
     }
 
     /**
@@ -124,30 +128,34 @@
      * on request.
      * @throws Exception
      */
-    @Test(expected = IOException.class)
+    @Test
     public void testHttpsServerNoSslContextDelayedStart() throws Throwable {
-        server = JdkHttpServerFactory.createHttpServer(httpsUri, rc, null, false);
-        assertThat(server, instanceOf(HttpsServer.class));
-        server.start();
+        assertThrows(IOException.class, () -> {
+            server = JdkHttpServerFactory.createHttpServer(httpsUri, rc, null, false);
+            assertThat(server, instanceOf(HttpsServer.class));
+            server.start();
 
-        final Client client = ClientBuilder.newBuilder().newClient();
-        try {
-            client.target(httpsUri).path("testHttps").request().get(String.class);
-        } catch (final ProcessingException e) {
-            throw e.getCause();
-        }
+            final Client client = ClientBuilder.newBuilder().newClient();
+           try {
+                client.target(httpsUri).path("testHttps").request().get(String.class);
+            } catch (final ProcessingException e) {
+                throw e.getCause();
+            }
+        });
     }
 
     /**
      * Test, that {@link HttpsServer} cannot be configured with {@link HttpsConfigurator} after it has started.
      * @throws Exception
      */
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testConfigureSslContextAfterStart() throws Throwable {
-        server = JdkHttpServerFactory.createHttpServer(httpsUri, rc, null, false);
-        assertThat(server, instanceOf(HttpsServer.class));
-        server.start();
-        ((HttpsServer) server).setHttpsConfigurator(new HttpsConfigurator(getServerSslContext()));
+        assertThrows(IllegalStateException.class, () -> {
+            server = JdkHttpServerFactory.createHttpServer(httpsUri, rc, null, false);
+            assertThat(server, instanceOf(HttpsServer.class));
+            server.start();
+            ((HttpsServer) server).setHttpsConfigurator(new HttpsConfigurator(getServerSslContext()));
+        });
     }
 
     /**
@@ -208,7 +216,7 @@
         return sslConfigServer.createSSLContext();
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         if (server != null) {
             server.stop(0);
diff --git a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/LifecycleListenerTest.java b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/LifecycleListenerTest.java
index c2acf8d..61670a3 100644
--- a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/LifecycleListenerTest.java
+++ b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/LifecycleListenerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,11 +26,11 @@
 import org.glassfish.jersey.server.spi.AbstractContainerLifecycleListener;
 import org.glassfish.jersey.server.spi.Container;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Reload and ContainerLifecycleListener support test.
@@ -129,7 +129,7 @@
 
         stopServer();
 
-        assertTrue("ContainerLifecycleListener.onStartup has not been called.", listener.started);
-        assertTrue("ContainerLifecycleListener.onShutdown has not been called.", listener.stopped);
+        assertTrue(listener.started, "ContainerLifecycleListener.onStartup has not been called.");
+        assertTrue(listener.stopped, "ContainerLifecycleListener.onShutdown has not been called.");
     }
 }
diff --git a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/RuntimeDelegateTest.java b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/RuntimeDelegateTest.java
index 26abd46..9b37c35 100644
--- a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/RuntimeDelegateTest.java
+++ b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/RuntimeDelegateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,9 +28,9 @@
 import javax.ws.rs.core.UriBuilder;
 import javax.ws.rs.ext.RuntimeDelegate;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.sun.net.httpserver.HttpHandler;
 import com.sun.net.httpserver.HttpServer;
diff --git a/containers/jersey-servlet-core/src/test/java/org/glassfish/jersey/servlet/internal/ContextPathEncodingTest.java b/containers/jersey-servlet-core/src/test/java/org/glassfish/jersey/servlet/internal/ContextPathEncodingTest.java
index 9ab2e92..c23e4d1 100644
--- a/containers/jersey-servlet-core/src/test/java/org/glassfish/jersey/servlet/internal/ContextPathEncodingTest.java
+++ b/containers/jersey-servlet-core/src/test/java/org/glassfish/jersey/servlet/internal/ContextPathEncodingTest.java
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.internal.util.collection.Value;
 import org.glassfish.jersey.internal.util.collection.Values;
 import org.glassfish.jersey.servlet.ServletContainer;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 import java.lang.reflect.InvocationHandler;
@@ -141,8 +141,8 @@
 
         @Override
         public Value<Integer> service(URI baseUri, URI requestUri, HttpServletRequest request, HttpServletResponse response) {
-            Assert.assertEquals(this.baseUri, baseUri.toASCIIString());
-            Assert.assertEquals(this.requestUri, requestUri.toASCIIString());
+            Assertions.assertEquals(this.baseUri, baseUri.toASCIIString());
+            Assertions.assertEquals(this.requestUri, requestUri.toASCIIString());
             return Values.of(0);
         }
 
diff --git a/containers/jersey-servlet-core/src/test/java/org/glassfish/jersey/servlet/internal/ThreadLocalInvokerTest.java b/containers/jersey-servlet-core/src/test/java/org/glassfish/jersey/servlet/internal/ThreadLocalInvokerTest.java
index b4476fc..b69603d 100644
--- a/containers/jersey-servlet-core/src/test/java/org/glassfish/jersey/servlet/internal/ThreadLocalInvokerTest.java
+++ b/containers/jersey-servlet-core/src/test/java/org/glassfish/jersey/servlet/internal/ThreadLocalInvokerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,9 +18,9 @@
 
 import java.lang.reflect.Proxy;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Michal Gajdos
diff --git a/containers/jetty-http/pom.xml b/containers/jetty-http/pom.xml
index 86ea468..47593ec 100644
--- a/containers/jetty-http/pom.xml
+++ b/containers/jetty-http/pom.xml
@@ -54,6 +54,11 @@
             <artifactId>httpclient</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/AbstractJettyServerTester.java b/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/AbstractJettyServerTester.java
index dcfe4b7..13bfe6a 100644
--- a/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/AbstractJettyServerTester.java
+++ b/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/AbstractJettyServerTester.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,7 +28,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 
 import org.eclipse.jetty.server.Server;
-import org.junit.After;
+import org.junit.jupiter.api.AfterEach;
 
 /**
  * Abstract Jetty Server unit tester.
@@ -105,7 +105,7 @@
         }
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         if (server != null) {
             stopServer();
diff --git a/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/AsyncTest.java b/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/AsyncTest.java
index b4d6b81..da156be 100644
--- a/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/AsyncTest.java
+++ b/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/AsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,12 +31,12 @@
 import javax.ws.rs.container.TimeoutHandler;
 import javax.ws.rs.core.Response;
 
-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 static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Arul Dhesiaseelan (aruld at acm.org)
@@ -121,14 +121,14 @@
 
     private Client client;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         startServer(AsyncResource.class);
         client = ClientBuilder.newClient();
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() {
         super.tearDown();
         client = null;
diff --git a/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/ExceptionTest.java b/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/ExceptionTest.java
index ce299cd..039a7a8 100644
--- a/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/ExceptionTest.java
+++ b/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/ExceptionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,7 +21,7 @@
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.message.BasicHttpRequest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -35,7 +35,7 @@
 import java.io.IOException;
 import java.net.URI;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/LifecycleListenerTest.java b/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/LifecycleListenerTest.java
index 15b299a..12ee763 100644
--- a/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/LifecycleListenerTest.java
+++ b/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/LifecycleListenerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,7 +19,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.spi.AbstractContainerLifecycleListener;
 import org.glassfish.jersey.server.spi.Container;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -29,9 +29,9 @@
 import javax.ws.rs.core.Response;
 
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 
 /**
@@ -127,7 +127,7 @@
 
         stopServer();
 
-        assertTrue("ContainerLifecycleListener.onStartup has not been called.", listener.started);
-        assertTrue("ContainerLifecycleListener.onShutdown has not been called.", listener.stopped);
+        assertTrue(listener.started, "ContainerLifecycleListener.onStartup has not been called.");
+        assertTrue(listener.stopped, "ContainerLifecycleListener.onShutdown has not been called.");
     }
 }
diff --git a/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/OptionsTest.java b/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/OptionsTest.java
index 8866c33..94d0c33 100644
--- a/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/OptionsTest.java
+++ b/containers/jetty-http/src/test/java/org/glassfish/jersey/jetty/OptionsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,7 +16,7 @@
 
 package org.glassfish.jersey.jetty;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -25,8 +25,8 @@
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.core.Response;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class OptionsTest extends AbstractJettyServerTester {
 
diff --git a/containers/pom.xml b/containers/pom.xml
index 00ee924..4438626 100644
--- a/containers/pom.xml
+++ b/containers/pom.xml
@@ -70,8 +70,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/containers/simple-http/pom.xml b/containers/simple-http/pom.xml
index d75aa7a..76c6290 100644
--- a/containers/simple-http/pom.xml
+++ b/containers/simple-http/pom.xml
@@ -49,6 +49,11 @@
             <groupId>org.simpleframework</groupId>
             <artifactId>simple-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/AbstractSimpleServerTester.java b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/AbstractSimpleServerTester.java
index eb653ca..290de52 100644
--- a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/AbstractSimpleServerTester.java
+++ b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/AbstractSimpleServerTester.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.After;
+import org.junit.jupiter.api.AfterEach;
 
 /**
  * Abstract Simple HTTP Server unit tester.
@@ -127,7 +127,7 @@
         }
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         if (server != null) {
             stopServer();
diff --git a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/AsyncTest.java b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/AsyncTest.java
index 9587b04..5ef98f8 100644
--- a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/AsyncTest.java
+++ b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/AsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,12 +31,12 @@
 import javax.ws.rs.container.TimeoutHandler;
 import javax.ws.rs.core.Response;
 
-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 static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Arul Dhesiaseelan (aruld at acm.org)
@@ -123,14 +123,14 @@
 
     private Client client;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         startServer(AsyncResource.class);
         client = ClientBuilder.newClient();
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() {
         super.tearDown();
         client = null;
diff --git a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/ExceptionTest.java b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/ExceptionTest.java
index 15e7b28..8c36c1d 100644
--- a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/ExceptionTest.java
+++ b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/ExceptionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/LifecycleListenerTest.java b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/LifecycleListenerTest.java
index 4c16329..bbab640 100644
--- a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/LifecycleListenerTest.java
+++ b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/LifecycleListenerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,11 +26,11 @@
 import org.glassfish.jersey.server.spi.AbstractContainerLifecycleListener;
 import org.glassfish.jersey.server.spi.Container;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 
 /**
@@ -124,7 +124,7 @@
 
         stopServer();
 
-        assertTrue("ContainerLifecycleListener.onStartup has not been called.", listener.started);
-        assertTrue("ContainerLifecycleListener.onShutdown has not been called.", listener.stopped);
+        assertTrue(listener.started, "ContainerLifecycleListener.onStartup has not been called.");
+        assertTrue(listener.stopped, "ContainerLifecycleListener.onShutdown has not been called.");
     }
 }
diff --git a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/OptionsTest.java b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/OptionsTest.java
index 3b12b1a..b0d2f87 100644
--- a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/OptionsTest.java
+++ b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/OptionsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,13 +23,13 @@
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.core.Response;
 
-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 static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class OptionsTest extends AbstractSimpleServerTester {
 
@@ -57,14 +57,14 @@
 
     private Client client;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         startServer(HelloWorldResource.class, UserResource.class);
         client = ClientBuilder.newClient();
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() {
         super.tearDown();
         client = null;
diff --git a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/ParallelTest.java b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/ParallelTest.java
index e0b6611..1386bc5 100644
--- a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/ParallelTest.java
+++ b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/ParallelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests the parallel execution of multiple requests.
diff --git a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/TraceTest.java b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/TraceTest.java
index 1e2d737..00e980f 100644
--- a/containers/simple-http/src/test/java/org/glassfish/jersey/simple/TraceTest.java
+++ b/containers/simple-http/src/test/java/org/glassfish/jersey/simple/TraceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,13 +23,13 @@
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.core.Response;
 
-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 static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class TraceTest extends AbstractSimpleServerTester {
 
@@ -57,7 +57,7 @@
 
     private Client client;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         startServerNoLoggingFilter(HelloWorldResource.class, UserResource.class); // disable crude
         // LoggingFilter
@@ -66,7 +66,7 @@
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() {
         super.tearDown();
         client = null;
diff --git a/core-client/pom.xml b/core-client/pom.xml
index 196cca9..9769e7e 100644
--- a/core-client/pom.xml
+++ b/core-client/pom.xml
@@ -127,8 +127,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
 
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/AutoDiscoverableClientTest.java b/core-client/src/test/java/org/glassfish/jersey/client/AutoDiscoverableClientTest.java
index d81380a..f0eba7b 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/AutoDiscoverableClientTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/AutoDiscoverableClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,12 +35,11 @@
 import org.glassfish.jersey.CommonProperties;
 import org.glassfish.jersey.internal.spi.AutoDiscoverable;
 import org.glassfish.jersey.internal.util.PropertiesHelper;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Note: Auto-discoverables from this test "affects" all other tests in suit.
@@ -171,7 +170,7 @@
      * {@link javax.ws.rs.core.Feature} will be notified when {@link javax.ws.rs.client.Client#close()} is invoked.
      */
     @Test
-    @Ignore("intermittent failures.")
+    @Disabled("intermittent failures.")
     public void testAutoDiscoverableClosing() {
         final ClientConfig config = new ClientConfig();
         config.property(PROPERTY, true);
@@ -180,12 +179,12 @@
         assertFalse(FooLifecycleListener.isClosed());
 
         client.getConfiguration().getRuntime(); // force runtime init
-        assertTrue("FooLifecycleListener was expected to be already initialized.", FooLifecycleListener.isInitialized());
-        assertFalse("FooLifecycleListener was not expected to be closed yet.", FooLifecycleListener.isClosed());
+        assertTrue(FooLifecycleListener.isInitialized(), "FooLifecycleListener was expected to be already initialized.");
+        assertFalse(FooLifecycleListener.isClosed(), "FooLifecycleListener was not expected to be closed yet.");
 
         client.close();
 
-        assertTrue("FooLifecycleListener should have been closed.", FooLifecycleListener.isClosed());
+        assertTrue(FooLifecycleListener.isClosed(), "FooLifecycleListener should have been closed.");
     }
 
     private void _test(final String response, final Boolean globalDisable, final Boolean clientDisable) throws Exception {
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/ClientConfigTest.java b/core-client/src/test/java/org/glassfish/jersey/client/ClientConfigTest.java
index f813eae..eff6b19 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/ClientConfigTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/ClientConfigTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,18 +29,19 @@
 
 import org.glassfish.jersey.internal.util.collection.UnsafeValue;
 
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-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 org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.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.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;
 
 /**
  * {@link ClientConfig} unit test.
@@ -52,19 +53,19 @@
     public ClientConfigTest() {
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpClass() throws Exception {
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDownClass() throws Exception {
     }
 
-    @Before
+    @BeforeEach
     public void setUp() {
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
     }
 
@@ -180,16 +181,20 @@
         assertTrue(runtimeConfig.isEnabled(emptyFeature));
     }
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Test
     public void testGetProviderClasses() {
-        ClientConfig instance = new ClientConfig();
-        instance.getClasses().add(ClientConfigTest.class);
+        assertThrows(UnsupportedOperationException.class, () -> {
+            ClientConfig instance = new ClientConfig();
+            instance.getClasses().add(ClientConfigTest.class);
+        });
     }
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Test
     public void testGetProviderInstances() {
-        ClientConfig instance = new ClientConfig();
-        instance.getInstances().add(this);
+        assertThrows(UnsupportedOperationException.class, () -> {
+            ClientConfig instance = new ClientConfig();
+            instance.getInstances().add(this);
+        });
     }
 
     @Test
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/ClientRequestTest.java b/core-client/src/test/java/org/glassfish/jersey/client/ClientRequestTest.java
index 9652411..58f689c 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/ClientRequestTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/ClientRequestTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,19 +32,20 @@
 import org.glassfish.jersey.message.MessageBodyWorkers;
 
 import org.hamcrest.core.Is;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 
-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 static org.mockito.Matchers.any;
 import static org.mockito.Matchers.same;
 
@@ -63,12 +64,12 @@
 
     private AutoCloseable mockito;
 
-    @Before
+    @BeforeEach
     public void initMocks() {
         mockito = MockitoAnnotations.openMocks(this);
     }
 
-    @After
+    @AfterEach
     public void closeMocks() throws Exception {
         mockito.close();
     }
@@ -178,7 +179,7 @@
             request.doWriteEntity(workers, entityType);
             fail("An IOException exception should be thrown.");
         } catch (IOException e) {
-            Assert.assertThat("Detected a un-expected exception! \n" + ExceptionUtils.exceptionStackTraceAsString(e),
+            MatcherAssert.assertThat("Detected a un-expected exception! \n" + ExceptionUtils.exceptionStackTraceAsString(e),
                     e, Is.is(ioException));
         }
     }
@@ -193,9 +194,9 @@
 
         try {
             request.doWriteEntity(workers, entityType);
-            Assert.fail("A RuntimeException exception should be thrown.");
+            Assertions.fail("A RuntimeException exception should be thrown.");
         } catch (RuntimeException e) {
-            Assert.assertThat("Detected a un-expected exception! \n" + ExceptionUtils.exceptionStackTraceAsString(e),
+            MatcherAssert.assertThat("Detected a un-expected exception! \n" + ExceptionUtils.exceptionStackTraceAsString(e),
                     e, Is.is(runtimeException));
         }
     }
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/ClientResponseTest.java b/core-client/src/test/java/org/glassfish/jersey/client/ClientResponseTest.java
index 7456edb..41601af 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/ClientResponseTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/ClientResponseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,8 +17,8 @@
 package org.glassfish.jersey.client;
 
 import org.glassfish.jersey.message.internal.InboundMessageContext;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.ClientRequestFilter;
@@ -37,27 +37,27 @@
             }
         };
 
-        Assert.assertFalse(inboundMessageContext.hasEntity());
+        Assertions.assertFalse(inboundMessageContext.hasEntity());
 
         inboundMessageContext.bufferEntity();
-        Assert.assertFalse(inboundMessageContext.hasEntity());
+        Assertions.assertFalse(inboundMessageContext.hasEntity());
     }
 
     @Test
     public void testHasEntity() {
         final ClientRequestFilter abortFilter = requestContext -> requestContext.abortWith(Response.ok("hello").build());
         try (Response r = ClientBuilder.newClient().register(abortFilter).target("http://localhost:8080").request().get()) {
-            Assert.assertTrue(r.hasEntity());
+            Assertions.assertTrue(r.hasEntity());
 
             r.bufferEntity();
-            Assert.assertTrue(r.hasEntity());
+            Assertions.assertTrue(r.hasEntity());
 
             final String s = r.readEntity(String.class);
-            Assert.assertTrue(r.hasEntity());
+            Assertions.assertTrue(r.hasEntity());
 
             final InputStream bufferedEntityStream = r.readEntity(InputStream.class);
-            Assert.assertNotNull(bufferedEntityStream);
-            Assert.assertTrue(r.hasEntity());
+            Assertions.assertNotNull(bufferedEntityStream);
+            Assertions.assertTrue(r.hasEntity());
         }
     }
 }
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/ClientRxTest.java b/core-client/src/test/java/org/glassfish/jersey/client/ClientRxTest.java
index f7792f1..a2ecf08 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/ClientRxTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/ClientRxTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -47,14 +47,13 @@
 import org.glassfish.jersey.spi.ExecutorServiceProvider;
 import org.hamcrest.core.AllOf;
 import org.hamcrest.core.StringContains;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Sanity test for {@link Invocation.Builder#rx()} methods.
@@ -75,16 +74,13 @@
         CLIENT_WITH_EXECUTOR = ClientBuilder.newBuilder().executorService(EXECUTOR_SERVICE).build();
     }
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
-    @After
+    @AfterEach
     public void afterTest() {
         CLIENT.close();
         CLIENT_WITH_EXECUTOR.close();
     }
 
-    @AfterClass
+    @AfterAll
     public static void afterClass() {
         EXECUTOR_SERVICE.shutdownNow();
     }
@@ -96,7 +92,7 @@
 
         String s = target(CLIENT).request().rx(TestRxInvoker.class).get();
 
-        assertTrue("Provided RxInvoker was not used.", s.startsWith("rxTestInvoker"));
+        assertTrue(s.startsWith("rxTestInvoker"), "Provided RxInvoker was not used.");
     }
 
     @Test
@@ -104,8 +100,8 @@
         // implicit register (not saying that the contract is RxInvokerProvider).
         String s = target(CLIENT_WITH_EXECUTOR).register(TestRxInvokerProvider.class).request().rx(TestRxInvoker.class).get();
 
-        assertTrue("Provided RxInvoker was not used.", s.startsWith("rxTestInvoker"));
-        assertTrue("Executor Service was not passed to RxInvoker", s.contains("rxTest-"));
+        assertTrue(s.startsWith("rxTestInvoker"), "Provided RxInvoker was not used.");
+        assertTrue(s.contains("rxTest-"), "Executor Service was not passed to RxInvoker");
     }
 
     @Test
@@ -119,7 +115,7 @@
                 .request().rx().get().toCompletableFuture().get()) {
 
             assertEquals(200, r.getStatus());
-            assertTrue("Executor Service was not passed to RxInvoker", threadName.get().contains("rxTest-"));
+            assertTrue(threadName.get().contains("rxTest-"), "Executor Service was not passed to RxInvoker");
         }
     }
 
@@ -131,8 +127,8 @@
                 .register(TestExecutorServiceProvider.class)
                 .request().rx(TestRxInvoker.class).get();
 
-        assertTrue("Provided RxInvoker was not used.", s.startsWith("rxTestInvoker"));
-        assertTrue("Executor Service was not passed to RxInvoker", s.contains("rxTest-"));
+        assertTrue(s.startsWith("rxTestInvoker"), "Provided RxInvoker was not used.");
+        assertTrue(s.contains("rxTest-"), "Executor Service was not passed to RxInvoker");
     }
 
     @Test
@@ -147,27 +143,33 @@
                 .request().rx().get().toCompletableFuture().get()) {
 
             assertEquals(200, r.getStatus());
-            assertTrue("Executor Service was not passed to RxInvoker", threadName.get().contains("rxTest-"));
+            assertTrue(threadName.get().contains("rxTest-"), "Executor Service was not passed to RxInvoker");
         }
     }
 
     @Test
     public void testRxInvokerInvalid() {
-        Invocation.Builder request = target(CLIENT).request();
-        thrown.expect(IllegalArgumentException.class);
-        thrown.expectMessage(AllOf.allOf(new StringContains("null"), new StringContains("clazz")));
-        request.rx(null).get();
+        IllegalArgumentException exception = Assertions.assertThrows(IllegalArgumentException.class, () -> {
+            Invocation.Builder request = target(CLIENT).request();
+            request.rx(null).get();
+        });
+        String message = exception.getMessage();
+        Assertions.assertTrue(AllOf.allOf(new StringContains("null"), new StringContains("clazz")).matches(message));
     }
 
     @Test
     public void testRxInvokerNotRegistered() {
-        Invocation.Builder request = target(CLIENT).request();
-        thrown.expect(IllegalStateException.class);
-        thrown.expectMessage(AllOf.allOf(
-                new StringContains("TestRxInvoker"),
-                new StringContains("not registered"),
-                new StringContains("RxInvokerProvider")));
-        request.rx(TestRxInvoker.class).get();
+        IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, () -> {
+            Invocation.Builder request = target(CLIENT).request();
+            request.rx(TestRxInvoker.class).get();
+        });
+        String message = exception.getMessage();
+        Assertions.assertTrue(AllOf.allOf(
+                 new StringContains("TestRxInvoker"),
+                 new StringContains("not registered"),
+                 new StringContains("RxInvokerProvider"))
+             .matches(message));
+
     }
 
     @Test
@@ -258,8 +260,8 @@
                 .register(PriorityTestExecutorServiceProvider.class)
                 .request().rx(PriorityTestRxInvoker.class).get();
 
-        assertTrue("Provided RxInvoker was not used.", s.startsWith("PriorityTestRxInvoker"));
-        assertTrue("@ClientAsyncExecutor Executor Service was not passed to RxInvoker", s.contains("TRUE"));
+        assertTrue(s.startsWith("PriorityTestRxInvoker"), "Provided RxInvoker was not used.");
+        assertTrue(s.contains("TRUE"), "@ClientAsyncExecutor Executor Service was not passed to RxInvoker");
     }
 
     @ClientAsyncExecutor
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/CustomConnectorTest.java b/core-client/src/test/java/org/glassfish/jersey/client/CustomConnectorTest.java
index 17b83e7..d02e80a 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/CustomConnectorTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/CustomConnectorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,10 +34,10 @@
 import org.glassfish.jersey.client.spi.Connector;
 import org.glassfish.jersey.client.spi.ConnectorProvider;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/DefaultSslContextProviderTest.java b/core-client/src/test/java/org/glassfish/jersey/client/DefaultSslContextProviderTest.java
index d0ef2bd..973637b 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/DefaultSslContextProviderTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/DefaultSslContextProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,10 +26,10 @@
 import org.glassfish.jersey.internal.util.collection.UnsafeValue;
 import org.glassfish.jersey.internal.util.collection.Values;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/FixedBoundaryParserTest.java b/core-client/src/test/java/org/glassfish/jersey/client/FixedBoundaryParserTest.java
index 16b956f..326a3f4 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/FixedBoundaryParserTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/FixedBoundaryParserTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,9 +20,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Tests several parsing use-cases of ChunkedInput
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/FixedMultiBoundaryParserTest.java b/core-client/src/test/java/org/glassfish/jersey/client/FixedMultiBoundaryParserTest.java
index 936d6a4..1c8f0b4 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/FixedMultiBoundaryParserTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/FixedMultiBoundaryParserTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,9 +20,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Tests several parsing use-cases of ChunkedInput
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/HttpUrlConnectorTest.java b/core-client/src/test/java/org/glassfish/jersey/client/HttpUrlConnectorTest.java
index 5bb7a78..394b087 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/HttpUrlConnectorTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/HttpUrlConnectorTest.java
@@ -46,10 +46,10 @@
 
 import org.glassfish.jersey.client.internal.HttpUrlConnector;
 
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Various tests for the default client connector.
@@ -69,7 +69,7 @@
      * TODO: fix and re-enable the test, it could give java.net.NoRouteToHostException in certain environments instead of timeout exception
      */
     @Test
-    @Ignore
+    @Disabled
     public void testConnectionTimeoutWithEntity() {
         _testInvocationTimeout(createNonRoutableTarget().request().buildPost(Entity.text("does not matter")));
     }
@@ -79,7 +79,7 @@
      * TODO: see above, rewrite server part, the "non-routable" target solution is fragile
      */
     @Test
-    @Ignore
+    @Disabled
     public void testConnectionTimeoutNoEntity() {
         _testInvocationTimeout(createNonRoutableTarget().request().buildGet());
     }
@@ -408,21 +408,19 @@
         try {
             invocation.invoke();
 
-            Assert.fail("Timeout expected!");
+            Assertions.fail("Timeout expected!");
 
         } catch (Exception ex) {
 
-            Assert.assertTrue(String.format("Bad exception, %s, caught! Timeout expected.", ex.getCause()),
-                    ex.getCause() instanceof SocketTimeoutException);
+            Assertions.assertTrue(ex.getCause() instanceof SocketTimeoutException,
+                    String.format("Bad exception, %s, caught! Timeout expected.", ex.getCause()));
 
             final long stop = System.currentTimeMillis();
             long time = stop - start;
 
-            Assert.assertTrue(
-               String.format(
-                    "Actual time, %d ms, should not be more than twice as longer as the original timeout, %d ms",
-                                 time,                                                              TimeoutBASE),
-               time < 2 * TimeoutBASE);
+            Assertions.assertTrue(time < 2 * TimeoutBASE,
+                    String.format("Actual time, %d ms, should not be more than twice as longer as the original timeout, %d ms",
+                        time, TimeoutBASE));
         }
     }
 
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/JaxRsFeatureRegistrationClientTest.java b/core-client/src/test/java/org/glassfish/jersey/client/JaxRsFeatureRegistrationClientTest.java
index 8bfb921..740e6c5 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/JaxRsFeatureRegistrationClientTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/JaxRsFeatureRegistrationClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,7 +17,7 @@
 package org.glassfish.jersey.client;
 
 import org.glassfish.jersey.CommonProperties;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
@@ -27,8 +27,8 @@
 import javax.ws.rs.core.FeatureContext;
 import javax.ws.rs.core.Response;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 public class JaxRsFeatureRegistrationClientTest {
 
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/JerseyClientBuilderTest.java b/core-client/src/test/java/org/glassfish/jersey/client/JerseyClientBuilderTest.java
index bb4a680..ff6fee9 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/JerseyClientBuilderTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/JerseyClientBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,10 +16,9 @@
 
 package org.glassfish.jersey.client;
 
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.annotation.Priority;
 import javax.net.ssl.SSLContext;
@@ -40,11 +39,12 @@
 import java.util.concurrent.TimeUnit;
 
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.hamcrest.MatcherAssert.assertThat;
+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.fail;
 
 /**
  * {@link JerseyClient} unit test.
@@ -54,12 +54,9 @@
  */
 public class JerseyClientBuilderTest {
 
-    @Rule
-    public final ExpectedException exception = ExpectedException.none();
-
     private JerseyClientBuilder builder;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         builder = new JerseyClientBuilder();
     }
@@ -128,10 +125,10 @@
         Client client;
 
         client = new JerseyClientBuilder().keyStore(ks, "qwerty").sslContext(ctx).build();
-        assertSame("SSL context not the same as set in the client builder.", ctx, client.getSslContext());
+        assertSame(ctx, client.getSslContext(), "SSL context not the same as set in the client builder.");
 
         client = new JerseyClientBuilder().sslContext(ctx).trustStore(ks).build();
-        assertNotSame("SSL context not overridden in the client builder.", ctx, client.getSslContext());
+        assertNotSame(ctx, client.getSslContext(), "SSL context not overridden in the client builder.");
     }
 
     @Priority(2)
@@ -234,7 +231,7 @@
         assertNull(contracts);
     }
 
-    @Test(expected = Test.None.class) //no exception shall be thrown
+    @Test
     public void testRegisterIrrelevantImmutableContractsMap() {
         final ClientBuilder clientBuilder = ClientBuilder.newBuilder();
         final Map<Class<?>, Integer> contracts = new HashMap<>();
@@ -251,17 +248,19 @@
 
     @Test
     public void testNegativeConnectTimeout() {
-        ClientBuilder clientBuilder = ClientBuilder.newBuilder();
+        Assertions.assertThrows(IllegalArgumentException.class, () -> {
+            ClientBuilder clientBuilder = ClientBuilder.newBuilder();
 
-        exception.expect(IllegalArgumentException.class);
-        clientBuilder.connectTimeout(-1, TimeUnit.SECONDS);
+            clientBuilder.connectTimeout(-1, TimeUnit.SECONDS);
+        });
     }
 
     @Test
     public void testNegativeReadTimeout() {
-        ClientBuilder clientBuilder = ClientBuilder.newBuilder();
+        Assertions.assertThrows(IllegalArgumentException.class, () -> {
+            ClientBuilder clientBuilder = ClientBuilder.newBuilder();
 
-        exception.expect(IllegalArgumentException.class);
-        clientBuilder.readTimeout(-1, TimeUnit.SECONDS);
+            clientBuilder.readTimeout(-1, TimeUnit.SECONDS);
+        });
     }
 }
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/JerseyClientTest.java b/core-client/src/test/java/org/glassfish/jersey/client/JerseyClientTest.java
index 8a851f6..41d9efb 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/JerseyClientTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/JerseyClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,14 +42,15 @@
 import org.glassfish.jersey.internal.Version;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-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 org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.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.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * {@link JerseyClient} unit test.
@@ -63,12 +64,12 @@
     public JerseyClientTest() {
     }
 
-    @Before
+    @BeforeEach
     public void setUp() {
         this.client = (JerseyClient) ClientBuilder.newClient();
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
     }
 
@@ -114,9 +115,9 @@
         assertEquals(client.getConfiguration(), target.getConfiguration());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testTargetIAE() {
-        final UriBuilder uriBuilder = UriBuilder.fromUri(":xxx:8080//yyy:90090//jaxrs ");
+        assertThrows(IllegalArgumentException.class, () -> UriBuilder.fromUri(":xxx:8080//yyy:90090//jaxrs "));
     }
 
     public static class TestProvider implements ReaderInterceptor {
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/JerseyCompletionStageRxInvokerTest.java b/core-client/src/test/java/org/glassfish/jersey/client/JerseyCompletionStageRxInvokerTest.java
index cf3ba57..50879fc 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/JerseyCompletionStageRxInvokerTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/JerseyCompletionStageRxInvokerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,10 +31,11 @@
 import org.glassfish.jersey.process.JerseyProcessingUncaughtExceptionHandler;
 
 import org.hamcrest.Matcher;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.not;
@@ -48,7 +49,7 @@
     private Client client;
     private ExecutorService executor;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         client = ClientBuilder.newClient().register(TerminalClientRequestFilter.class);
         executor = new ScheduledThreadPoolExecutor(1, new ThreadFactoryBuilder()
@@ -57,7 +58,7 @@
                 .build());
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         executor.shutdown();
         client.close();
@@ -70,7 +71,7 @@
     }
 
     @Test
-    @Ignore("TODO JAX-RS 2.1")
+    @Disabled("TODO JAX-RS 2.1")
     public void testNewClientExecutor() throws Exception {
         testClient(ClientBuilder.newBuilder()
                                 .executorService(executor)
@@ -88,41 +89,45 @@
         testInvoker(invoker, 404, false);
     }
 
-    @Test(expected = NotFoundException.class)
+    @Test
     public void testNotFoundReadEntityViaClass() throws Throwable {
-        try {
-            client.target("http://jersey.java.net")
-                  .request()
-                  .header("Response-Status", 404)
-                  .rx()
-                  .get(String.class)
-                  .toCompletableFuture()
-                  .get();
-        } catch (final Exception expected) {
-            // java.util.concurrent.ExecutionException
-            throw expected
-                    // javax.ws.rs.NotFoundException
-                    .getCause();
-        }
+        Assertions.assertThrows(NotFoundException.class, () -> {
+            try {
+                client.target("http://jersey.java.net")
+                      .request()
+                      .header("Response-Status", 404)
+                      .rx()
+                      .get(String.class)
+                      .toCompletableFuture()
+                      .get();
+            } catch (final Exception expected) {
+                // java.util.concurrent.ExecutionException
+                throw expected
+                        // javax.ws.rs.NotFoundException
+                        .getCause();
+            }
+        });
     }
 
-    @Test(expected = NotFoundException.class)
+    @Test
     public void testNotFoundReadEntityViaGenericType() throws Throwable {
-        try {
-            client.target("http://jersey.java.net")
-                  .request()
-                  .header("Response-Status", 404)
-                  .rx()
-                  .get(new GenericType<String>() {
-                  })
-                  .toCompletableFuture()
-                  .get();
-        } catch (final Exception expected) {
-            // java.util.concurrent.ExecutionException
-            throw expected
-                    // javax.ws.rs.NotFoundException
-                    .getCause();
-        }
+        Assertions.assertThrows(NotFoundException.class, () ->{
+            try {
+                client.target("http://jersey.java.net")
+                      .request()
+                      .header("Response-Status", 404)
+                      .rx()
+                      .get(new GenericType<String>() {
+                      })
+                      .toCompletableFuture()
+                      .get();
+            } catch (final Exception expected) {
+                // java.util.concurrent.ExecutionException
+                throw expected
+                        // javax.ws.rs.NotFoundException
+                        .getCause();
+            }
+        });
     }
 
     @Test
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/JerseyInvocationTest.java b/core-client/src/test/java/org/glassfish/jersey/client/JerseyInvocationTest.java
index dc021a3..99e5a2a 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/JerseyInvocationTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/JerseyInvocationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,14 +43,14 @@
 import javax.ws.rs.core.Response;
 
 import org.hamcrest.CoreMatchers;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.anyOf;
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Martin Matula
@@ -271,10 +271,10 @@
                 fail("future.get() should have failed.");
             } catch (final ExecutionException e) {
                 final Throwable pe = e.getCause();
-                assertTrue("Execution exception cause is not a ProcessingException: " + pe.toString(),
-                        pe instanceof ProcessingException);
+                assertTrue(pe instanceof ProcessingException,
+                        "Execution exception cause is not a ProcessingException: " + pe.toString());
                 final Throwable ioe = pe.getCause();
-                assertTrue("Execution exception cause is not an IOException: " + ioe.toString(), ioe instanceof IOException);
+                assertTrue(ioe instanceof IOException, "Execution exception cause is not an IOException: " + ioe.toString());
             } catch (final InterruptedException e) {
                 throw new RuntimeException(e);
             }
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/JerseyWebTargetTest.java b/core-client/src/test/java/org/glassfish/jersey/client/JerseyWebTargetTest.java
index e3be2f9..072e70e 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/JerseyWebTargetTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/JerseyWebTargetTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,11 +33,12 @@
 
 import org.glassfish.jersey.uri.internal.JerseyUriBuilder;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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.fail;
 
 /**
  * {@code JerseyWebTarget} implementation unit tests.
@@ -48,7 +49,7 @@
     private JerseyClient client;
     private JerseyWebTarget target;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         this.client = (JerseyClient) ClientBuilder.newClient();
         this.target = client.target("/");
@@ -377,46 +378,58 @@
         assertEquals("/path1;matrix11=segment11/path2/path3;matrix30=segment30/path4", uri.toString());
     }
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testQueryParamNull() {
-        WebTarget wt = target;
+        assertThrows(NullPointerException.class, () -> {
+            WebTarget wt = target;
 
-        wt.queryParam(null);
+            wt.queryParam(null);
+        });
     }
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testPathNull() {
-        WebTarget wt = target;
+        assertThrows(NullPointerException.class, () -> {
+            WebTarget wt = target;
 
-        wt.path(null);
+            wt.path(null);
+        });
     }
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testResolveTemplateNull1() {
-        WebTarget wt = target;
+        assertThrows(NullPointerException.class, () -> {
+            WebTarget wt = target;
 
-        wt.resolveTemplate(null, "", true);
+            wt.resolveTemplate(null, "", true);
+        });
     }
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testResolveTemplateNull2() {
-        WebTarget wt = target;
+        assertThrows(NullPointerException.class, () -> {
+            WebTarget wt = target;
 
-        wt.resolveTemplate("name", null, true);
+            wt.resolveTemplate("name", null, true);
+        });
     }
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testResolveTemplateFromEncodedNull1() {
-        WebTarget wt = target;
+        assertThrows(NullPointerException.class, () -> {
+            WebTarget wt = target;
 
-        wt.resolveTemplateFromEncoded(null, "");
+            wt.resolveTemplateFromEncoded(null, "");
+        });
     }
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testResolveTemplateFromEncodedNull2() {
-        WebTarget wt = target;
+        assertThrows(NullPointerException.class, () -> {
+            WebTarget wt = target;
 
-        wt.resolveTemplateFromEncoded("name", null);
+            wt.resolveTemplateFromEncoded("name", null);
+        });
     }
 
     @Test
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/LinkTest.java b/core-client/src/test/java/org/glassfish/jersey/client/LinkTest.java
index f7b6027..278abfe 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/LinkTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/LinkTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,10 +20,10 @@
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.core.Link;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * LinkTest class.
@@ -37,7 +37,7 @@
     public LinkTest() {
     }
 
-    @Before
+    @BeforeEach
     public void setUp() {
         this.client = (JerseyClient) ClientBuilder.newClient();
     }
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/ShutdownHookLeakTest.java b/core-client/src/test/java/org/glassfish/jersey/client/ShutdownHookLeakTest.java
index ff88ab8..7ddd82c 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/ShutdownHookLeakTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/ShutdownHookLeakTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,10 +24,10 @@
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.number.OrderingComparison.lessThan;
-import static org.junit.Assert.assertThat;
 
 /**
  * Reproducer for JERSEY-2786.
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/WebTargetPropertiesTest.java b/core-client/src/test/java/org/glassfish/jersey/client/WebTargetPropertiesTest.java
index 2fb4850..0776f93 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/WebTargetPropertiesTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/WebTargetPropertiesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,9 +20,9 @@
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author pavel.bucek@oracle.com
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/authentication/HttpDigestAuthFilterTest.java b/core-client/src/test/java/org/glassfish/jersey/client/authentication/HttpDigestAuthFilterTest.java
index 284e87c..b7a80b6 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/authentication/HttpDigestAuthFilterTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/authentication/HttpDigestAuthFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import org.glassfish.jersey.client.authentication.DigestAuthenticator.DigestScheme;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Raphael Jolivet (raphael.jolivet at gmail.com)
@@ -42,7 +42,7 @@
                         "basic toto=\"tutu\""
                 }));
 
-        Assert.assertNull(ds);
+        Assertions.assertNull(ds);
     }
 
     @Test
@@ -55,9 +55,9 @@
                         "Digest realm=\"tata\"",
                         "basic  toto=\"tutu\""
                 }));
-        Assert.assertNotNull(ds);
+        Assertions.assertNotNull(ds);
 
-        Assert.assertEquals("tata", ds.getRealm());
+        Assertions.assertEquals("tata", ds.getRealm());
     }
 
     @Test
@@ -70,9 +70,9 @@
                         "digest realm=\"tata\",nonce=\"foo, bar\""
                 }));
 
-        Assert.assertNotNull(ds);
-        Assert.assertEquals("tata", ds.getRealm());
-        Assert.assertEquals("foo, bar", ds.getNonce());
+        Assertions.assertNotNull(ds);
+        Assertions.assertEquals("tata", ds.getRealm());
+        Assertions.assertEquals("foo, bar", ds.getNonce());
     }
 
     @Test
@@ -85,10 +85,10 @@
                         "    digest realm =   \"tata\"  ,  opaque=\"bar\" ,nonce=\"foo, bar\""
                 }));
 
-        Assert.assertNotNull(ds);
-        Assert.assertEquals("tata", ds.getRealm());
-        Assert.assertEquals("foo, bar", ds.getNonce());
-        Assert.assertEquals("bar", ds.getOpaque());
+        Assertions.assertNotNull(ds);
+        Assertions.assertEquals("tata", ds.getRealm());
+        Assertions.assertEquals("foo, bar", ds.getNonce());
+        Assertions.assertEquals("bar", ds.getOpaque());
     }
 
     @Test
@@ -101,10 +101,10 @@
                         "    digest realm =   \"tata\"  ,  opaque =bar ,nonce=\"foo, bar\",   algorithm=md5"
                 }));
 
-        Assert.assertNotNull(ds);
-        Assert.assertEquals("tata", ds.getRealm());
-        Assert.assertEquals("foo, bar", ds.getNonce());
-        Assert.assertEquals("bar", ds.getOpaque());
-        Assert.assertEquals("MD5", ds.getAlgorithm().name());
+        Assertions.assertNotNull(ds);
+        Assertions.assertEquals("tata", ds.getRealm());
+        Assertions.assertEquals("foo, bar", ds.getNonce());
+        Assertions.assertEquals("bar", ds.getOpaque());
+        Assertions.assertEquals("MD5", ds.getAlgorithm().name());
     }
 }
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/filter/ClientProviderInstanceInjectionTest.java b/core-client/src/test/java/org/glassfish/jersey/client/filter/ClientProviderInstanceInjectionTest.java
index 8ec83fa..6cb65a7 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/filter/ClientProviderInstanceInjectionTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/filter/ClientProviderInstanceInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,8 +31,8 @@
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 import org.glassfish.jersey.internal.inject.InjectionManager;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests injections into provider instances.
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/filter/CsrfProtectionFilterTest.java b/core-client/src/test/java/org/glassfish/jersey/client/filter/CsrfProtectionFilterTest.java
index a69df03..702c971 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/filter/CsrfProtectionFilterTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/filter/CsrfProtectionFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,10 +34,10 @@
 import org.glassfish.jersey.client.spi.Connector;
 import org.glassfish.jersey.client.spi.ConnectorProvider;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Cross-site request forgery client filter test.
@@ -47,7 +47,7 @@
 public class CsrfProtectionFilterTest {
     private Invocation.Builder invBuilder;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         Client client = ClientBuilder.newClient(new ClientConfig(CsrfProtectionFilter.class)
                 .connectorProvider(new TestConnector()));
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/filter/EncodingFilterTest.java b/core-client/src/test/java/org/glassfish/jersey/client/filter/EncodingFilterTest.java
index 4d1fe39..a48671f 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/filter/EncodingFilterTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/filter/EncodingFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,12 +42,11 @@
 import org.glassfish.jersey.message.DeflateEncoder;
 import org.glassfish.jersey.message.GZipEncoder;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Client-side content encoding filter unit tests.
@@ -148,7 +147,7 @@
             response.readEntity(String.class);
             fail("Exception caused by invalid gzip stream expected.");
         } catch (ProcessingException ex) {
-            assertTrue("Response input stream not closed when exception is thrown.", responseStream.isClosed);
+            assertTrue(responseStream.isClosed, "Response input stream not closed when exception is thrown.");
         }
     }
 
@@ -177,7 +176,7 @@
             client.target(UriBuilder.fromUri("/").build()).request().get(String.class);
             fail("Exception caused by invalid gzip stream expected.");
         } catch (ProcessingException ex) {
-            assertTrue("Response input stream not closed when exception is thrown.", responseStream.isClosed);
+            assertTrue(responseStream.isClosed, "Response input stream not closed when exception is thrown.");
         }
     }
 
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/filter/HttpBasicAuthFilterTest.java b/core-client/src/test/java/org/glassfish/jersey/client/filter/HttpBasicAuthFilterTest.java
index e967db0..72f73ae 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/filter/HttpBasicAuthFilterTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/filter/HttpBasicAuthFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,8 +37,8 @@
 import org.glassfish.jersey.client.spi.ConnectorProvider;
 
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * HTTP Basic authentication filter test.
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/spi/CachingConnectorProviderTest.java b/core-client/src/test/java/org/glassfish/jersey/client/spi/CachingConnectorProviderTest.java
index d4f9363..4eec0cd 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/spi/CachingConnectorProviderTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/spi/CachingConnectorProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.client.ClientRequest;
 import org.glassfish.jersey.client.ClientResponse;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Caching connector provider unit tests.
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/spi/ClientBuilderListenerTest.java b/core-client/src/test/java/org/glassfish/jersey/client/spi/ClientBuilderListenerTest.java
index e2776fc..3881176 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/spi/ClientBuilderListenerTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/spi/ClientBuilderListenerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,8 +17,8 @@
 package org.glassfish.jersey.client.spi;
 
 import org.glassfish.jersey.client.ClientConfig;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.annotation.Priority;
 import javax.ws.rs.Priorities;
@@ -55,7 +55,7 @@
     @Test
     public void testClientBuilderListener() {
         Client client = ClientBuilder.newClient();
-        Assert.assertEquals(70, client.getConfiguration().getProperty(PROPERTY_NAME));
+        Assertions.assertEquals(70, client.getConfiguration().getProperty(PROPERTY_NAME));
     }
 
 }
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/spi/InvocationBuilderListenerTest.java b/core-client/src/test/java/org/glassfish/jersey/client/spi/InvocationBuilderListenerTest.java
index ddb6e76..0e5fe44 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/spi/InvocationBuilderListenerTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/spi/InvocationBuilderListenerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,9 +18,10 @@
 
 import org.glassfish.jersey.internal.PropertiesDelegate;
 import org.hamcrest.Matchers;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.annotation.Priority;
 import javax.ws.rs.client.ClientBuilder;
@@ -48,7 +49,7 @@
 
     private WebTarget target;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         target = ClientBuilder.newClient().target("http://localhost:8080").register(AbortRequestFilter.class)
                 .register(new PropertySetterInvocationBuilderListener(a -> a.property(key(ONE), ONE)));
@@ -80,7 +81,7 @@
         String value = "OTHER_VALUE";
         try (Response r = target.property(key(ConfigurationInvocationBuilderListener.OTHER_PROPERTY), value)
                 .register(ConfigurationInvocationBuilderListener.class).request().get()) {
-            Assert.assertTrue(
+            Assertions.assertTrue(
                     r.readEntity(String.class).contains(key(ConfigurationInvocationBuilderListener.OTHER_PROPERTY) + "=" + value)
             );
         }
@@ -95,7 +96,7 @@
     }
 
     private void assertDefault(Response response) {
-        Assert.assertEquals(key(ONE) + "=" + ONE, response.readEntity(String.class));
+        Assertions.assertEquals(key(ONE) + "=" + ONE, response.readEntity(String.class));
     }
 
     private static String key(String keySuffix) {
@@ -161,10 +162,10 @@
         public void onNewBuilder(InvocationBuilderContext context) {
             Date date = new Date();
             RuntimeDelegate.HeaderDelegate localeDelegate = RuntimeDelegate.getInstance().createHeaderDelegate(Locale.class);
-            Assert.assertThat(context.getAccepted(),
+            MatcherAssert.assertThat(context.getAccepted(),
                     Matchers.containsInAnyOrder(MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON_PATCH_JSON));
-            Assert.assertThat(context.getEncodings(), Matchers.contains("GZIP"));
-            Assert.assertThat(context.getAcceptedLanguages(),
+            MatcherAssert.assertThat(context.getEncodings(), Matchers.contains("GZIP"));
+            MatcherAssert.assertThat(context.getAcceptedLanguages(),
                     Matchers.containsInAnyOrder(localeDelegate.toString(Locale.GERMAN),
                             localeDelegate.toString(
                                     new Locale.Builder().setLanguage("sr").setScript("Latn").setRegion("RS").build()
@@ -172,24 +173,24 @@
                     )
             );
 
-            Assert.assertThat(context.getHeader(HttpHeaders.CONTENT_ID), Matchers.contains(PROPERTY_NAME));
+            MatcherAssert.assertThat(context.getHeader(HttpHeaders.CONTENT_ID), Matchers.contains(PROPERTY_NAME));
             context.getHeaders().add(HttpHeaders.DATE, date);
-            Assert.assertThat(context.getHeader(HttpHeaders.DATE), Matchers.notNullValue());
-            Assert.assertThat(context.getHeaders().getFirst(HttpHeaders.DATE), Matchers.is(date));
+            MatcherAssert.assertThat(context.getHeader(HttpHeaders.DATE), Matchers.notNullValue());
+            MatcherAssert.assertThat(context.getHeaders().getFirst(HttpHeaders.DATE), Matchers.is(date));
 
-            Assert.assertNotNull(context.getUri());
-            Assert.assertTrue(context.getUri().toASCIIString().startsWith("http://"));
+            Assertions.assertNotNull(context.getUri());
+            Assertions.assertTrue(context.getUri().toASCIIString().startsWith("http://"));
 
-            Assert.assertThat(context.getPropertyNames(), Matchers.contains(PROPERTY_NAME));
-            Assert.assertThat(context.getProperty(PROPERTY_NAME), Matchers.is(PROPERTY_NAME));
+            MatcherAssert.assertThat(context.getPropertyNames(), Matchers.contains(PROPERTY_NAME));
+            MatcherAssert.assertThat(context.getProperty(PROPERTY_NAME), Matchers.is(PROPERTY_NAME));
             context.removeProperty(PROPERTY_NAME);
-            Assert.assertTrue(context.getPropertyNames().isEmpty());
+            Assertions.assertTrue(context.getPropertyNames().isEmpty());
 
-            Assert.assertThat(context.getCacheControls().get(0).toString(),
+            MatcherAssert.assertThat(context.getCacheControls().get(0).toString(),
                     Matchers.is(CacheControl.valueOf(PROPERTY_NAME).toString())
             );
-            Assert.assertThat(context.getCookies().size(), Matchers.is(1));
-            Assert.assertThat(context.getCookies().get("Cookie"), Matchers.notNullValue());
+            MatcherAssert.assertThat(context.getCookies().size(), Matchers.is(1));
+            MatcherAssert.assertThat(context.getCookies().get("Cookie"), Matchers.notNullValue());
         }
     }
 }
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/spi/PostInvocationInterceptorTest.java b/core-client/src/test/java/org/glassfish/jersey/client/spi/PostInvocationInterceptorTest.java
index b5f3624..f454ce9 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/spi/PostInvocationInterceptorTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/spi/PostInvocationInterceptorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,9 +16,9 @@
 
 package org.glassfish.jersey.client.spi;
 
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.ProcessingException;
 import javax.ws.rs.client.ClientBuilder;
@@ -44,7 +44,7 @@
 
     private AtomicInteger counter;
 
-    @Before
+    @BeforeEach
     public void setup() {
         counter = new AtomicInteger();
     }
@@ -55,10 +55,10 @@
                 .register(new CounterPostInvocationInterceptor((a, b) -> false, (a, b) -> true))
                 .build().target(URL).request();
         try (Response r = builder.get()) {
-            Assert.fail();
+            Assertions.fail();
         } catch (ProcessingException pe) {
-            Assert.assertEquals(1000, counter.get());
-            Assert.assertEquals(ConnectException.class, pe.getCause().getClass());
+            Assertions.assertEquals(1000, counter.get());
+            Assertions.assertEquals(ConnectException.class, pe.getCause().getClass());
         }
     }
 
@@ -74,8 +74,8 @@
                         }))
                 .build().target(URL).request();
         try (Response response = builder.get()) {
-            Assert.assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
-            Assert.assertEquals(1000, counter.get()); // counter.increment would be after ISE
+            Assertions.assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(1000, counter.get()); // counter.increment would be after ISE
         }
     }
 
@@ -91,8 +91,8 @@
                         }))
                 .build().target(URL).request();
         try (Response response = builder.async().get().get()) {
-            Assert.assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
-            Assert.assertEquals(1000, counter.get()); // counter.increment would be after ISE
+            Assertions.assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(1000, counter.get()); // counter.increment would be after ISE
         }
     }
 
@@ -111,8 +111,8 @@
         try (Response response = builder.async()
                 .get(new TestInvocationCallback(a -> a.getStatus() == Response.Status.ACCEPTED.getStatusCode(), a -> false))
                 .get()) {
-            Assert.assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
-            Assert.assertEquals(1000, counter.get()); // counter.increment would be after ISE
+            Assertions.assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(1000, counter.get()); // counter.increment would be after ISE
         }
     }
 
@@ -147,8 +147,8 @@
                         400)
                 .build().target(URL).request();
         try (Response response = builder.get()) {
-            Assert.assertEquals(Response.Status.NO_CONTENT.getStatusCode(), response.getStatus());
-            Assert.assertEquals(2000, counter.get());
+            Assertions.assertEquals(Response.Status.NO_CONTENT.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(2000, counter.get());
         }
     }
 
@@ -170,7 +170,7 @@
                         200)
                 .build().target(URL).request();
         try (Response response = builder.get()) {
-            Assert.fail();
+            Assertions.fail();
         } catch (IllegalStateException pe) {
            // expected
         }
@@ -189,9 +189,9 @@
                         (a, b) -> false))
                 .build().target(URL).request();
         try (Response response = builder.get()) {
-            Assert.assertEquals(Response.Status.CONFLICT.getStatusCode(), response.getStatus());
-            Assert.assertEquals(1, counter.get());
-            Assert.assertEquals("HELLO", response.readEntity(String.class));
+            Assertions.assertEquals(Response.Status.CONFLICT.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(1, counter.get());
+            Assertions.assertEquals("HELLO", response.readEntity(String.class));
         }
     }
 
@@ -216,8 +216,8 @@
                         300)
                 .build().target(URL).request();
         try (Response response = builder.get()) {
-            Assert.assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
-            Assert.assertEquals(2000, counter.get());
+            Assertions.assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(2000, counter.get());
         }
     }
 
@@ -227,11 +227,11 @@
                 .register(new CounterPostInvocationInterceptor((a, b) -> false, (a, b) -> true))
                 .build().target(URL).request();
         try (Response r = builder.async().get(new TestInvocationCallback(a -> false, a -> true)).get()) {
-            Assert.fail();
+            Assertions.fail();
         } catch (ExecutionException ee) {
-            Assert.assertEquals(1000, counter.get());
-            Assert.assertEquals(ProcessingException.class, ee.getCause().getClass());
-            Assert.assertEquals(ConnectException.class, ee.getCause().getCause().getClass());
+            Assertions.assertEquals(1000, counter.get());
+            Assertions.assertEquals(ProcessingException.class, ee.getCause().getClass());
+            Assertions.assertEquals(ConnectException.class, ee.getCause().getCause().getClass());
         }
     }
 
@@ -248,7 +248,7 @@
                         }))
                 .build().target(URL).request();
         try (Response response = builder.get()) {
-            Assert.assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
         }
     }
 
@@ -259,8 +259,8 @@
                 .register(new AbortRequestFilter()).build().target(URL).request();
         for (int i = 1; i != 10; i++) {
             try (Response response = builder.get()) {
-                Assert.assertEquals(200, response.getStatus());
-                Assert.assertEquals(i, counter.get());
+                Assertions.assertEquals(200, response.getStatus());
+                Assertions.assertEquals(i, counter.get());
             }
         }
     }
@@ -276,12 +276,12 @@
 
         @Override
         public void completed(Response response) {
-            Assert.assertTrue(responsePredicate.test(response));
+            Assertions.assertTrue(responsePredicate.test(response));
         }
 
         @Override
         public void failed(Throwable throwable) {
-            Assert.assertTrue(throwablePredicate.test(throwable));
+            Assertions.assertTrue(throwablePredicate.test(throwable));
         }
     }
 
@@ -297,13 +297,13 @@
 
         @Override
         public void afterRequest(ClientRequestContext requestContext, ClientResponseContext responseContext) {
-            Assert.assertTrue(afterRequest.test(requestContext, responseContext));
+            Assertions.assertTrue(afterRequest.test(requestContext, responseContext));
             counter.getAndIncrement();
         }
 
         @Override
         public void onException(ClientRequestContext requestContext, ExceptionContext exceptionContext) {
-            Assert.assertTrue(onException.test(requestContext, exceptionContext));
+            Assertions.assertTrue(onException.test(requestContext, exceptionContext));
             counter.addAndGet(1000);
         }
     }
@@ -317,7 +317,7 @@
 
         @Override
         public void beforeRequest(ClientRequestContext requestContext) {
-            Assert.assertTrue(predicate.test(requestContext));
+            Assertions.assertTrue(predicate.test(requestContext));
             counter.incrementAndGet();
         }
     }
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/spi/PreInvocationInterceptorTest.java b/core-client/src/test/java/org/glassfish/jersey/client/spi/PreInvocationInterceptorTest.java
index 905cb57..a438a58 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/spi/PreInvocationInterceptorTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/spi/PreInvocationInterceptorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,9 +17,9 @@
 package org.glassfish.jersey.client.spi;
 
 import org.glassfish.jersey.spi.ThreadPoolExecutorProvider;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.annotation.Priority;
 import javax.ws.rs.ProcessingException;
@@ -43,7 +43,7 @@
 
     private AtomicInteger counter;
 
-    @Before
+    @BeforeEach
     public void setup() {
         counter = new AtomicInteger();
     }
@@ -55,7 +55,7 @@
                 .register(new CounterRequestFilter(a -> a.get() == 1))
                 .register(AbortRequestFilter.class).build().target(URL).request();
         try (Response response = builder.build("GET").invoke()) {
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         }
     }
 
@@ -66,7 +66,7 @@
                 .register(new CounterRequestFilter(a -> a.get() == 1))
                 .register(AbortRequestFilter.class).build().target(URL).request();
         try (Response response = builder.method("GET")) {
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         }
     }
 
@@ -77,7 +77,7 @@
                 .register(new PropertyRequestFilter(a -> PROPERTY_VALUE.equals(a.getProperty(PROPERTY_NAME))))
                 .register(AbortRequestFilter.class).build().target(URL).request().property(PROPERTY_NAME, PROPERTY_VALUE);
         try (Response response = builder.method("GET")) {
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         }
     }
 
@@ -88,7 +88,7 @@
                 .register(InjectedPreInvocationInterceptor.class)
                 .register(AbortRequestFilter.class).build().target(URL).request();
         try (Response response = builder.method("GET")) {
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         }
     }
 
@@ -101,7 +101,7 @@
                 .register(new PropertyRequestFilter(a -> Thread.currentThread().getName().startsWith(EXECUTOR_THREAD_NAME)))
                 .register(AbortRequestFilter.class).build().target(URL).request();
         try (Response response = builder.async().method("GET").get()) {
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         }
     }
 
@@ -114,7 +114,7 @@
                 .register(new PropertyRequestFilter(a -> Thread.currentThread().getName().startsWith(EXECUTOR_THREAD_NAME)))
                 .register(AbortRequestFilter.class).build().target(URL).request();
         try (Response response = builder.rx().method("GET").toCompletableFuture().get()) {
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         }
     }
 
@@ -129,7 +129,7 @@
                 .register(new PropertyRequestFilter(a -> {throw new IllegalStateException(); }))
                 .register(AbortRequestFilter.class).build().target(URL).request();
         try (Response response = builder.get()) {
-            Assert.assertEquals(Response.Status.NO_CONTENT.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(Response.Status.NO_CONTENT.getStatusCode(), response.getStatus());
         }
     }
 
@@ -154,9 +154,9 @@
                 .register(new PropertyRequestFilter(a -> {throw new IllegalStateException(); }))
                 .register(AbortRequestFilter.class).build().target(URL).request();
         try (Response response = builder.get()) {
-            Assert.fail();
+            Assertions.fail();
         } catch (ProcessingException exception) {
-            Assert.assertEquals(IllegalStateException.class, exception.getCause().getClass());
+            Assertions.assertEquals(IllegalStateException.class, exception.getCause().getClass());
         }
     }
 
@@ -169,7 +169,7 @@
                 .register(new Priority200PreInvocationInterceptor(a -> a.get() < 2){})
                 .register(AbortRequestFilter.class).build().target(URL).request();
         try (Response response = builder.get()) {
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         }
     }
 
@@ -181,10 +181,10 @@
                 .register(new Priority100PreInvocationInterceptor(a -> {throw new RuntimeException("TWO"); }))
                 .register(AbortRequestFilter.class).build().target(URL).request();
         try (Response response = builder.get()) {
-            Assert.fail();
+            Assertions.fail();
         } catch (RuntimeException e) {
-            Assert.assertEquals("ONE", e.getSuppressed()[0].getMessage());
-            Assert.assertEquals("TWO", e.getSuppressed()[1].getMessage());
+            Assertions.assertEquals("ONE", e.getSuppressed()[0].getMessage());
+            Assertions.assertEquals("TWO", e.getSuppressed()[1].getMessage());
         }
     }
 
@@ -195,8 +195,8 @@
                 .register(new AbortRequestFilter()).build().target(URL).request();
         for (int i = 1; i != 10; i++) {
             try (Response response = builder.get()) {
-                Assert.assertEquals(200, response.getStatus());
-                Assert.assertEquals(i, counter.get());
+                Assertions.assertEquals(200, response.getStatus());
+                Assertions.assertEquals(i, counter.get());
             }
         }
     }
@@ -217,7 +217,7 @@
 
         @Override
         public void filter(ClientRequestContext requestContext) throws IOException {
-            Assert.assertTrue(consumer.test(counter));
+            Assertions.assertTrue(consumer.test(counter));
             counter.getAndIncrement();
         }
     }
@@ -231,7 +231,7 @@
 
         @Override
         public void beforeRequest(ClientRequestContext requestContext) {
-            Assert.assertTrue(predicate.test(counter));
+            Assertions.assertTrue(predicate.test(counter));
             counter.getAndIncrement();
         }
     }
@@ -245,7 +245,7 @@
 
         @Override
         public void filter(ClientRequestContext requestContext) throws IOException {
-            Assert.assertTrue(predicate.test(requestContext));
+            Assertions.assertTrue(predicate.test(requestContext));
         }
     }
 
@@ -258,7 +258,7 @@
 
         @Override
         public void beforeRequest(ClientRequestContext requestContext) {
-            Assert.assertTrue(predicate.test(requestContext));
+            Assertions.assertTrue(predicate.test(requestContext));
         }
     }
 
@@ -268,8 +268,8 @@
 
         @Override
         public void beforeRequest(ClientRequestContext requestContext) {
-            Assert.assertNotNull(configuration);
-            Assert.assertEquals(PROPERTY_VALUE, configuration.getProperty(PROPERTY_NAME));
+            Assertions.assertNotNull(configuration);
+            Assertions.assertEquals(PROPERTY_VALUE, configuration.getProperty(PROPERTY_NAME));
         }
     }
 
diff --git a/core-common/pom.xml b/core-common/pom.xml
index 223109f..2f61b3b 100644
--- a/core-common/pom.xml
+++ b/core-common/pom.xml
@@ -172,6 +172,29 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>default-test</id>
+                        <configuration>
+                            <excludes>
+                                <exclude>**/ByteBufferInputStreamTest.java</exclude>
+                            </excludes>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>tests-with-additional-permissions</id>
+                        <phase>test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                        <configuration>
+                            <argLine>-Djava.security.policy=${project.build.directory}/test-classes/surefire-jdk17.policy</argLine>
+                            <includes>
+                                <include>**/ByteBufferInputStreamTest.java</include>
+                            </includes>
+                        </configuration>
+                    </execution>
+                </executions>
                 <configuration>
                     <!-- Execute test classes in parallel - 1 thread per CPU core. -->
                     <parallel>classesAndMethods</parallel>
@@ -206,8 +229,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/core-common/src/test/java/org/glassfish/jersey/SecurityManagerConfiguredTest.java b/core-common/src/test/java/org/glassfish/jersey/SecurityManagerConfiguredTest.java
index cfae326..4c90296 100644
--- a/core-common/src/test/java/org/glassfish/jersey/SecurityManagerConfiguredTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/SecurityManagerConfiguredTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey;
 
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Test that verifies that security manager is setup to run the Jersey core server unit tests.
@@ -30,7 +30,6 @@
      */
     @Test
     public void testSecurityManagerIsConfigured() {
-        assertNotNull("Jersey core server unit tests should run with active security manager",
-                System.getSecurityManager());
+        assertNotNull(System.getSecurityManager(), "Jersey core server unit tests should run with active security manager");
     }
 }
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/TestRuntimeDelegate.java b/core-common/src/test/java/org/glassfish/jersey/internal/TestRuntimeDelegate.java
index 0f025f1..33b9fb3 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/TestRuntimeDelegate.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/TestRuntimeDelegate.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 
 import org.glassfish.jersey.message.internal.MessagingBinders;
 
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
 
 /**
  * Test runtime delegate.
@@ -48,31 +48,31 @@
 
     public void testMediaType() {
         MediaType m = new MediaType("text", "plain");
-        Assert.assertNotNull(m);
+        Assertions.assertNotNull(m);
     }
 
     public void testUriBuilder() {
         UriBuilder ub = RuntimeDelegate.getInstance().createUriBuilder();
-        Assert.assertNotNull(ub);
+        Assertions.assertNotNull(ub);
     }
 
     public void testResponseBuilder() {
         Response.ResponseBuilder rb = RuntimeDelegate.getInstance().createResponseBuilder();
-        Assert.assertNotNull(rb);
+        Assertions.assertNotNull(rb);
     }
 
     public void testVariantListBuilder() {
         Variant.VariantListBuilder vlb = RuntimeDelegate.getInstance().createVariantListBuilder();
-        Assert.assertNotNull(vlb);
+        Assertions.assertNotNull(vlb);
     }
 
     public void testLinkBuilder() {
         final Link.Builder linkBuilder = RuntimeDelegate.getInstance().createLinkBuilder();
-        Assert.assertNotNull(linkBuilder);
+        Assertions.assertNotNull(linkBuilder);
     }
 
     public void testWebApplicationException() {
         WebApplicationException wae = new WebApplicationException();
-        Assert.assertNotNull(wae);
+        Assertions.assertNotNull(wae);
     }
 }
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/config/AdditionalSystemPropertiesTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/config/AdditionalSystemPropertiesTest.java
index 1cc853e..09a8581 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/config/AdditionalSystemPropertiesTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/config/AdditionalSystemPropertiesTest.java
@@ -17,10 +17,10 @@
 package org.glassfish.jersey.internal.config;
 
 import org.glassfish.jersey.CommonProperties;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 import java.util.Collections;
 import java.util.Properties;
@@ -32,14 +32,14 @@
         public static final String SECOND_PROPERTY = "second.property";
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void setUp() {
         System.setProperty(CommonProperties.ALLOW_SYSTEM_PROPERTIES_PROVIDER, Boolean.TRUE.toString());
         System.getProperties().put(AdditionalSystemProperties.FIRST_PROPERTY, "first value");
         System.getProperties().put(AdditionalSystemProperties.SECOND_PROPERTY, "second value");
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         System.clearProperty(CommonProperties.ALLOW_SYSTEM_PROPERTIES_PROVIDER);
         System.clearProperty(AdditionalSystemProperties.FIRST_PROPERTY);
@@ -57,10 +57,10 @@
                 Collections.singletonList(new ExternalConfigurationProviderImpl(testModel))
         );
 
-        Assert.assertFalse(properties.isEmpty());
-        Assert.assertTrue(properties.containsKey(AdditionalSystemProperties.FIRST_PROPERTY));
-        Assert.assertTrue(properties.containsKey(AdditionalSystemProperties.SECOND_PROPERTY));
-        Assert.assertEquals("first value", properties.get(AdditionalSystemProperties.FIRST_PROPERTY));
-        Assert.assertEquals("second value", properties.get(AdditionalSystemProperties.SECOND_PROPERTY));
+        Assertions.assertFalse(properties.isEmpty());
+        Assertions.assertTrue(properties.containsKey(AdditionalSystemProperties.FIRST_PROPERTY));
+        Assertions.assertTrue(properties.containsKey(AdditionalSystemProperties.SECOND_PROPERTY));
+        Assertions.assertEquals("first value", properties.get(AdditionalSystemProperties.FIRST_PROPERTY));
+        Assertions.assertEquals("second value", properties.get(AdditionalSystemProperties.SECOND_PROPERTY));
     }
 }
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/config/DisabledProvidersTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/config/DisabledProvidersTest.java
index cccd36c..57b95d0 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/config/DisabledProvidersTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/config/DisabledProvidersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 import org.glassfish.jersey.message.internal.MessagingBinders;
 import org.glassfish.jersey.message.internal.RenderedImageProvider;
 import org.glassfish.jersey.message.internal.SourceProvider;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.RuntimeType;
 import java.util.HashMap;
@@ -55,11 +55,11 @@
 
         DisabledProvidersChecker checker = new DisabledProvidersChecker(properties, RuntimeType.CLIENT);
         checker.configure();
-        Assert.assertFalse(checker.bindSet.contains(RenderedImageProvider.class));
-        Assert.assertFalse(checker.bindSet.contains(SourceProvider.SourceWriter.class));
-        Assert.assertTrue(checker.bindSet.contains(SourceProvider.StreamSourceReader.class));
-        Assert.assertTrue(checker.bindSet.contains(SourceProvider.SaxSourceReader.class));
-        Assert.assertTrue(checker.bindSet.contains(SourceProvider.DomSourceReader.class));
+        Assertions.assertFalse(checker.bindSet.contains(RenderedImageProvider.class));
+        Assertions.assertFalse(checker.bindSet.contains(SourceProvider.SourceWriter.class));
+        Assertions.assertTrue(checker.bindSet.contains(SourceProvider.StreamSourceReader.class));
+        Assertions.assertTrue(checker.bindSet.contains(SourceProvider.SaxSourceReader.class));
+        Assertions.assertTrue(checker.bindSet.contains(SourceProvider.DomSourceReader.class));
     }
 
     @Test
@@ -69,11 +69,11 @@
 
         DisabledProvidersChecker checker = new DisabledProvidersChecker(properties, RuntimeType.CLIENT);
         checker.configure();
-        Assert.assertFalse(checker.bindSet.contains(RenderedImageProvider.class));
-        Assert.assertFalse(checker.bindSet.contains(SourceProvider.StreamSourceReader.class));
-        Assert.assertFalse(checker.bindSet.contains(SourceProvider.SourceWriter.class));
-        Assert.assertFalse(checker.bindSet.contains(SourceProvider.SaxSourceReader.class));
-        Assert.assertFalse(checker.bindSet.contains(SourceProvider.DomSourceReader.class));
+        Assertions.assertFalse(checker.bindSet.contains(RenderedImageProvider.class));
+        Assertions.assertFalse(checker.bindSet.contains(SourceProvider.StreamSourceReader.class));
+        Assertions.assertFalse(checker.bindSet.contains(SourceProvider.SourceWriter.class));
+        Assertions.assertFalse(checker.bindSet.contains(SourceProvider.SaxSourceReader.class));
+        Assertions.assertFalse(checker.bindSet.contains(SourceProvider.DomSourceReader.class));
     }
 
 
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/config/ExternalPropertiesConfigurationFactoryTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/config/ExternalPropertiesConfigurationFactoryTest.java
index f6e6758..6f1f7b1 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/config/ExternalPropertiesConfigurationFactoryTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/config/ExternalPropertiesConfigurationFactoryTest.java
@@ -17,10 +17,10 @@
 package org.glassfish.jersey.internal.config;
 
 import org.glassfish.jersey.CommonProperties;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -33,7 +33,7 @@
     /**
      * Predefine some properties to be read from config
      */
-    @BeforeClass
+    @BeforeAll
     public static void setUp() {
         System.setProperty(CommonProperties.ALLOW_SYSTEM_PROPERTIES_PROVIDER, Boolean.TRUE.toString());
 
@@ -42,7 +42,7 @@
         System.setProperty("jersey.config.client.readTimeout", "10");
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         System.clearProperty("jersey.config.server.provider.scanning.recursive");
         System.clearProperty(CommonProperties.JSON_PROCESSING_FEATURE_DISABLE);
@@ -53,24 +53,25 @@
     public void readSystemPropertiesTest() {
         final Object result =
                 readExternalPropertiesMap().get("jersey.config.server.provider.scanning.recursive");
-        Assert.assertNull(result);
-        Assert.assertEquals(Boolean.TRUE,
+        Assertions.assertNull(result);
+        Assertions.assertEquals(Boolean.TRUE,
                 getConfig().isProperty(CommonProperties.JSON_PROCESSING_FEATURE_DISABLE));
-        Assert.assertEquals(Boolean.TRUE,
+        Assertions.assertEquals(Boolean.TRUE,
                 getConfig().as(CommonProperties.JSON_PROCESSING_FEATURE_DISABLE, Boolean.class));
-        Assert.assertEquals(Boolean.FALSE,
+        Assertions.assertEquals(Boolean.FALSE,
                 getConfig().as("jersey.config.client.readTimeout", Boolean.class));
-        Assert.assertEquals(Boolean.FALSE,
+        Assertions.assertEquals(Boolean.FALSE,
                 getConfig().isProperty("jersey.config.client.readTimeout"));
-        Assert.assertEquals(1,
+        Assertions.assertEquals(1,
                 getConfig().as(CommonProperties.JSON_PROCESSING_FEATURE_DISABLE, Integer.class));
-        Assert.assertEquals(10,
+        Assertions.assertEquals(10,
                 getConfig().as("jersey.config.client.readTimeout", Integer.class));
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void unsupportedMapperTest() {
-        getConfig().as(CommonProperties.JSON_PROCESSING_FEATURE_DISABLE, Double.class);
+        Assertions.assertThrows(IllegalArgumentException.class,
+                () -> getConfig().as(CommonProperties.JSON_PROCESSING_FEATURE_DISABLE, Double.class));
     }
 
     @Test
@@ -80,8 +81,8 @@
         inputProperties.put("org.jersey.microprofile.config.added", "ADDED");
         getConfig().mergeProperties(inputProperties);
         final Object result = readExternalPropertiesMap().get("jersey.config.server.provider.scanning.recursive");
-        Assert.assertNull(result);
-        Assert.assertNull(readExternalPropertiesMap().get("org.jersey.microprofile.config.added"));
+        Assertions.assertNull(result);
+        Assertions.assertNull(readExternalPropertiesMap().get("org.jersey.microprofile.config.added"));
     }
 
 }
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/inject/ProvidersTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/inject/ProvidersTest.java
index dc15766..2c80b35 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/inject/ProvidersTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/inject/ProvidersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 
 import org.glassfish.jersey.spi.Contract;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests {@link Providers}.
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/routing/CombinedMediaTypeTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/routing/CombinedMediaTypeTest.java
index f4414f5..c0c3112 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/routing/CombinedMediaTypeTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/routing/CombinedMediaTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,10 +24,10 @@
 
 import javax.ws.rs.core.MediaType;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.lessThan;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Combined media type tests.
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/sonar/SonarJerseyCommonTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/sonar/SonarJerseyCommonTest.java
index 06a97ad..3a0557c 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/sonar/SonarJerseyCommonTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/sonar/SonarJerseyCommonTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey.internal.sonar;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Stepan Vavra
@@ -26,6 +26,6 @@
 
     @Test
     public void testUnitTest() {
-        Assert.assertEquals("common unit test", new SonarJerseyCommon().unitTest());
+        Assertions.assertEquals("common unit test", new SonarJerseyCommon().unitTest());
     }
 }
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/Base64Test.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/Base64Test.java
index b083ad9..2878f79 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/Base64Test.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/Base64Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,10 +19,10 @@
 import java.util.Arrays;
 import java.util.Base64;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  *
@@ -64,21 +64,21 @@
     public void testRoundtripLengthMod3Equals0() {
         byte[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8};
         byte[] result = Base64.getDecoder().decode(Base64.getEncoder().encode(data));
-        assertTrue("failed to roundtrip value to base64", Arrays.equals(data, result));
+        assertTrue(Arrays.equals(data, result), "failed to roundtrip value to base64");
     }
 
     @Test
     public void testRoundtripLengthMod3Equals1() {
         byte[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
         byte[] result = Base64.getDecoder().decode(Base64.getEncoder().encode(data));
-        assertTrue("failed to roundtrip value to base64", Arrays.equals(data, result));
+        assertTrue(Arrays.equals(data, result), "failed to roundtrip value to base64");
     }
 
     @Test
     public void testRoundtripLengthMod3Equals2() {
         byte[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
         byte[] result = Base64.getDecoder().decode(Base64.getEncoder().encode(data));
-        assertTrue("failed to roundtrip value to base64", Arrays.equals(data, result));
+        assertTrue(Arrays.equals(data, result), "failed to roundtrip value to base64");
     }
 
     @Test
@@ -125,9 +125,9 @@
                 + "/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==";
         byte[] result = Base64.getDecoder().decode(data.getBytes());
 
-        assertEquals("incorrect length", result.length, 256);
+        assertEquals(256, result.length, "incorrect length");
         for (int i = 0; i < 256; ++i) {
-            assertEquals("incorrect value", result[i], (byte) i);
+            assertEquals((byte) i, result[i], "incorrect value");
         }
     }
 }
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/JdkVersionCompareTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/JdkVersionCompareTest.java
index 423ab0a..47781d5 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/JdkVersionCompareTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/JdkVersionCompareTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,9 +16,9 @@
 
 package org.glassfish.jersey.internal.util;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class JdkVersionCompareTest {
 
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/JdkVersionParseTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/JdkVersionParseTest.java
index b0e8c4d..306a760 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/JdkVersionParseTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/JdkVersionParseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,48 +16,36 @@
 
 package org.glassfish.jersey.internal.util;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
-import java.util.Arrays;
-import java.util.Collection;
+import java.util.stream.Stream;
 
-@RunWith(Parameterized.class)
 public class JdkVersionParseTest {
 
-  @Parameterized.Parameter
-  public String rawVersionString;
-  @Parameterized.Parameter(1)
-  public int expectedMajorVersion;
-  @Parameterized.Parameter(2)
-  public int expectedMinorVersion;
-  @Parameterized.Parameter(3)
-  public int expectedMaintenanceVersion;
-  @Parameterized.Parameter(4)
-  public int expectedUpdateVersion;
-
-  @Parameterized.Parameters
-  public static Collection<Object[]> provideVersions() {
-    return Arrays.asList(new Object[][]{
+  public static Stream<Arguments> provideVersions() {
+    return Stream.of(
         // Java 8
-        {"1.8.0_141-b15", 1, 8, 0, 141},
-        {"1.8.0_141", 1, 8, 0, 141},
+        Arguments.of("1.8.0_141-b15", 1, 8, 0, 141),
+        Arguments.of("1.8.0_141", 1, 8, 0, 141),
 
         // Java 9 and above
-        {"9", 9, 0, 0, 0},
-        {"9.0.3", 9, 0, 3, 0},
-        {"11", 11, 0, 0, 0},
+        Arguments.of("9", 9, 0, 0, 0),
+        Arguments.of("9.0.3", 9, 0, 3, 0),
+        Arguments.of("11", 11, 0, 0, 0),
 
         // malformed version
-        {"invalid version", -1, -1, -1, -1}
-    });
+        Arguments.of("invalid version", -1, -1, -1, -1)
+    );
   }
 
-  @Test
-  public void testParseVersion() {
+  @ParameterizedTest
+  @MethodSource("provideVersions")
+  public void testParseVersion(String rawVersionString, int expectedMajorVersion, int expectedMinorVersion,
+        int expectedMaintenanceVersion, int expectedUpdateVersion) {
     JdkVersion version = JdkVersion.parseVersion(rawVersionString);
 
     assertEquals(expectedMajorVersion, version.getMajor());
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/JerseyPublisherTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/JerseyPublisherTest.java
index 659f904..e951692 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/JerseyPublisherTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/JerseyPublisherTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,11 +27,11 @@
 
 import org.glassfish.jersey.internal.jsr166.Flow;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * Test Jersey {@link Flow.Publisher} implementation, {@link JerseyPublisher}.
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/OsgiRegistryTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/OsgiRegistryTest.java
index fe3de0c..f71f9b4 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/OsgiRegistryTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/OsgiRegistryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,8 +18,8 @@
 
 import org.glassfish.jersey.internal.OsgiRegistry;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Utility class {@ling OsgiRegistry} tests.
@@ -32,136 +32,136 @@
     public void testWebInfClassesBundleEntryPathTranslation() {
         String className = OsgiRegistry
                 .bundleEntryPathToClassName("org/glassfish/jersey", "/WEB-INF/classes/org/glassfish/jersey/Test.class");
-        Assert.assertEquals("org.glassfish.jersey.Test", className);
+        Assertions.assertEquals("org.glassfish.jersey.Test", className);
     }
 
     @Test
     public void testWebInfClassesBundleEntryPathTranslationPackageTrailingSlash() {
         String className = OsgiRegistry
                 .bundleEntryPathToClassName("org/glassfish/jersey/", "/WEB-INF/classes/org/glassfish/jersey/Test.class");
-        Assert.assertEquals("org.glassfish.jersey.Test", className);
+        Assertions.assertEquals("org.glassfish.jersey.Test", className);
     }
 
     @Test
     public void testWebInfClassesBundleEntryPathTranslationPackageLeadingSlash() {
         String className = OsgiRegistry
                 .bundleEntryPathToClassName("/org/glassfish/jersey", "/WEB-INF/classes/org/glassfish/jersey/Test.class");
-        Assert.assertEquals("org.glassfish.jersey.Test", className);
+        Assertions.assertEquals("org.glassfish.jersey.Test", className);
     }
 
     @Test
     public void testWebInfClassesBundleEntryPathTranslationBundleNoLeadingSlash() {
         String className = OsgiRegistry
                 .bundleEntryPathToClassName("/org/glassfish/jersey", "WEB-INF/classes/org/glassfish/jersey/Test.class");
-        Assert.assertEquals("org.glassfish.jersey.Test", className);
+        Assertions.assertEquals("org.glassfish.jersey.Test", className);
     }
 
     @Test
     public void testOsgiInfClassesBundleEntryPathTranslation() {
         String className = OsgiRegistry
                 .bundleEntryPathToClassName("/org/glassfish/jersey", "OSGI-INF/directory/org/glassfish/jersey/Test.class");
-        Assert.assertEquals("org.glassfish.jersey.Test", className);
+        Assertions.assertEquals("org.glassfish.jersey.Test", className);
     }
 
     @Test
     public void testBundleEntryPathTranslation() {
         String className = OsgiRegistry.bundleEntryPathToClassName("/org/glassfish/jersey", "/org/glassfish/jersey/Test.class");
-        Assert.assertEquals("org.glassfish.jersey.Test", className);
+        Assertions.assertEquals("org.glassfish.jersey.Test", className);
     }
 
     @Test
     public void testBundleEntryPathTranslationBundleNoLeadingSlash() {
         String className = OsgiRegistry.bundleEntryPathToClassName("/org/glassfish/jersey", "org/glassfish/jersey/Test.class");
-        Assert.assertEquals("org.glassfish.jersey.Test", className);
+        Assertions.assertEquals("org.glassfish.jersey.Test", className);
     }
 
     @Test
     public void testBundleEntryPathTranslationNotMatching() {
         String className = OsgiRegistry.bundleEntryPathToClassName("/com/oracle", "org/glassfish/jersey/Test.class");
-        Assert.assertEquals("com.oracle.Test", className);
+        Assertions.assertEquals("com.oracle.Test", className);
     }
 
     @Test
     public void testWebInfClassesBundleEntryPathTranslationNotMatching() {
         String className = OsgiRegistry
                 .bundleEntryPathToClassName("/com/oracle/", "/WEB-INF/classes/org/glassfish/jersey/Test.class");
-        Assert.assertEquals("com.oracle.Test", className);
+        Assertions.assertEquals("com.oracle.Test", className);
     }
 
     @Test
     public void testWebInfClassesBundleEntryPathTranslationNotMatching2() {
         String className = OsgiRegistry.bundleEntryPathToClassName("com/oracle", "/org/glassfish/jersey/Test.class");
-        Assert.assertEquals("com.oracle.Test", className);
+        Assertions.assertEquals("com.oracle.Test", className);
     }
 
     @Test
     public void testRootBundleEntryPathTranslation() {
         String className = OsgiRegistry.bundleEntryPathToClassName("/", "/org/glassfish/jersey/Test.class");
-        Assert.assertEquals("org.glassfish.jersey.Test", className);
+        Assertions.assertEquals("org.glassfish.jersey.Test", className);
     }
 
     @Test
     public void testRootBundleEntryPathTranslationNoLeadingSlash() {
         String className = OsgiRegistry.bundleEntryPathToClassName("/", "org/glassfish/jersey/Test.class");
-        Assert.assertEquals("org.glassfish.jersey.Test", className);
+        Assertions.assertEquals("org.glassfish.jersey.Test", className);
     }
 
     @Test
     public void testRootWebInfClassesBundleEntryPathTranslationNoLeadingSlash() {
         String className = OsgiRegistry.bundleEntryPathToClassName("/", "/WEB-INF/classes/org/glassfish/jersey/Test.class");
-        Assert.assertEquals("org.glassfish.jersey.Test", className);
+        Assertions.assertEquals("org.glassfish.jersey.Test", className);
     }
 
     @Test
     public void testDotClassInPackageName() {
         String className = OsgiRegistry.bundleEntryPathToClassName("/", "com/classification/Test");
-        Assert.assertEquals("com.classification.Test", className);
+        Assertions.assertEquals("com.classification.Test", className);
     }
 
     @Test
     public void testRootWebInfClassesBundleEntryPathEsTranslation() {
         String className = OsgiRegistry.bundleEntryPathToClassName("es", "/WEB-INF/classes/es/a/Test.class");
-        Assert.assertEquals("es.a.Test", className);
+        Assertions.assertEquals("es.a.Test", className);
     }
 
     @Test
     public void testIsTopLevelEntry() {
-        Assert.assertTrue(OsgiRegistry.isPackageLevelEntry("a", "/a/Foo.class"));
+        Assertions.assertTrue(OsgiRegistry.isPackageLevelEntry("a", "/a/Foo.class"));
     }
 
     @Test
     public void testIsTopLevelEntrySequenceRepeats() {
-        Assert.assertFalse(OsgiRegistry.isPackageLevelEntry("o", "/a/Foo.class"));
+        Assertions.assertFalse(OsgiRegistry.isPackageLevelEntry("o", "/a/Foo.class"));
     }
 
     @Test
     public void testIsTopLevelEntryNoSlash() {
-        Assert.assertTrue(OsgiRegistry.isPackageLevelEntry("a", "a/Foo.class"));
+        Assertions.assertTrue(OsgiRegistry.isPackageLevelEntry("a", "a/Foo.class"));
     }
 
     @Test
     public void testIsTopLevelEntrySequenceRepeatsNoSlash() {
-        Assert.assertFalse(OsgiRegistry.isPackageLevelEntry("o", "a/Foo.class"));
+        Assertions.assertFalse(OsgiRegistry.isPackageLevelEntry("o", "a/Foo.class"));
     }
 
     @Test
     public void testIsTopLevelEntrySlash() {
-        Assert.assertTrue(OsgiRegistry.isPackageLevelEntry("a/", "/a/Foo.class"));
+        Assertions.assertTrue(OsgiRegistry.isPackageLevelEntry("a/", "/a/Foo.class"));
     }
 
     @Test
     public void testIsTopLevelEntrySequenceRepeatsSlash() {
-        Assert.assertFalse(OsgiRegistry.isPackageLevelEntry("o/", "/a/Foo.class"));
+        Assertions.assertFalse(OsgiRegistry.isPackageLevelEntry("o/", "/a/Foo.class"));
     }
 
     @Test
     public void testIsTopLevelEntryRoot() {
-        Assert.assertTrue(OsgiRegistry.isPackageLevelEntry("/", "/Foo.class"));
+        Assertions.assertTrue(OsgiRegistry.isPackageLevelEntry("/", "/Foo.class"));
     }
 
     @Test
     public void testIsTopLevelEntryRootFalse() {
-        Assert.assertFalse(OsgiRegistry.isPackageLevelEntry("/", "/a/Foo.class"));
+        Assertions.assertFalse(OsgiRegistry.isPackageLevelEntry("/", "/a/Foo.class"));
     }
 
 }
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/PropertiesHelperTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/PropertiesHelperTest.java
index 1b319a8..68f6aac 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/PropertiesHelperTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/PropertiesHelperTest.java
@@ -21,9 +21,9 @@
 
 import javax.ws.rs.RuntimeType;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * @author Miroslav Fuksa
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/ReflectionHelperTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/ReflectionHelperTest.java
index edeef20..8074527 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/ReflectionHelperTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/ReflectionHelperTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,13 +21,14 @@
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
-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.assertThrows;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * {@code ReflectionHelper} unit tests.
@@ -64,29 +65,36 @@
         assertEquals(aClass, arguments[0]);
     }
 
-    @Test(expected = AccessControlException.class)
+    @Test
     public void securityManagerSetContextClassLoader() throws Exception {
-        final ClassLoader loader = ReflectionHelper.class.getClassLoader();
+        assertThrows(AccessControlException.class, () -> {
+            final ClassLoader loader = ReflectionHelper.class.getClassLoader();
 
-        Thread.currentThread().setContextClassLoader(loader);
-        fail("It should not be possible to set context class loader from unprivileged block");
+            Thread.currentThread().setContextClassLoader(loader);
+            fail("It should not be possible to set context class loader from unprivileged block");
+        });
     }
 
-    @Test(expected = AccessControlException.class)
+    @Test
     public void securityManagerSetContextClassLoaderPA() throws Exception {
-        final ClassLoader loader = ReflectionHelper.class.getClassLoader();
+        assertThrows(AccessControlException.class, () -> {
+            final ClassLoader loader = ReflectionHelper.class.getClassLoader();
 
-        ReflectionHelper.setContextClassLoaderPA(loader).run();
-        fail("It should not be possible to set context class loader from unprivileged block even via Jersey ReflectionHelper");
+            ReflectionHelper.setContextClassLoaderPA(loader).run();
+            fail("It should not be possible to set context class loader "
+                + "from unprivileged block even via Jersey ReflectionHelper");
+        });
     }
 
-    @Test(expected = AccessControlException.class)
+    @Test
     public void securityManagerSetContextClassLoaderInDoPrivileged() throws Exception {
-        final ClassLoader loader = ReflectionHelper.class.getClassLoader();
+        assertThrows(AccessControlException.class, () -> {
+            final ClassLoader loader = ReflectionHelper.class.getClassLoader();
 
-        AccessController.doPrivileged(ReflectionHelper.setContextClassLoaderPA(loader));
-        fail("It should not be possible to set context class loader even from privileged block via Jersey ReflectionHelper "
+            AccessController.doPrivileged(ReflectionHelper.setContextClassLoaderPA(loader));
+            fail("It should not be possible to set context class loader even from privileged block via Jersey ReflectionHelper "
                 + "utility");
+        });
     }
 
     public static class FromStringClass {
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/TokenizerTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/TokenizerTest.java
index 02ba36a..d0f51fd 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/TokenizerTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/TokenizerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey.internal.util;
 
-import org.junit.Test;
-import static org.junit.Assert.assertArrayEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 
 /**
  * Tokenizer utility unit test.
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/AbstractKeyComparatorHashMapTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/AbstractKeyComparatorHashMapTest.java
index fa008dd..6faf736 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/AbstractKeyComparatorHashMapTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/AbstractKeyComparatorHashMapTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,9 +16,9 @@
 
 package org.glassfish.jersey.internal.util.collection;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  *
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/ByteBufferInputStreamTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/ByteBufferInputStreamTest.java
index b5fbeba..6890b02 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/ByteBufferInputStreamTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/ByteBufferInputStreamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,13 +27,13 @@
 
 import org.glassfish.jersey.internal.LocalizationMessages;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * {@link ByteBufferInputStream} unit tests.
@@ -200,14 +200,14 @@
                     Thread.yield(); // Give the other thread a chance to run.
                     continue;
                 }
-                assertEquals("At position: " + j, (byte) (i & 0xFF), (byte) (c & 0xFF));
+                assertEquals((byte) (i & 0xFF), (byte) (c & 0xFF), "At position: " + j);
                 if (++j % BUFFER_SIZE == 0) {
                     i++;
                     Thread.yield(); // Give the other thread a chance to run.
                 }
             }
 
-            assertEquals("Number of bytes produced and bytes read does not match.", ROUNDS * BUFFER_SIZE, j);
+            assertEquals(ROUNDS * BUFFER_SIZE, j, "Number of bytes produced and bytes read does not match.");
         } finally {
             executor.shutdownNow();
             bbis.close();
@@ -272,7 +272,7 @@
                     continue;
                 }
                 for (int p = 0; p < c; p++) {
-                    assertEquals("At position: " + j, (byte) (i & 0xFF), (byte) buffer[p]);
+                    assertEquals((byte) (i & 0xFF), (byte) buffer[p], "At position: " + j);
                     if (++j % BUFFER_SIZE == 0) {
                         i++;
                         Thread.yield(); // Give the other thread a chance to run.
@@ -280,7 +280,7 @@
                 }
             }
 
-            assertEquals("Number of bytes produced and bytes read does not match.", ROUNDS * BUFFER_SIZE, j);
+            assertEquals(ROUNDS * BUFFER_SIZE, j, "Number of bytes produced and bytes read does not match.");
         } finally {
             executor.shutdownNow();
             bbis.close();
@@ -338,16 +338,16 @@
             int j = 0;
             int c;
             while ((c = bbis.read()) != -1) {
-                assertNotEquals("Should not read 'nothing' in blocking mode.", Integer.MIN_VALUE, c);
+                assertNotEquals(Integer.MIN_VALUE, c, "Should not read 'nothing' in blocking mode.");
 
-                assertEquals("At position: " + j, (byte) (i & 0xFF), (byte) c);
+                assertEquals((byte) (i & 0xFF), (byte) c, "At position: " + j);
                 if (++j % BUFFER_SIZE == 0) {
                     i++;
                     Thread.yield(); // Give the other thread a chance to run.
                 }
             }
 
-            assertEquals("Number of bytes produced and bytes read does not match.", ROUNDS * BUFFER_SIZE, j);
+            assertEquals(ROUNDS * BUFFER_SIZE, j, "Number of bytes produced and bytes read does not match.");
         } finally {
             executor.shutdownNow();
             bbis.close();
@@ -406,10 +406,10 @@
             int c;
             byte[] buffer = new byte[443];
             while ((c = bbis.read(buffer)) != -1) {
-                assertNotEquals("Should not read 0 bytes in blocking mode.", 0, c);
+                assertNotEquals(0, c, "Should not read 0 bytes in blocking mode.");
 
                 for (int p = 0; p < c; p++) {
-                    assertEquals("At position: " + j, (byte) (i & 0xFF), buffer[p]);
+                    assertEquals((byte) (i & 0xFF), buffer[p], "At position: " + j);
                     if (++j % BUFFER_SIZE == 0) {
                         i++;
                         Thread.yield(); // Give the other thread a chance to run.
@@ -417,7 +417,7 @@
                 }
             }
 
-            assertEquals("Number of bytes produced and bytes read does not match.", ROUNDS * BUFFER_SIZE, j);
+            assertEquals(ROUNDS * BUFFER_SIZE, j, "Number of bytes produced and bytes read does not match.");
         } finally {
             executor.shutdownNow();
             bbis.close();
@@ -446,7 +446,7 @@
         data.flip();
         bbis.put(data);
 
-        assertEquals("Available bytes", BUFFER_SIZE, bbis.available());
+        assertEquals(BUFFER_SIZE, bbis.available(), "Available bytes");
 
         data = ByteBuffer.allocate(BUFFER_SIZE);
         data.clear();
@@ -456,27 +456,27 @@
         data.flip();
         bbis.put(data);
 
-        assertEquals("Available bytes", 2 * BUFFER_SIZE, bbis.available());
+        assertEquals(2 * BUFFER_SIZE, bbis.available(), "Available bytes");
 
         int c = bbis.read();
-        assertEquals("Byte read", 'A', c);
-        assertEquals("Available bytes", 2 * BUFFER_SIZE - 1, bbis.available());
+        assertEquals('A', c, "Byte read");
+        assertEquals(2 * BUFFER_SIZE - 1, bbis.available(), "Available bytes");
 
         byte[] buff = new byte[199];
         int l = bbis.read(buff);
-        assertEquals("Number of bytes read", buff.length, l);
-        assertEquals("Available bytes", 2 * BUFFER_SIZE - 200, bbis.available());
+        assertEquals(buff.length, l, "Number of bytes read");
+        assertEquals(2 * BUFFER_SIZE - 200, bbis.available(), "Available bytes");
 
         buff = new byte[1000];
         l = bbis.read(buff);
-        assertEquals("Number of bytes read", buff.length, l);
-        assertEquals("Available bytes", 2 * BUFFER_SIZE - 1200, bbis.available());
+        assertEquals(buff.length, l, "Number of bytes read");
+        assertEquals(2 * BUFFER_SIZE - 1200, bbis.available(), "Available bytes");
 
         bbis.closeQueue();
 
         l = bbis.read(buff);
-        assertEquals("Number of bytes read", 2 * BUFFER_SIZE - 1200, l);
-        assertEquals("Available bytes", 0, bbis.available());
+        assertEquals(2 * BUFFER_SIZE - 1200, l, "Number of bytes read");
+        assertEquals(0, bbis.available(), "Available bytes");
 
         bbis.close();
     }
@@ -557,8 +557,8 @@
             task.run();
             fail("IOException expected.");
         } catch (IOException ex) {
-            assertNotNull("Custom exception cause", ex.getCause());
-            assertEquals("Custom exception cause message", exMsg, ex.getCause().getMessage());
+            assertNotNull(ex.getCause(), "Custom exception cause");
+            assertEquals(exMsg, ex.getCause().getMessage(), "Custom exception cause message");
         }
 
         if (retryFailOnClosed) {
@@ -566,8 +566,8 @@
                 task.run();
                 fail("IOException expected.");
             } catch (IOException ex) {
-                assertEquals("Closed IOException message", LocalizationMessages.INPUT_STREAM_CLOSED(), ex.getMessage());
-                assertNull("Closed IOException cause", ex.getCause());
+                assertEquals(LocalizationMessages.INPUT_STREAM_CLOSED(), ex.getMessage(), "Closed IOException message");
+                assertNull(ex.getCause(), "Closed IOException cause");
             }
         } else {
             task.run();
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/KeyComparatorHashMapTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/KeyComparatorHashMapTest.java
index 9d71c1d..fcafac5 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/KeyComparatorHashMapTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/KeyComparatorHashMapTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,7 +16,7 @@
 
 package org.glassfish.jersey.internal.util.collection;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  *
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/KeyComparatorLinkedHashMapTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/KeyComparatorLinkedHashMapTest.java
index 48000b0..9e8ec18 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/KeyComparatorLinkedHashMapTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/KeyComparatorLinkedHashMapTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,7 +16,7 @@
 
 package org.glassfish.jersey.internal.util.collection;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Paul Sandoz
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/ViewsTest.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/ViewsTest.java
index 11bb457..c7be09d 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/ViewsTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/collection/ViewsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,10 +24,10 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Pavel Bucek
diff --git a/core-common/src/test/java/org/glassfish/jersey/logging/HasEntityTimeoutTest.java b/core-common/src/test/java/org/glassfish/jersey/logging/HasEntityTimeoutTest.java
index 35459f9..e1886d4 100644
--- a/core-common/src/test/java/org/glassfish/jersey/logging/HasEntityTimeoutTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/logging/HasEntityTimeoutTest.java
@@ -24,7 +24,7 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.UriInfo;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
diff --git a/core-common/src/test/java/org/glassfish/jersey/logging/LoggingInterceptorTest.java b/core-common/src/test/java/org/glassfish/jersey/logging/LoggingInterceptorTest.java
index 9034406..abd4d54 100644
--- a/core-common/src/test/java/org/glassfish/jersey/logging/LoggingInterceptorTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/logging/LoggingInterceptorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,13 +25,13 @@
 import java.util.Arrays;
 import java.util.Random;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.glassfish.jersey.logging.LoggingFeature.Verbosity.HEADERS_ONLY;
 import static org.glassfish.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_ANY;
 import static org.glassfish.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_TEXT;
-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 static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/AbstractEncodingTest.java b/core-common/src/test/java/org/glassfish/jersey/message/AbstractEncodingTest.java
index 11a3a97..161b9b1 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/AbstractEncodingTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/AbstractEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Super class for encoding tests - contains convenient way of defining the test by simply providing the encoding and
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/DeflateEncodingTest.java b/core-common/src/test/java/org/glassfish/jersey/message/DeflateEncodingTest.java
index 3d14861..dfeabe6 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/DeflateEncodingTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/DeflateEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,7 +35,7 @@
 
 import javax.inject.Provider;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Martin Matula
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/GZipEncodingTest.java b/core-common/src/test/java/org/glassfish/jersey/message/GZipEncodingTest.java
index 43d81bc..d453668 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/GZipEncodingTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/GZipEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,7 +22,7 @@
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Martin Matula
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/internal/DateProviderTest.java b/core-common/src/test/java/org/glassfish/jersey/message/internal/DateProviderTest.java
index 9c5a132..052ab28 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/internal/DateProviderTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/internal/DateProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,11 +16,11 @@
 
 package org.glassfish.jersey.message.internal;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.util.Date;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Libor Kramolis
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/internal/FormMultivaluedMapProviderTest.java b/core-common/src/test/java/org/glassfish/jersey/message/internal/FormMultivaluedMapProviderTest.java
index efbfa84..695fd4f 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/internal/FormMultivaluedMapProviderTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/internal/FormMultivaluedMapProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,10 +27,10 @@
 import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.MultivaluedMap;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * {@link FormProvider} unit tests
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/internal/FormProviderTest.java b/core-common/src/test/java/org/glassfish/jersey/message/internal/FormProviderTest.java
index 79c5675..5dcc075 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/internal/FormProviderTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/internal/FormProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,10 +27,10 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * {@link FormProvider} unit tests
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/internal/LanguageTagTest.java b/core-common/src/test/java/org/glassfish/jersey/message/internal/LanguageTagTest.java
index f8be769..bb82964 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/internal/LanguageTagTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/internal/LanguageTagTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,11 +18,12 @@
 
 import java.util.Locale;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalToIgnoringCase;
-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.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests for {@link LanguageTag} class.
@@ -38,9 +39,9 @@
         _test("CZ", "cs");
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testLanguageCountryInvalid() throws Exception {
-        _test("en", "gbgbgbgbgb");
+        assertThrows(IllegalArgumentException.class, () -> _test("en", "gbgbgbgbgb"));
     }
 
     @Test
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/internal/MessageBodyFactoryTest.java b/core-common/src/test/java/org/glassfish/jersey/message/internal/MessageBodyFactoryTest.java
index c6ff32c..5cc89dd 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/internal/MessageBodyFactoryTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/internal/MessageBodyFactoryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,10 +27,10 @@
 
 import org.glassfish.jersey.message.WriterModel;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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 static org.glassfish.jersey.message.internal.MessageBodyFactory.WORKER_BY_TYPE_COMPARATOR;
 
@@ -46,9 +46,9 @@
         for (WriterModel a : list) {
             for (WriterModel b : list) {
                 assertEquals(
-                        "Comparator breaks contract: compare(a, b) != -compare(b, a)",
                         -Integer.signum(WORKER_BY_TYPE_COMPARATOR.compare(a, b)),
-                        Integer.signum(WORKER_BY_TYPE_COMPARATOR.compare(b, a)));
+                        Integer.signum(WORKER_BY_TYPE_COMPARATOR.compare(b, a)),
+                        "Comparator breaks contract: compare(a, b) != -compare(b, a)");
 
                 for (WriterModel c : list) {
                     if (WORKER_BY_TYPE_COMPARATOR.compare(a, b) > 0
@@ -59,9 +59,9 @@
 
                     if (WORKER_BY_TYPE_COMPARATOR.compare(a, b) == 0) {
                         assertEquals(
-                                "Comparator breaks contract: a == b but a < c and b > c or vice versa",
                                 Integer.signum(WORKER_BY_TYPE_COMPARATOR.compare(a, c)),
-                                Integer.signum(WORKER_BY_TYPE_COMPARATOR.compare(b, c)));
+                                Integer.signum(WORKER_BY_TYPE_COMPARATOR.compare(b, c)),
+                                "Comparator breaks contract: a == b but a < c and b > c or vice versa");
                     }
                 }
             }
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/internal/QualityTest.java b/core-common/src/test/java/org/glassfish/jersey/message/internal/QualityTest.java
index 1856c92..3cf9bac 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/internal/QualityTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/internal/QualityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,95 +16,85 @@
 
 package org.glassfish.jersey.message.internal;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+
 import java.text.ParseException;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Locale;
 import java.util.Map;
+import java.util.stream.Stream;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Quality unit tests.
  *
  * @author Marek Potociar
  */
-@RunWith(Parameterized.class)
 public class QualityTest {
 
     private static final Locale ORIGINAL_LOCALE = Locale.getDefault();
 
-    @Parameterized.Parameters(name = "{0}")
-    public static Iterable<Object[]> data() {
-        return Arrays.asList(new Object[][]{{Locale.US}, {Locale.GERMANY}});
-    }
-
-    @Parameterized.Parameter(0)
-    public Locale locale;
-
-    @Before
-    public void setUp() throws Exception {
-        Locale.setDefault(locale);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        Locale.setDefault(ORIGINAL_LOCALE);
+    public static Stream<Arguments> data() {
+        return Stream.of(Arguments.of(Locale.US), Arguments.of(Locale.GERMANY));
     }
 
     /**
      * Test enhancing HTT header parameter map with a quality parameter.
      */
-    @Test
-    public void testEnhanceWithQualityParameter() {
-        Map<String, String> result;
+    @ParameterizedTest
+    @MethodSource("data")
+    public void testEnhanceWithQualityParameter(Locale locale) {
+        try {
+            Locale.setDefault(locale);
+            Map<String, String> result;
 
-        result = Quality.enhanceWithQualityParameter(null, "q", 1000);
-        assertThat(result, equalTo(null));
+            result = Quality.enhanceWithQualityParameter(null, "q", 1000);
+            assertThat(result, equalTo(null));
 
-        result = Quality.enhanceWithQualityParameter(null, "q", 200);
-        assertThat(result, equalTo(asMap("q=0.2")));
+            result = Quality.enhanceWithQualityParameter(null, "q", 200);
+            assertThat(result, equalTo(asMap("q=0.2")));
 
-        result = Quality.enhanceWithQualityParameter(null, "q", 220);
-        assertThat(result, equalTo(asMap("q=0.22")));
+            result = Quality.enhanceWithQualityParameter(null, "q", 220);
+            assertThat(result, equalTo(asMap("q=0.22")));
 
-        result = Quality.enhanceWithQualityParameter(null, "q", 222);
-        assertThat(result, equalTo(asMap("q=0.222")));
+            result = Quality.enhanceWithQualityParameter(null, "q", 222);
+            assertThat(result, equalTo(asMap("q=0.222")));
 
-        Map<String, String> parameters;
+            Map<String, String> parameters;
 
-        parameters = asMap("a=b");
-        result = Quality.enhanceWithQualityParameter(parameters, "q", 1000);
-        assertThat(result, equalTo(parameters));
+            parameters = asMap("a=b");
+            result = Quality.enhanceWithQualityParameter(parameters, "q", 1000);
+            assertThat(result, equalTo(parameters));
 
-        result = Quality.enhanceWithQualityParameter(parameters, "q", 200);
-        assertThat(result, equalTo(asMap("a=b;q=0.2")));
+            result = Quality.enhanceWithQualityParameter(parameters, "q", 200);
+            assertThat(result, equalTo(asMap("a=b;q=0.2")));
 
-        result = Quality.enhanceWithQualityParameter(parameters, "q", 220);
-        assertThat(result, equalTo(asMap("a=b;q=0.22")));
+            result = Quality.enhanceWithQualityParameter(parameters, "q", 220);
+            assertThat(result, equalTo(asMap("a=b;q=0.22")));
 
-        result = Quality.enhanceWithQualityParameter(parameters, "q", 222);
-        assertThat(result, equalTo(asMap("a=b;q=0.222")));
+            result = Quality.enhanceWithQualityParameter(parameters, "q", 222);
+            assertThat(result, equalTo(asMap("a=b;q=0.222")));
 
-        // test quality parameter override
-        parameters = asMap("a=b;q=0.3");
-        result = Quality.enhanceWithQualityParameter(parameters, "q", 1000);
-        assertThat(result, equalTo(asMap("a=b;q=1.0")));
+            // test quality parameter override
+            parameters = asMap("a=b;q=0.3");
+            result = Quality.enhanceWithQualityParameter(parameters, "q", 1000);
+            assertThat(result, equalTo(asMap("a=b;q=1.0")));
 
-        result = Quality.enhanceWithQualityParameter(parameters, "q", 200);
-        assertThat(result, equalTo(asMap("a=b;q=0.2")));
+            result = Quality.enhanceWithQualityParameter(parameters, "q", 200);
+            assertThat(result, equalTo(asMap("a=b;q=0.2")));
 
-        result = Quality.enhanceWithQualityParameter(parameters, "q", 220);
-        assertThat(result, equalTo(asMap("a=b;q=0.22")));
+            result = Quality.enhanceWithQualityParameter(parameters, "q", 220);
+            assertThat(result, equalTo(asMap("a=b;q=0.22")));
 
-        result = Quality.enhanceWithQualityParameter(parameters, "q", 222);
-        assertThat(result, equalTo(asMap("a=b;q=0.222")));
+            result = Quality.enhanceWithQualityParameter(parameters, "q", 222);
+            assertThat(result, equalTo(asMap("a=b;q=0.222")));
+        } finally {
+            Locale.setDefault(ORIGINAL_LOCALE);
+        }
     }
 
     /**
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/internal/ResponseTest.java b/core-common/src/test/java/org/glassfish/jersey/message/internal/ResponseTest.java
index ba7e6bd..d43c4f6 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/internal/ResponseTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/internal/ResponseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,10 +21,10 @@
 import javax.ws.rs.core.Response.Status.Family;
 import javax.ws.rs.core.Response.StatusType;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 /**
  *
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/internal/StringBuilderUtilsTest.java b/core-common/src/test/java/org/glassfish/jersey/message/internal/StringBuilderUtilsTest.java
index 0b1627d..dc9fc02 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/internal/StringBuilderUtilsTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/internal/StringBuilderUtilsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,10 +16,10 @@
 
 package org.glassfish.jersey.message.internal;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
@@ -30,11 +30,11 @@
     public StringBuilderUtilsTest() {
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpClass() throws Exception {
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDownClass() throws Exception {
     }
 
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/internal/UtilsTest.java b/core-common/src/test/java/org/glassfish/jersey/message/internal/UtilsTest.java
index e6baf4c..55976fe 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/internal/UtilsTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/internal/UtilsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey.message.internal;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
@@ -39,7 +39,7 @@
         } finally {
             stream.close();
         }
-        Assert.assertTrue(file.exists());
+        Assertions.assertTrue(file.exists());
     }
 
 }
diff --git a/core-common/src/test/java/org/glassfish/jersey/message/internal/VariantListBuilderTest.java b/core-common/src/test/java/org/glassfish/jersey/message/internal/VariantListBuilderTest.java
index 06032e9..7fb708c 100644
--- a/core-common/src/test/java/org/glassfish/jersey/message/internal/VariantListBuilderTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/message/internal/VariantListBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,9 +22,9 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Variant;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * TODO: javadoc.
diff --git a/core-common/src/test/java/org/glassfish/jersey/process/internal/RankedComparatorTest.java b/core-common/src/test/java/org/glassfish/jersey/process/internal/RankedComparatorTest.java
index 53cf7b6..78df231 100644
--- a/core-common/src/test/java/org/glassfish/jersey/process/internal/RankedComparatorTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/process/internal/RankedComparatorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.model.internal.RankedComparator;
 import org.glassfish.jersey.model.internal.RankedProvider;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests {@link org.glassfish.jersey.model.internal.RankedComparator}.
diff --git a/core-common/src/test/java/org/glassfish/jersey/uri/PathPatternTest.java b/core-common/src/test/java/org/glassfish/jersey/uri/PathPatternTest.java
index e876ae2..460db0e 100644
--- a/core-common/src/test/java/org/glassfish/jersey/uri/PathPatternTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/uri/PathPatternTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,11 +18,10 @@
 
 import java.util.regex.MatchResult;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Tests {@link PathTemplate}.
@@ -61,12 +60,12 @@
 
         for (PathPattern pattern : patterns) {
             matchResult = pattern.match(rhp);
-            assertNotNull("No match of " + rhp + " for pattern " + pattern, matchResult);
+            assertNotNull(matchResult, "No match of " + rhp + " for pattern " + pattern);
             rhp = matchResult.group(matchResult.groupCount());
             rhp = (rhp == null) ? "" : rhp;
         }
 
-        Assert.assertEquals("", rhp);
+        assertEquals("", rhp);
 
         rhp = path2;
 
@@ -89,8 +88,8 @@
     public void testSimplePatternWithRightHandSide() throws Exception {
 
         PathPattern pattern = new PathPattern(new PathTemplate("/test/{template: abc.*}"));
-        assertNull("Why matched?", pattern.match("/test/me"));
-        assertNotNull("Why not matched?", pattern.match("/test/abc-should_work"));
+        assertNull(pattern.match("/test/me"), "Why matched?");
+        assertNotNull(pattern.match("/test/abc-should_work"), "Why not matched?");
     }
 
     @Test
@@ -98,9 +97,9 @@
         PathTemplate tmpl = new PathTemplate("/test");
         PathPattern pattern = new PathPattern(tmpl);
         assertEquals(
-                "We just injected the value, why it is different?",
                 tmpl,
-                pattern.getTemplate()
+                pattern.getTemplate(),
+                "We just injected the value, why it is different?"
         );
     }
 
@@ -113,9 +112,9 @@
         String value = m.group(m.groupCount());
 
         assertEquals(
-                "Last value should match all of the trailing part",
                 "/d",
-                value
+                value,
+                "Last value should match all of the trailing part"
         );
     }
 }
diff --git a/core-common/src/test/java/org/glassfish/jersey/uri/UriComponentTest.java b/core-common/src/test/java/org/glassfish/jersey/uri/UriComponentTest.java
index 8e26e49..a98f8ae 100644
--- a/core-common/src/test/java/org/glassfish/jersey/uri/UriComponentTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/uri/UriComponentTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,9 +21,9 @@
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.PathSegment;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Unit test for {@link UriComponent} class.
diff --git a/core-common/src/test/java/org/glassfish/jersey/uri/UriTemplateTest.java b/core-common/src/test/java/org/glassfish/jersey/uri/UriTemplateTest.java
index e696602..7826506 100644
--- a/core-common/src/test/java/org/glassfish/jersey/uri/UriTemplateTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/uri/UriTemplateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,12 +28,12 @@
 
 import org.glassfish.jersey.uri.internal.UriTemplateParser;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Taken from Jersey 1: jersey-tests: com.sun.jersey.impl.uri.UriTemplateTest
@@ -475,15 +475,15 @@
         tmpl.match("/test?query=x", result);
 
         assertEquals(
-                "incorrect size for match string",
                 1,
-                result.size()
+                result.size(),
+                "incorrect size for match string"
         );
 
         assertEquals(
-                "query parameter is not matched",
                 "x",
-                result.get("query")
+                result.get("query"),
+                "query parameter is not matched"
         );
     }
 
@@ -498,20 +498,20 @@
         tmpl.match("/test?query=x&secondQuery=y", result);
 
         assertEquals(
-                "incorrect size for match string",
                 2,
-                result.size()
+                result.size(),
+                "incorrect size for match string"
         );
 
         assertEquals(
-                "query parameter is not matched",
                 "x",
-                result.get("query")
+                result.get("query"),
+                "query parameter is not matched"
         );
         assertEquals(
-                "query parameter is not matched",
                 "y",
-                result.get("secondQuery")
+                result.get("secondQuery"),
+                "query parameter is not matched"
         );
     }
 
@@ -524,9 +524,9 @@
 
         final String uri = tmpl.createURI(values);
         assertEquals(
-                "query string is not set",
                 "/test?query=example",
-                uri
+                uri,
+                "query string is not set"
         );
     }
 
@@ -540,9 +540,9 @@
 
         final String uri = tmpl.createURI(values);
         assertEquals(
-                "query string is not set",
                 "/test?query=example&other=otherExample",
-                uri
+                uri,
+                "query string is not set"
         );
 
     }
@@ -555,9 +555,9 @@
 
         final String uri = tmpl.createURI(values);
         assertEquals(
-                "query string is set",
                 "/test",
-                uri
+                uri,
+                "query string is set"
         );
 
     }
@@ -571,9 +571,9 @@
 
         final String uri = tmpl.createURI(values);
         assertEquals(
-                "query string is not set",
                 "/test;matrix=example/other",
-                uri
+                uri,
+                "query string is not set"
         );
 
     }
@@ -588,9 +588,9 @@
 
         final String uri = tmpl.createURI(values);
         assertEquals(
-                "query string is not set",
                 "/test;matrix=example;other=otherExample/other",
-                uri
+                uri,
+                "query string is not set"
         );
 
     }
@@ -605,9 +605,9 @@
 
         final String uri = tmpl.createURI(values);
         assertEquals(
-                "query string is not set",
                 "/test;matrix=example/other;other=otherExample",
-                uri
+                uri,
+                "query string is not set"
         );
     }
 
@@ -619,9 +619,9 @@
 
         final String uri = tmpl.createURI(values);
         assertEquals(
-                "query string is set",
                 "/test/other",
-                uri
+                uri,
+                "query string is set"
         );
     }
 
@@ -700,17 +700,17 @@
     private void assertEncodedQueryTemplateExpansion(final String expectedExpansion,
                                                      final String queryTemplate,
                                                      final Object... values) {
-        assertEquals("Unexpected encoded query template expansion result.",
-                expectedExpansion,
-                UriTemplate.createURI(null, null, null, null, null, null, queryTemplate, null, values, true, false));
+        assertEquals(expectedExpansion,
+                UriTemplate.createURI(null, null, null, null, null, null, queryTemplate, null, values, true, false),
+                "Unexpected encoded query template expansion result.");
     }
 
     private void assertEncodedQueryTemplateExpansion(final String expectedExpansion,
                                                      final String queryTemplate,
                                                      final Map<String, ?> values) {
-        assertEquals("Unexpected encoded query template expansion result.",
-                expectedExpansion,
-                UriTemplate.createURI(null, null, null, null, null, null, queryTemplate, null, values, true, false));
+        assertEquals(expectedExpansion,
+                UriTemplate.createURI(null, null, null, null, null, null, queryTemplate, null, values, true, false),
+                "Unexpected encoded query template expansion result.");
     }
 
     @Test
@@ -753,16 +753,16 @@
     private void assertEncodedPathTemplateExpansion(final String expectedExpansion,
                                                     final String pathTemplate,
                                                     final Object... values) {
-        assertEquals("Unexpected encoded matrix parameter template expansion result.",
-                expectedExpansion,
-                UriTemplate.createURI(null, null, null, null, null, pathTemplate, null, null, values, true, false));
+        assertEquals(expectedExpansion,
+                UriTemplate.createURI(null, null, null, null, null, pathTemplate, null, null, values, true, false),
+                "Unexpected encoded matrix parameter template expansion result.");
     }
 
     private void assertEncodedPathTemplateExpansion(final String expectedExpansion,
                                                     final String pathTemplate,
                                                     final Map<String, ?> values) {
-        assertEquals("Unexpected encoded matrix parameter template expansion result.",
-                expectedExpansion,
-                UriTemplate.createURI(null, null, null, null, null, pathTemplate, null, null, values, true, false));
+        assertEquals(expectedExpansion,
+                UriTemplate.createURI(null, null, null, null, null, pathTemplate, null, null, values, true, false),
+                "Unexpected encoded matrix parameter template expansion result.");
     }
 }
diff --git a/core-common/src/test/java/org/glassfish/jersey/uri/internal/PathTemplateTest.java b/core-common/src/test/java/org/glassfish/jersey/uri/internal/PathTemplateTest.java
index 4822e4a..ec9bc99 100644
--- a/core-common/src/test/java/org/glassfish/jersey/uri/internal/PathTemplateTest.java
+++ b/core-common/src/test/java/org/glassfish/jersey/uri/internal/PathTemplateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,8 +18,8 @@
 
 import org.glassfish.jersey.uri.PathTemplate;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 
 /**
@@ -31,14 +31,14 @@
     public void testBasicOperations() throws Exception {
         PathTemplate tmpl = new PathTemplate("/{id : \\d+}/test");
         assertEquals(
-                "getNumberOfTemplateVariables() returned invalid number",
                 1,
-                tmpl.getNumberOfTemplateVariables()
+                tmpl.getNumberOfTemplateVariables(),
+                "getNumberOfTemplateVariables() returned invalid number"
         );
         assertEquals(
-                "getNumberOfExplicitRegexes() returned invalid number",
                 1,
-                tmpl.getNumberOfExplicitRegexes()
+                tmpl.getNumberOfExplicitRegexes(),
+                "getNumberOfExplicitRegexes() returned invalid number"
         );
     }
 }
diff --git a/core-common/src/test/resources/surefire-jdk17.policy b/core-common/src/test/resources/surefire-jdk17.policy
new file mode 100644
index 0000000..a960a3d
--- /dev/null
+++ b/core-common/src/test/resources/surefire-jdk17.policy
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2022 Vladimir Bychkov. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+// JDK 17 and later permissions
+grant {
+  permission java.lang.RuntimePermission "setContextClassLoader";
+};
diff --git a/core-server/pom.xml b/core-server/pom.xml
index 0c0689e..8686604 100644
--- a/core-server/pom.xml
+++ b/core-server/pom.xml
@@ -214,8 +214,8 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/AnnotatedEntityTest.java b/core-server/src/test/java/org/glassfish/jersey/server/AnnotatedEntityTest.java
index 0e3e3a4..772e32c 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/AnnotatedEntityTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/AnnotatedEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,10 +29,10 @@
 
 import org.glassfish.jersey.server.model.ModelValidationException;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Tests entity parameter annotated with non injection annotations.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/ApplicationHandlerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/ApplicationHandlerTest.java
index 6c267cb..b926dc7 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/ApplicationHandlerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/ApplicationHandlerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -60,12 +60,12 @@
 import org.glassfish.jersey.server.internal.process.MappableException;
 import org.glassfish.jersey.server.model.ModelValidationException;
 import org.glassfish.jersey.server.spi.ResponseErrorMapper;
-
-import org.junit.Test;
-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 org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * Test basic application behavior.
@@ -558,12 +558,14 @@
     /**
      * Test that un-mapped response errors are tried to be processed only once (MBW).
      */
-    @Test(expected = ExecutionException.class)
+    @Test
     public void testMapCyclicResponseErrorForMbw() throws Exception {
-        final ApplicationHandler handler = new ApplicationHandler(MapResponseErrorApplication.class);
+        Assertions.assertThrows(ExecutionException.class, () -> {
+            final ApplicationHandler handler = new ApplicationHandler(MapResponseErrorApplication.class);
 
-        final ContainerRequest context = RequestContextBuilder.from("/foobar", "GET").build();
+            final ContainerRequest context = RequestContextBuilder.from("/foobar", "GET").build();
 
-        handler.apply(context).get();
+            handler.apply(context).get();
+        });
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/ApplicationTest.java b/core-server/src/test/java/org/glassfish/jersey/server/ApplicationTest.java
index 9765e0e..781d390 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/ApplicationTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/ApplicationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,7 +23,7 @@
 import javax.ws.rs.Path;
 import javax.ws.rs.core.Application;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Pavel Bucek
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/AsyncApplicationBuildingTest.java b/core-server/src/test/java/org/glassfish/jersey/server/AsyncApplicationBuildingTest.java
index 069996e..dd511e2 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/AsyncApplicationBuildingTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/AsyncApplicationBuildingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,9 +46,9 @@
 import org.glassfish.jersey.process.Inflector;
 import org.glassfish.jersey.server.model.Resource;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Unit test for creating an application with asynchronously handled request processing
@@ -252,7 +252,7 @@
         final ResourceConfig resourceConfig = new ResourceConfig(ErrornousResource.class);
         try {
             ApplicationHandler server = new ApplicationHandler(resourceConfig);
-            assertTrue("Jersey server initialization should have failed: " + server, false);
+            assertTrue(false, "Jersey server initialization should have failed: " + server);
         } catch (Exception e) {
         }
     }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/AsyncCallbackServerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/AsyncCallbackServerTest.java
index cde25bb..95de589 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/AsyncCallbackServerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/AsyncCallbackServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,11 +35,11 @@
 
 import javax.inject.Singleton;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * Tests {@link CompletionCallback}.
@@ -67,7 +67,7 @@
 
         final ContainerResponse response = app.apply(req).get();
         assertEquals(200, response.getStatus());
-        assertTrue("onComplete() was not called.", flags.onCompletionCalled);
+        assertTrue(flags.onCompletionCalled, "onComplete() was not called.");
     }
 
     @Test
@@ -85,7 +85,7 @@
         } catch (Exception e) {
             // ok - should throw an exception
         }
-        assertTrue("onError().", flags.onCompletionCalledWithError);
+        assertTrue(flags.onCompletionCalledWithError, "onError().");
     }
 
     @Test
@@ -117,8 +117,8 @@
 
         @Override
         public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
-            assertFalse("onComplete() callback has already been called.",
-                    flags.onCompletionCalled);
+            assertFalse(flags.onCompletionCalled,
+                    "onComplete() callback has already been called.");
         }
     }
 
@@ -132,8 +132,8 @@
 
         @Override
         public void onComplete(Throwable throwable) {
-            assertFalse("onComplete() has already been called.", flags.onCompletionCalled);
-            assertFalse("onComplete() has already been called with error.", flags.onCompletionCalledWithError);
+            assertFalse(flags.onCompletionCalled, "onComplete() has already been called.");
+            assertFalse(flags.onCompletionCalledWithError, "onComplete() has already been called with error.");
             if (throwable == null) {
                 flags.onCompletionCalled = true;
             } else {
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/AutoDiscoverableServerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/AutoDiscoverableServerTest.java
index cfac9de..6d51742 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/AutoDiscoverableServerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/AutoDiscoverableServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.internal.spi.AutoDiscoverable;
 import org.glassfish.jersey.internal.util.PropertiesHelper;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Note: Auto-discoverables from this test "affects" all other tests in suit.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/ContainerRequestTest.java b/core-server/src/test/java/org/glassfish/jersey/server/ContainerRequestTest.java
index 7a479e0..2167154 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/ContainerRequestTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/ContainerRequestTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,11 +33,12 @@
 import javax.ws.rs.core.Variant;
 
 import org.glassfish.jersey.internal.MapPropertiesDelegate;
-
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+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 static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Jersey container request context test.
@@ -181,22 +182,28 @@
                 new MapPropertiesDelegate(), null);
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testEvaluatePreconditionsDateNull() {
-        ContainerRequest r = getContainerRequestForPreconditionsTest();
-        r.evaluatePreconditions((Date) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            ContainerRequest r = getContainerRequestForPreconditionsTest();
+            r.evaluatePreconditions((Date) null);
+        });
     }
 
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testEvaluatePreconditionsEntityTagNull() {
-        ContainerRequest r = getContainerRequestForPreconditionsTest();
-        r.evaluatePreconditions((EntityTag) null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            ContainerRequest r = getContainerRequestForPreconditionsTest();
+            r.evaluatePreconditions((EntityTag) null);
+        });
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testEvaluatePreconditionsBothNull() {
-        ContainerRequest r = getContainerRequestForPreconditionsTest();
-        r.evaluatePreconditions(null, null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            ContainerRequest r = getContainerRequestForPreconditionsTest();
+            r.evaluatePreconditions(null, null);
+        });
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/ExtendedResourceContextTest.java b/core-server/src/test/java/org/glassfish/jersey/server/ExtendedResourceContextTest.java
index 2cdc924..f3f96df 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/ExtendedResourceContextTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/ExtendedResourceContextTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,9 +28,9 @@
 import org.glassfish.jersey.server.model.ResourceModel;
 import org.glassfish.jersey.server.model.ResourceTestUtils;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test (@link ExtendedResourceContext extended resource context}.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/JaxRsFeatureRegistrationTest.java b/core-server/src/test/java/org/glassfish/jersey/server/JaxRsFeatureRegistrationTest.java
index 122ab45..4e2fa53 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/JaxRsFeatureRegistrationTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/JaxRsFeatureRegistrationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,8 +17,8 @@
 package org.glassfish.jersey.server;
 
 import org.glassfish.jersey.CommonProperties;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.container.DynamicFeature;
 import javax.ws.rs.container.ResourceInfo;
@@ -47,8 +47,8 @@
         final ResourceConfig config = new ResourceConfig();
         final ApplicationHandler ah = new ApplicationHandler(config);
 
-        Assert.assertTrue(ah.getConfiguration().isRegistered(FeatureImpl.class));
-        Assert.assertTrue(ah.getConfiguration().isRegistered(DynamicFeatureImpl.class));
+        Assertions.assertTrue(ah.getConfiguration().isRegistered(FeatureImpl.class));
+        Assertions.assertTrue(ah.getConfiguration().isRegistered(DynamicFeatureImpl.class));
     }
 
     @Test
@@ -58,7 +58,7 @@
                 .property(CommonProperties.JAXRS_SERVICE_LOADING_ENABLE, "false");
         final ApplicationHandler ah = new ApplicationHandler(config);
 
-        Assert.assertFalse(ah.getConfiguration().isRegistered(FeatureImpl.class));
-        Assert.assertFalse(ah.getConfiguration().isRegistered(DynamicFeatureImpl.class));
+        Assertions.assertFalse(ah.getConfiguration().isRegistered(FeatureImpl.class));
+        Assertions.assertFalse(ah.getConfiguration().isRegistered(DynamicFeatureImpl.class));
     }
 }
\ No newline at end of file
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/ModelProcessorScopeTest.java b/core-server/src/test/java/org/glassfish/jersey/server/ModelProcessorScopeTest.java
index 4f50714..3a64bd5 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/ModelProcessorScopeTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/ModelProcessorScopeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.server.model.ResourceModel;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test scope of resources enhanced by model processors.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/ResourceConfigBuilderTest.java b/core-server/src/test/java/org/glassfish/jersey/server/ResourceConfigBuilderTest.java
index 41e83e9..9393e57 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/ResourceConfigBuilderTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/ResourceConfigBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,9 +26,9 @@
 import javax.ws.rs.ext.ReaderInterceptor;
 import javax.ws.rs.ext.ReaderInterceptorContext;
 
-import org.junit.Test;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 
 /**
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/ResourceConfigTest.java b/core-server/src/test/java/org/glassfish/jersey/server/ResourceConfigTest.java
index 197e5fb..0fd7416 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/ResourceConfigTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/ResourceConfigTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,15 +34,15 @@
 import org.glassfish.jersey.server.config.toplevel.PublicRootResourceClass;
 import org.glassfish.jersey.server.config.toplevelinnerstatic.PublicRootResourceInnerStaticClass;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.glassfish.jersey.server.JarUtils.createJarFile;
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
@@ -98,8 +98,7 @@
 
         final ContainerResponse r = handler.apply(RequestContextBuilder.from("/", "/resource?id=" + rcId, "GET").build()).get();
         assertEquals(200, r.getStatus());
-        assertEquals("Injected application instance not same as used for building the Jersey handler.",
-                "true", r.getEntity());
+        assertEquals("true", r.getEntity(), "Injected application instance not same as used for building the Jersey handler.");
     }
 
     @Test
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/ResourceMergeTest.java b/core-server/src/test/java/org/glassfish/jersey/server/ResourceMergeTest.java
index 76489a0..2c2a865 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/ResourceMergeTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/ResourceMergeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,10 +29,10 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.server.model.ResourceTestUtils;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test merging of resources and child resources.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/SecurityContextTest.java b/core-server/src/test/java/org/glassfish/jersey/server/SecurityContextTest.java
index 713f2ac..881f7cc 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/SecurityContextTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/SecurityContextTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,10 +28,10 @@
 
 import javax.annotation.Priority;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test class for testing security context in the Filter and resource.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/SecurityManagerConfiguredTest.java b/core-server/src/test/java/org/glassfish/jersey/server/SecurityManagerConfiguredTest.java
index f30e6fb..b5f18e5 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/SecurityManagerConfiguredTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/SecurityManagerConfiguredTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey.server;
 
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Test that verifies that security manager is setup to run the Jersey core server unit tests.
@@ -30,7 +30,7 @@
      */
     @Test
     public void testSecurityManagerIsConfigured() {
-        assertNotNull("Jersey core server unit tests should run with active security manager",
-                System.getSecurityManager());
+        assertNotNull(System.getSecurityManager(),
+                "Jersey core server unit tests should run with active security manager");
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/UriInfoMatchedResourcesTest.java b/core-server/src/test/java/org/glassfish/jersey/server/UriInfoMatchedResourcesTest.java
index 0f8838b..9ef0fbc 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/UriInfoMatchedResourcesTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/UriInfoMatchedResourcesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.UriInfo;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test UriInfo content.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/UriInfoMatchedUrisTest.java b/core-server/src/test/java/org/glassfish/jersey/server/UriInfoMatchedUrisTest.java
index 8460cf4..7edee54 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/UriInfoMatchedUrisTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/UriInfoMatchedUrisTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.UriInfo;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test UriInfo content.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/filter/ApplicationFilterTest.java b/core-server/src/test/java/org/glassfish/jersey/server/filter/ApplicationFilterTest.java
index 92f3bf7..a0312aa 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/filter/ApplicationFilterTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/filter/ApplicationFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,10 +39,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.model.Resource;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test for JAX-RS filters.
@@ -149,7 +149,7 @@
         final ApplicationHandler application = new ApplicationHandler(resourceConfig);
         final ContainerResponse response = application.apply(RequestContextBuilder.from("/simple", "GET").build()).get();
         assertEquals(200, response.getStatus());
-        Assert.assertTrue(simpleFilter.called);
+        assertTrue(simpleFilter.called);
     }
 
     @Test
@@ -160,7 +160,7 @@
         final ApplicationHandler application = new ApplicationHandler(resourceConfig);
         final ContainerResponse response = application.apply(RequestContextBuilder.from("/NOT-FOUND", "GET").build()).get();
         assertEquals(404, response.getStatus());
-        Assert.assertFalse(simpleFilter.called);
+        Assertions.assertFalse(simpleFilter.called);
     }
 
     @Test
@@ -172,7 +172,7 @@
         final ContainerResponse response = application.apply(RequestContextBuilder.from("/simple", "POST").entity("entity")
                 .build()).get();
         assertEquals(405, response.getStatus());
-        Assert.assertFalse(simpleFilter.called);
+        Assertions.assertFalse(simpleFilter.called);
     }
 
     @Path("simple")
@@ -320,7 +320,7 @@
         final ApplicationHandler application = new ApplicationHandler(resourceConfig);
         try {
             application.apply(RequestContextBuilder.from("/test", "GET").build()).get().getStatus();
-            Assert.fail("should throw an exception");
+            Assertions.fail("should throw an exception");
         } catch (final Exception e) {
             // ok
         }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/filter/ContainerResponseFilterOrderingTest.java b/core-server/src/test/java/org/glassfish/jersey/server/filter/ContainerResponseFilterOrderingTest.java
index a255467..153bc17 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/filter/ContainerResponseFilterOrderingTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/filter/ContainerResponseFilterOrderingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,10 +34,10 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/filter/CsrfProtectionFilterTest.java b/core-server/src/test/java/org/glassfish/jersey/server/filter/CsrfProtectionFilterTest.java
index 49ff0ff..ec7f881 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/filter/CsrfProtectionFilterTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/filter/CsrfProtectionFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,9 +26,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
@@ -52,7 +52,7 @@
         }
     }
 
-    @Before
+    @BeforeEach
     public void setUp() {
         ResourceConfig rc = new ResourceConfig(Resource.class, CsrfProtectionFilter.class);
         handler = new ApplicationHandler(rc);
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/filter/EncodingFilterTest.java b/core-server/src/test/java/org/glassfish/jersey/server/filter/EncodingFilterTest.java
index 66980ee..a4ba302 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/filter/EncodingFilterTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/filter/EncodingFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,7 +23,7 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.spi.ContentEncoder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.container.ContainerResponseFilter;
@@ -33,11 +33,11 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 
-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;
 
 /**
  * @author Martin Matula
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/filter/EntityTypeFilterTest.java b/core-server/src/test/java/org/glassfish/jersey/server/filter/EntityTypeFilterTest.java
index b932c3b..733b348 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/filter/EntityTypeFilterTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/filter/EntityTypeFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,9 +34,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 
 /**
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/filter/FilterSetMethodTest.java b/core-server/src/test/java/org/glassfish/jersey/server/filter/FilterSetMethodTest.java
index c611d3f..295722e 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/filter/FilterSetMethodTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/filter/FilterSetMethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,9 +38,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Tests calling {@link ContainerRequestContext#setMethod(String)} in different request/response phases.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/filter/HttpMethodOverrideFilterTest.java b/core-server/src/test/java/org/glassfish/jersey/server/filter/HttpMethodOverrideFilterTest.java
index a68c56f..753a0c6 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/filter/HttpMethodOverrideFilterTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/filter/HttpMethodOverrideFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,9 +27,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Martin Matula
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/filter/LayeredFiltersTest.java b/core-server/src/test/java/org/glassfish/jersey/server/filter/LayeredFiltersTest.java
index 7117c15..3013f9f 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/filter/LayeredFiltersTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/filter/LayeredFiltersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,11 +40,11 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Tests layering of filters applied on appropriate methods (using named bindings) on resource method, sub-method,
@@ -123,7 +123,7 @@
     public static class FilterTwo implements ContainerRequestFilter, ContainerResponseFilter {
         public void filter(ContainerRequestContext requestContext) throws IOException {
             List<String> xTest = requestContext.getHeaders().get("X-TEST");
-            assertNotNull("FilterOne not called", xTest);
+            assertNotNull(xTest, "FilterOne not called");
             assertEquals(1, xTest.size());
             assertEquals("one", xTest.get(0));
 
@@ -140,7 +140,7 @@
     }
 
     @Test
-    @Ignore("JERSEY-2414 - not yet implemented")
+    @Disabled("JERSEY-2414 - not yet implemented")
     public void testResourceMethod() throws ExecutionException, InterruptedException {
         final ResourceConfig resourceConfig = new ResourceConfig(ResourceWithSubresourceLocator.class)
                 .register(FilterOne.class).register(FilterTwo.class);
@@ -156,7 +156,7 @@
     }
 
     @Test
-    @Ignore("JERSEY-2414 - not yet implemented")
+    @Disabled("JERSEY-2414 - not yet implemented")
     public void testResourceSubresourceMethod() throws ExecutionException, InterruptedException {
         final ResourceConfig resourceConfig = new ResourceConfig(ResourceWithSubresourceLocator.class)
                 .register(FilterOne.class).register(FilterTwo.class);
@@ -202,7 +202,7 @@
     }
 
     @Test
-    @Ignore("JERSEY-2414 - not yet implemented")
+    @Disabled("JERSEY-2414 - not yet implemented")
     public void testResourceMethodOnClass() throws ExecutionException, InterruptedException {
         final ResourceConfig resourceConfig = new ResourceConfig(ResourceWithSubresourceLocatorOnClass.class)
                 .register(FilterOne.class).register(FilterTwo.class);
@@ -218,7 +218,7 @@
     }
 
     @Test
-    @Ignore("JERSEY-2414 - not yet implemented")
+    @Disabled("JERSEY-2414 - not yet implemented")
     public void testResourceSubresourceMethodOnClass() throws ExecutionException, InterruptedException {
         final ResourceConfig resourceConfig = new ResourceConfig(ResourceWithSubresourceLocatorOnClass.class)
                 .register(FilterOne.class).register(FilterTwo.class);
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/filter/UriConnegFilterTest.java b/core-server/src/test/java/org/glassfish/jersey/server/filter/UriConnegFilterTest.java
index aff1721..daa238c 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/filter/UriConnegFilterTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/filter/UriConnegFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,9 +30,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
@@ -57,7 +57,7 @@
         }
     }
 
-    @Before
+    @BeforeEach
     public void setUp() {
         Map<String, MediaType> mediaTypes = new HashMap<>();
         mediaTypes.put("foo", MediaType.valueOf("application/foo"));
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/filter/UriModificationFilterTest.java b/core-server/src/test/java/org/glassfish/jersey/server/filter/UriModificationFilterTest.java
index b5cacef..7c8faec 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/filter/UriModificationFilterTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/filter/UriModificationFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,8 +36,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests capability of URI modification during pre-matching filtering.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/BackgroundSchedulerProviderTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/BackgroundSchedulerProviderTest.java
index ad7f5ce..ae72585 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/BackgroundSchedulerProviderTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/BackgroundSchedulerProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.BackgroundScheduler;
 import org.glassfish.jersey.spi.ScheduledThreadPoolExecutorProvider;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test basic application behavior.
@@ -111,6 +111,6 @@
         final ContainerResponse response = ah.apply(RequestContextBuilder.from("/executors-test", "GET").build()).get();
 
         assertEquals(200, response.getStatus());
-        assertEquals("Some executor test assertions failed.", 11, response.getEntity());
+        assertEquals(11, response.getEntity(), "Some executor test assertions failed.");
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/ContainerUtilsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/ContainerUtilsTest.java
index d86017e..acda391 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/ContainerUtilsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/ContainerUtilsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,12 +16,11 @@
 
 package org.glassfish.jersey.server.internal;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.glassfish.jersey.server.internal.ContainerUtils.getHandlerPath;
 import static org.glassfish.jersey.server.internal.ContainerUtils.reduceLeadingSlashes;
-import static org.junit.Assert.assertNull;
-
-import static junit.framework.TestCase.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Tests container-oriented utilities functions.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/ResourceContextTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/ResourceContextTest.java
index 312db7c..b7901d6 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/ResourceContextTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/ResourceContextTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test basic application behavior.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/RuntimeDelegateImplTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/RuntimeDelegateImplTest.java
index 57d9668..c717bd9 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/RuntimeDelegateImplTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/RuntimeDelegateImplTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,9 +19,9 @@
 import javax.ws.rs.core.Application;
 import javax.ws.rs.ext.RuntimeDelegate;
 
-import org.junit.Test;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Unit test that checks that the right RuntimeDelegateImpl is loaded by JAX-RS.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/ServiceFinderTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/ServiceFinderTest.java
index 1acc946..b70c4ba 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/ServiceFinderTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/ServiceFinderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,10 +29,10 @@
 import org.glassfish.jersey.internal.ServiceFinder;
 import org.glassfish.jersey.server.JarUtils;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.glassfish.jersey.server.JarUtils.createJarFile;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Michal Gajdos
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/AbstractTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/AbstractTest.java
index d26743a..0be4e0a 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/AbstractTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/AbstractTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 import javax.ws.rs.core.Request;
 import java.util.concurrent.ExecutionException;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Class used for {@link ApplicationHandler} initialization and for executing {@link Request}s.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ActiveBindingBindingTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ActiveBindingBindingTest.java
index e0b8acb..f87cbcc 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ActiveBindingBindingTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ActiveBindingBindingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,7 +46,7 @@
 
 import org.jvnet.hk2.internal.ServiceHandleImpl;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/BeanParamMemoryLeakTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/BeanParamMemoryLeakTest.java
index b56bde3..3d4b4a5 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/BeanParamMemoryLeakTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/BeanParamMemoryLeakTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.hk2.api.Filter;
 import org.glassfish.hk2.api.ServiceLocator;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Reproducer for JERSEY-2800. We need to make sure
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ConstructorParameterInjectionTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ConstructorParameterInjectionTest.java
index 3d1ef54..7886b1e 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ConstructorParameterInjectionTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ConstructorParameterInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,9 +24,9 @@
 import javax.ws.rs.PathParam;
 import javax.ws.rs.QueryParam;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Tests injections into constructor parameters.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ContextBasedInjectionTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ContextBasedInjectionTest.java
index 5dbddfb..ea01bcd 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ContextBasedInjectionTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ContextBasedInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,11 +17,10 @@
 package org.glassfish.jersey.server.internal.inject;
 
 import java.net.URI;
-import java.util.Arrays;
-import java.util.List;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.stream.Stream;
 
 import javax.ws.rs.container.ContainerRequestContext;
 import javax.ws.rs.core.Context;
@@ -38,11 +37,11 @@
 import org.glassfish.jersey.server.AsyncContext;
 import org.glassfish.jersey.server.model.Resource;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Unit test for creating an application with asynchronously handled request processing
@@ -50,25 +49,15 @@
  *
  * @author Marek Potociar
  */
-@RunWith(Parameterized.class)
 public class ContextBasedInjectionTest {
 
     private static final URI BASE_URI = URI.create("http://localhost:8080/base/");
 
-    @Parameterized.Parameters
-    public static List<String[]> testUriSuffixes() {
-        return Arrays.asList(new String[][]{
-                {"a/b/c", "A-B-C"},
-                {"a/b/d/", "A-B-D"}
-        });
-    }
-
-    private final String uriSuffix;
-    private final String expectedResponse;
-
-    public ContextBasedInjectionTest(String uriSuffix, String expectedResponse) {
-        this.uriSuffix = uriSuffix;
-        this.expectedResponse = expectedResponse;
+    public static Stream<Arguments> testUriSuffixes() {
+        return Stream.of(
+                Arguments.of("a/b/c", "A-B-C"),
+                Arguments.of("a/b/d/", "A-B-D")
+        );
     }
 
     private static class AsyncInflector implements Inflector<ContainerRequestContext, Response> {
@@ -112,7 +101,7 @@
 
     private ApplicationHandler app;
 
-    @Before
+    @BeforeEach
     public void setupApplication() {
         ResourceConfig rc = new ResourceConfig();
 
@@ -128,8 +117,9 @@
         app = new ApplicationHandler(rc);
     }
 
-    @Test
-    public void testAsyncApp() throws InterruptedException, ExecutionException {
+    @ParameterizedTest
+    @MethodSource("testUriSuffixes")
+    public void testAsyncApp(String uriSuffix, String expectedResponse) throws InterruptedException, ExecutionException {
         ContainerRequest req =
                 RequestContextBuilder.from(BASE_URI, URI.create(BASE_URI.getPath() + uriSuffix), "GET").build();
 
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsCookieTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsCookieTest.java
index 4c35475..c69afa4 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsCookieTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsCookieTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsPrimitiveTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsPrimitiveTest.java
index b3519d3..48ec83d 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsPrimitiveTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsPrimitiveTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsStringTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsStringTest.java
index 20b8267..da1e2e6 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsStringTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamAsStringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamStringConstructorTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamStringConstructorTest.java
index 0d7e588..1f7063d 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamStringConstructorTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/CookieParamStringConstructorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,8 +31,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/EncodedParamsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/EncodedParamsTest.java
index 1e39b13..762a888 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/EncodedParamsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/EncodedParamsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,11 +31,11 @@
 
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/FormParamTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/FormParamTest.java
index 56cf89f..d9f6594 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/FormParamTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/FormParamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,9 +39,9 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * @author Paul Sandoz
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamAsPrimitiveTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamAsPrimitiveTest.java
index ae54b47..c7bf2a5 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamAsPrimitiveTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamAsPrimitiveTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamAsStringTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamAsStringTest.java
index f4b1e3d..8b82ecc 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamAsStringTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamAsStringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamStringConstructorTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamStringConstructorTest.java
index 7589fd3..d0777ea 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamStringConstructorTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/HeaderParamStringConstructorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/InvalidParamsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/InvalidParamsTest.java
index c5acca7..0415277 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/InvalidParamsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/InvalidParamsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/JaxRsInjectablesTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/JaxRsInjectablesTest.java
index 805c03a..6219c21 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/JaxRsInjectablesTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/JaxRsInjectablesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,10 +44,10 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Covers JAX-RS defined @Context injectable values including
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamAsPrimitiveTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamAsPrimitiveTest.java
index 6d8d501..76b2a79 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamAsPrimitiveTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamAsPrimitiveTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamAsStringTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamAsStringTest.java
index 190720c..8a38eaf 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamAsStringTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamAsStringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamStringConstructorTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamStringConstructorTest.java
index b6f4fec..03b0b73 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamStringConstructorTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/MatrixParamStringConstructorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 
 import org.glassfish.jersey.server.ContainerResponse;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamConverterDateTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamConverterDateTest.java
index b00bd64..fd841f1 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamConverterDateTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamConverterDateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,7 +21,7 @@
 import org.glassfish.jersey.internal.inject.ExtractorException;
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.internal.LocalizationMessages;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -37,7 +37,7 @@
 import java.util.Locale;
 import java.util.concurrent.ExecutionException;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class ParamConverterDateTest extends AbstractTest {
 
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamConverterInternalTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamConverterInternalTest.java
index e6546de..7ba24c8 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamConverterInternalTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamConverterInternalTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -48,11 +48,11 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Tests {@link ParamConverter param converters}.
@@ -287,8 +287,8 @@
         final ParamConverter<Date> converter =
                 new ParamConverters.AggregatedProvider(null).getConverter(Date.class, Date.class, null);
 
-        assertEquals("Unexpected date converter provider class",
-                ParamConverters.DateProvider.class, converter.getClass().getEnclosingClass());
+        assertEquals(ParamConverters.DateProvider.class, converter.getClass().getEnclosingClass(),
+                "Unexpected date converter provider class");
     }
 
     @Path("resource")
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamExceptionMappingTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamExceptionMappingTest.java
index bdd148f..33272e7 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamExceptionMappingTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/ParamExceptionMappingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -41,9 +41,9 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.ParamException;
 import org.glassfish.jersey.server.RequestContextBuilder;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Not sure whether this is relevant anymore.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsPathSegmentTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsPathSegmentTest.java
index 73ae61d..6dded93 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsPathSegmentTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsPathSegmentTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey-1: jersey-tests: com.sun.jersey.impl.methodparams.PathParamAsPathSegmentTest
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsPrimitiveTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsPrimitiveTest.java
index f23e4e1..b929eea 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsPrimitiveTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsPrimitiveTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey-1: jersey-tests: com.sun.jersey.impl.methodparams.PathParamAsPrimitiveTest
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsStringTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsStringTest.java
index 0f8a700..5320959 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsStringTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamAsStringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamDefaultValueTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamDefaultValueTest.java
index 72fec0c..71a1427 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamDefaultValueTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamDefaultValueTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 
 import org.glassfish.jersey.server.ContainerResponse;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Miroslav Fuksa
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamStringConstructorTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamStringConstructorTest.java
index 1550146..e6c42bf 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamStringConstructorTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/PathParamStringConstructorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 
 import org.glassfish.jersey.server.ContainerResponse;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsPrimitiveTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsPrimitiveTest.java
index d209c17..8336caa 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsPrimitiveTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsPrimitiveTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSetPrimitiveTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSetPrimitiveTest.java
index 6be3925..0dc7a01 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSetPrimitiveTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSetPrimitiveTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,9 +27,9 @@
 
 import org.glassfish.jersey.server.ContainerResponse;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSetStringTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSetStringTest.java
index bba6993..a20141e 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSetStringTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSetStringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSortedSetPrimitiveTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSortedSetPrimitiveTest.java
index 3fb41d3..16cfbf5 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSortedSetPrimitiveTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSortedSetPrimitiveTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,9 +27,9 @@
 
 import org.glassfish.jersey.server.ContainerResponse;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSortedSetStringTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSortedSetStringTest.java
index d563d19..51be2f8 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSortedSetStringTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsSortedSetStringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsStringTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsStringTest.java
index 0e4fa64..781a3fc 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsStringTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamAsStringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamEnumTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamEnumTest.java
index e442336..c1169ba 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamEnumTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamEnumTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 import javax.ws.rs.Path;
 import javax.ws.rs.QueryParam;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamFromStringTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamFromStringTest.java
index 6c9f20f..4f1f4d5 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamFromStringTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamFromStringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import javax.ws.rs.Path;
 import javax.ws.rs.QueryParam;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamSetStringConstructorTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamSetStringConstructorTest.java
index f13d264..4da748a 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamSetStringConstructorTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamSetStringConstructorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import javax.ws.rs.Path;
 import javax.ws.rs.QueryParam;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamSortedSetStringConstructorTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamSortedSetStringConstructorTest.java
index 00d6d11..3298f13 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamSortedSetStringConstructorTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamSortedSetStringConstructorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import javax.ws.rs.Path;
 import javax.ws.rs.QueryParam;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamStringConstructorTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamStringConstructorTest.java
index 7865463..70dcdcf 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamStringConstructorTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/QueryParamStringConstructorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 
 import org.glassfish.jersey.server.ContainerResponse;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/UriTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/UriTest.java
index 3877f87..af6586c 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/UriTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/inject/UriTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,11 +32,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.Uri;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/AbstractNanosReservoirTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/AbstractNanosReservoirTest.java
index abdc102..9147d5c 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/AbstractNanosReservoirTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/AbstractNanosReservoirTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,7 +22,7 @@
 import org.glassfish.jersey.server.internal.monitoring.core.TimeReservoir;
 import org.glassfish.jersey.server.internal.monitoring.core.UniformTimeSnapshot;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Stepan Vavra
@@ -65,11 +65,11 @@
                                 final double expectedMean, final long expectedInterval) {
         final UniformTimeSnapshot snapshot = reservoir.getSnapshot(snapshotTime, TimeUnit.NANOSECONDS);
 
-        assertEquals("Total count does not match!", expectedSize, snapshot.size());
-        assertEquals("Min exec time does not match!", expectedMin, snapshot.getMin());
-        assertEquals("Max exec time does not match!", expectedMax, snapshot.getMax());
-        assertEquals("Average exec time does not match!", expectedMean, snapshot.getMean(), DELTA);
-        assertEquals("Expected interval does not match!", expectedInterval, snapshot.getTimeInterval(TimeUnit.NANOSECONDS));
+        assertEquals(expectedSize, snapshot.size(), "Total count does not match!");
+        assertEquals(expectedMin, snapshot.getMin(), "Min exec time does not match!");
+        assertEquals(expectedMax, snapshot.getMax(), "Max exec time does not match!");
+        assertEquals(expectedMean, snapshot.getMean(), DELTA, "Average exec time does not match!");
+        assertEquals(expectedInterval, snapshot.getTimeInterval(TimeUnit.NANOSECONDS), "Expected interval does not match!");
     }
 
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/AggregatingTrimmerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/AggregatingTrimmerTest.java
index 3dd917e..07a735b 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/AggregatingTrimmerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/AggregatingTrimmerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,8 +18,8 @@
 
 import java.util.concurrent.TimeUnit;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Stepan Vavra
@@ -114,12 +114,10 @@
                 for (int startTime = -50; startTime < 50; ++startTime) {
                     for (int i = -50; i < 50; ++i) {
                         long lowerBound = AggregatingTrimmer.lowerBound(i, startTime, chunkSize, power);
-                        Assert.assertTrue("Error occurred for: " + i + " .. lower bound: " + lowerBound + " .. power: " + power
-                                        + " .. startTime: " + startTime,
-                                lowerBound <= i);
-                        Assert.assertTrue("Error occurred for: " + i + " .. lower bound: " + lowerBound + " .. power: " + power
-                                        + " .. startTime: " + startTime,
-                                i < lowerBound + chunkSize);
+                        Assertions.assertTrue(lowerBound <= i, "Error occurred for: " + i + " .. lower bound: "
+                                + lowerBound + " .. power: " + power + " .. startTime: " + startTime);
+                        Assertions.assertTrue(i < lowerBound + chunkSize, "Error occurred for: " + i
+                                + " .. lower bound: " + lowerBound + " .. power: " + power + " .. startTime: " + startTime);
                     }
                 }
             }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/MonitoringStatisticsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/MonitoringStatisticsTest.java
index 54c27c4..4c41281 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/MonitoringStatisticsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/MonitoringStatisticsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,12 +17,10 @@
 package org.glassfish.jersey.server.internal.monitoring;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -41,8 +39,8 @@
 import org.glassfish.jersey.server.monitoring.ResourceMethodStatistics;
 import org.glassfish.jersey.server.monitoring.ResourceStatistics;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Miroslav Fuksa
@@ -108,10 +106,10 @@
         final MonitoringStatisticsImpl stats = getSimpleStats();
         final Set<String> keys = stats.getUriStatistics().keySet();
         final Iterator<String> iterator = keys.iterator();
-        Assert.assertEquals("/hello", iterator.next());
-        Assert.assertEquals("/hello/world", iterator.next());
-        Assert.assertEquals("/test-resource", iterator.next());
-        Assert.assertEquals("/test-resource/child", iterator.next());
+        Assertions.assertEquals("/hello", iterator.next());
+        Assertions.assertEquals("/hello/world", iterator.next());
+        Assertions.assertEquals("/test-resource", iterator.next());
+        Assertions.assertEquals("/test-resource/child", iterator.next());
     }
 
     private MonitoringStatisticsImpl getSimpleStats() {
@@ -145,8 +143,8 @@
         final Set<Class<?>> keys = stats.getResourceClassStatistics().keySet();
         final Iterator<Class<?>> it = keys.iterator();
 
-        Assert.assertEquals(HelloResource.class, it.next());
-        Assert.assertEquals(TestResource.class, it.next());
+        Assertions.assertEquals(HelloResource.class, it.next());
+        Assertions.assertEquals(TestResource.class, it.next());
     }
 
     @Test
@@ -155,9 +153,9 @@
         final Set<Class<?>> keys = stats.getResourceClassStatistics().keySet();
         final Iterator<Class<?>> it = keys.iterator();
 
-        Assert.assertEquals(HelloResource.class, it.next());
-        Assert.assertEquals(MyInflector.class, it.next());
-        Assert.assertEquals(TestResource.class, it.next());
+        Assertions.assertEquals(HelloResource.class, it.next());
+        Assertions.assertEquals(MyInflector.class, it.next());
+        Assertions.assertEquals(TestResource.class, it.next());
     }
 
     @Test
@@ -213,11 +211,11 @@
             final ResourceMethod method = methodStatistics.getResourceMethod();
             final ExecutionStatistics st = methodStatistics.getMethodStatistics();
             if (method.getHttpMethod().equals("GET")) {
-                Assert.assertEquals(20, st.getLastStartTime().getTime());
+                Assertions.assertEquals(20, st.getLastStartTime().getTime());
             } else if (method.getHttpMethod().equals("POST")) {
-                Assert.assertEquals(30, st.getLastStartTime().getTime());
+                Assertions.assertEquals(30, st.getLastStartTime().getTime());
             } else {
-                Assert.fail();
+                Assertions.fail();
             }
         }
     }
@@ -226,8 +224,8 @@
     private void check(Iterator<Map.Entry<String, ResourceStatistics>> it,
                        String expectedUri, int expectedMethods) {
         Map.Entry<String, ResourceStatistics> entry = it.next();
-        Assert.assertEquals(expectedUri, entry.getKey());
-        Assert.assertEquals(expectedMethods, entry.getValue().getResourceMethodStatistics().size());
+        Assertions.assertEquals(expectedUri, entry.getKey());
+        Assertions.assertEquals(expectedMethods, entry.getValue().getResourceMethodStatistics().size());
     }
 
 
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/MonitoringUtilsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/MonitoringUtilsTest.java
index 6d18f0d..322f6d4 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/MonitoringUtilsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/MonitoringUtilsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.server.model.ResourceMethod;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -61,13 +61,13 @@
     @Test
     public void testGetMethodUniqueId() {
         final Resource resource = Resource.builder(MyResource.class).build();
-        Assert.assertEquals("[]|[]|GET|resource|get",
+        Assertions.assertEquals("[]|[]|GET|resource|get",
                 MonitoringUtils.getMethodUniqueId(getMethod(resource, "get")));
-        Assert.assertEquals("[text/html]|[]|GET|resource.sub|subGet",
+        Assertions.assertEquals("[text/html]|[]|GET|resource.sub|subGet",
                 MonitoringUtils.getMethodUniqueId(getMethod(resource, "subGet")));
-        Assert.assertEquals("[text/html]|[]|GET|resource.sub|subGet",
+        Assertions.assertEquals("[text/html]|[]|GET|resource.sub|subGet",
                 MonitoringUtils.getMethodUniqueId(getMethod(resource, "subGet")));
-        Assert.assertEquals("[text/xml]|[text/plain]|POST|resource|post",
+        Assertions.assertEquals("[text/xml]|[text/plain]|POST|resource|post",
                 MonitoringUtils.getMethodUniqueId(getMethod(resource, "post")));
 
     }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/ResponseStatisticsImplTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/ResponseStatisticsImplTest.java
index f983204..58e3943 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/ResponseStatisticsImplTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/ResponseStatisticsImplTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,10 +16,8 @@
 
 package org.glassfish.jersey.server.internal.monitoring;
 
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Response statistics tests.
@@ -35,49 +33,46 @@
         builder.addResponseCode(100);
 
         // test that caching works
-        Assert.assertTrue(builder.build() == builder.build());
+        Assertions.assertTrue(builder.build() == builder.build());
 
         Object original = builder.build();
         builder.addResponseCode(100);
 
-        Assert.assertFalse(original == builder.build());
+        Assertions.assertFalse(original == builder.build());
     }
 
     @Test
     public void testSanity() {
         ResponseStatisticsImpl.Builder builder = new ResponseStatisticsImpl.Builder();
 
-        Assert.assertNull(builder.build().getLastResponseCode());
+        Assertions.assertNull(builder.build().getLastResponseCode());
 
         builder.addResponseCode(100);
 
-        Assert.assertEquals(100, (int) builder.build().getLastResponseCode());
-        Assert.assertEquals(1, (long) builder.build().getResponseCodes().get(100));
+        Assertions.assertEquals(100, (int) builder.build().getLastResponseCode());
+        Assertions.assertEquals(1, (long) builder.build().getResponseCodes().get(100));
 
         builder.addResponseCode(200);
 
-        Assert.assertEquals(200, (int) builder.build().getLastResponseCode());
-        Assert.assertEquals(1, (long) builder.build().getResponseCodes().get(100));
-        Assert.assertEquals(1, (long) builder.build().getResponseCodes().get(200));
+        Assertions.assertEquals(200, (int) builder.build().getLastResponseCode());
+        Assertions.assertEquals(1, (long) builder.build().getResponseCodes().get(100));
+        Assertions.assertEquals(1, (long) builder.build().getResponseCodes().get(200));
 
         builder.addResponseCode(100);
 
-        Assert.assertEquals(100, (int) builder.build().getLastResponseCode());
-        Assert.assertEquals(2, (long) builder.build().getResponseCodes().get(100));
-        Assert.assertEquals(1, (long) builder.build().getResponseCodes().get(200));
+        Assertions.assertEquals(100, (int) builder.build().getLastResponseCode());
+        Assertions.assertEquals(2, (long) builder.build().getResponseCodes().get(100));
+        Assertions.assertEquals(1, (long) builder.build().getResponseCodes().get(200));
     }
 
-    @Rule
-    public final ExpectedException exception = ExpectedException.none();
-
     @Test
     public void testImmutability() {
-        ResponseStatisticsImpl.Builder builder = new ResponseStatisticsImpl.Builder();
+        Assertions.assertThrows(UnsupportedOperationException.class, () -> {
+            ResponseStatisticsImpl.Builder builder = new ResponseStatisticsImpl.Builder();
 
-        builder.addResponseCode(100);
+            builder.addResponseCode(100);
 
-        // modification is not allowed
-        exception.expect(UnsupportedOperationException.class);
-        builder.build().getResponseCodes().put(100, 2L);
+            builder.build().getResponseCodes().put(100, 2L);
+        });
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/SlidingWindowTimeReservoirAggregatingTrimmerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/SlidingWindowTimeReservoirAggregatingTrimmerTest.java
index ebec4db..696b1e8 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/SlidingWindowTimeReservoirAggregatingTrimmerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/SlidingWindowTimeReservoirAggregatingTrimmerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,7 +18,7 @@
 
 import java.util.concurrent.TimeUnit;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests of {@link SlidingWindowTimeReservoir}.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/SlidingWindowTimeReservoirTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/SlidingWindowTimeReservoirTest.java
index fc02ae7..c6f42d7 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/SlidingWindowTimeReservoirTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/SlidingWindowTimeReservoirTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,8 +18,8 @@
 
 import java.util.concurrent.TimeUnit;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests of {@link SlidingWindowTimeReservoir}.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/TimeWindowStatisticsImplTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/TimeWindowStatisticsImplTest.java
index d8f9a8c..c4ac193 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/TimeWindowStatisticsImplTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/monitoring/TimeWindowStatisticsImplTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,13 +18,11 @@
 
 import java.util.concurrent.TimeUnit;
 
-import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.server.internal.monitoring.core.ReservoirConstants;
 import org.glassfish.jersey.server.internal.monitoring.core.UniformTimeReservoir;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests of {@link TimeWindowStatisticsImpl}.
@@ -248,11 +246,11 @@
                        final double requestsPerSecond) {
         final TimeWindowStatisticsImpl stat = builder.build(buildTime);
 
-        assertEquals("Total count does not match!", totalCount, stat.getRequestCount());
-        assertEquals("Min exec time does not match!", minimumExecTime, stat.getMinimumDuration());
-        assertEquals("Max exec time does not match!", maximumExecTime, stat.getMaximumDuration());
-        assertEquals("Average exec time does not match!", average, stat.getAverageDuration());
-        assertEquals("Requests per seconds does not match!", requestsPerSecond, stat.getRequestsPerSecond(), DELTA);
+        assertEquals(totalCount, stat.getRequestCount(), "Total count does not match!");
+        assertEquals(minimumExecTime, stat.getMinimumDuration(), "Min exec time does not match!");
+        assertEquals(maximumExecTime, stat.getMaximumDuration(), "Max exec time does not match!");
+        assertEquals(average, stat.getAverageDuration(), "Average exec time does not match!");
+        assertEquals(requestsPerSecond, stat.getRequestsPerSecond(), DELTA, "Requests per seconds does not match!");
     }
 
     @Test
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/process/ProxyInjectablesTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/process/ProxyInjectablesTest.java
index e4675ba..2f33418 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/process/ProxyInjectablesTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/process/ProxyInjectablesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,9 +39,9 @@
 import org.glassfish.jersey.server.internal.inject.AbstractTest;
 import org.glassfish.jersey.server.internal.routing.UriRoutingContext;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
 /**
  * Test if request scoped injection points are injected without using
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/ExtendedUriInfoTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/ExtendedUriInfoTest.java
index fa065ab..ece29a9 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/ExtendedUriInfoTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/ExtendedUriInfoTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,10 +34,10 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.server.model.RuntimeResource;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * {@link ExtendedUriInfo} unit tests - testing e.g. getting matched resources, mapped throwable, etc.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/ResponseMediaTypeFromProvidersTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/ResponseMediaTypeFromProvidersTest.java
index 4d982aa..049b449 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/ResponseMediaTypeFromProvidersTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/ResponseMediaTypeFromProvidersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,9 +28,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/SubResourceLocatorCachingTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/SubResourceLocatorCachingTest.java
index 6b8e654..3da884d 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/SubResourceLocatorCachingTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/SubResourceLocatorCachingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,10 +34,10 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.server.model.ResourceModel;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test that sub-resource locators (models and routers) are being cached.
@@ -147,7 +147,7 @@
     private CountingModelProcessor processor;
     private ResourceConfig config;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         processor = new CountingModelProcessor();
         config = new ResourceConfig(RootResource.class).register(processor);
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/SubResourceValidationTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/SubResourceValidationTest.java
index a7282c2..3ba5c53 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/SubResourceValidationTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/SubResourceValidationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,9 +27,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * This tests disabling of a sub resource locator validation.
@@ -81,7 +81,7 @@
             final ContainerResponse response = applicationHandler.apply(
                     RequestContextBuilder.from("/root/sub", "GET").build()).get();
             // should throw an exception or return 500
-            Assert.assertEquals(500, response.getStatus());
+            Assertions.assertEquals(500, response.getStatus());
         } catch (Exception e) {
             // ok
         }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/UriRoutingContextTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/UriRoutingContextTest.java
index 598b03f..9466b03 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/UriRoutingContextTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/routing/UriRoutingContextTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,13 +27,13 @@
 
 import org.glassfish.jersey.server.RequestContextBuilder;
 
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Marek Potociar
@@ -43,19 +43,19 @@
     public UriRoutingContextTest() {
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpClass() throws Exception {
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDownClass() throws Exception {
     }
 
-    @Before
+    @BeforeEach
     public void setUp() {
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
     }
 
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/BundleSchemeScannerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/BundleSchemeScannerTest.java
index 5315f69..ae7e072 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/BundleSchemeScannerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/BundleSchemeScannerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,9 +21,9 @@
 
 import org.glassfish.jersey.server.ResourceFinder;
 
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Stepan Vavra
@@ -32,7 +32,7 @@
 
     private ResourceFinder bundleSchemeScanner;
 
-    @Before
+    @BeforeEach
     public void setUpBundleSchemeScanner() throws Exception {
         String canonicalName = getClass().getCanonicalName();
         URI uri = getClass().getClassLoader().getResource(canonicalName.replace('.', '/') + ".class").toURI();
@@ -41,15 +41,17 @@
 
     @Test
     public void hasNextReturnsTrue() throws Exception {
-        Assert.assertTrue(bundleSchemeScanner.hasNext());
+        Assertions.assertTrue(bundleSchemeScanner.hasNext());
     }
 
-    @Test(expected = NoSuchElementException.class)
+    @Test
     public void multipleNextInvocationFails() throws Exception {
-        bundleSchemeScanner.next();
+        Assertions.assertThrows(NoSuchElementException.class, () -> {
+            bundleSchemeScanner.next();
 
-        Assert.assertFalse(bundleSchemeScanner.hasNext());
-        bundleSchemeScanner.next(); // throw NoSuchElementException
+            Assertions.assertFalse(bundleSchemeScanner.hasNext());
+            bundleSchemeScanner.next(); // throw NoSuchElementException
+        });
     }
 
     /**
@@ -59,12 +61,14 @@
      *
      * @throws Exception
      */
-    @Test(expected = NoSuchElementException.class)
+    @Test
     public void openFinishesTheIteration() throws Exception {
-        Assert.assertNotNull(bundleSchemeScanner.open());
-        Assert.assertFalse(bundleSchemeScanner.hasNext());
+        Assertions.assertThrows(NoSuchElementException.class, () -> {
+            Assertions.assertNotNull(bundleSchemeScanner.open());
+            Assertions.assertFalse(bundleSchemeScanner.hasNext());
 
-        bundleSchemeScanner.next(); // throw NoSuchElementException
+            bundleSchemeScanner.next(); // throw NoSuchElementException
+        });
     }
 
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/CompositeResourceFinderTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/CompositeResourceFinderTest.java
index ef817be..d9afad4 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/CompositeResourceFinderTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/CompositeResourceFinderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,9 +22,9 @@
 import org.glassfish.jersey.server.ResourceFinder;
 import org.glassfish.jersey.server.internal.AbstractResourceFinderAdapter;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/JarFileScannerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/JarFileScannerTest.java
index 80f917c..603abca 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/JarFileScannerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/JarFileScannerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,31 +24,23 @@
 import java.util.jar.JarFile;
 import java.util.regex.Pattern;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoint;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Martin Snyder
  */
-@RunWith(Theories.class)
 public class JarFileScannerTest {
 
-    @DataPoint
-    public static final boolean RECURSIVE = true;
-    @DataPoint
-    public static final boolean NON_RECURSIVE = false;
-
     private String jaxRsApiPath;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         final String classPath = System.getProperty("java.class.path");
         final String[] entries = classPath.split(System.getProperty("path.separator"));
@@ -140,19 +132,21 @@
         return scannedEntryCount;
     }
 
-    @Theory
+    @ParameterizedTest
+    @ValueSource(booleans = {true, false})
     public void testClassEnumerationWithNonexistentPackage(final boolean recursive) throws IOException {
         try (final InputStream jaxRsApi = new FileInputStream(this.jaxRsApiPath)) {
             final JarFileScanner jarFileScanner = new JarFileScanner(jaxRsApi, "javax/ws/r", recursive);
-            assertFalse("Unexpectedly found package 'javax.ws.r' in javax.ws.rs-api", jarFileScanner.hasNext());
+            assertFalse(jarFileScanner.hasNext(), "Unexpectedly found package 'javax.ws.r' in javax.ws.rs-api");
         }
     }
 
-    @Theory
+    @ParameterizedTest
+    @ValueSource(booleans = {true, false})
     public void testClassEnumerationWithClassPrefix(final boolean recursive) throws IOException {
         try (final InputStream jaxRsApi = new FileInputStream(this.jaxRsApiPath)) {
             final JarFileScanner jarFileScanner = new JarFileScanner(jaxRsApi, "javax/ws/rs/GE", recursive);
-            assertFalse("Unexpectedly found package 'javax.ws.rs.GE' in javax.ws.rs-api", jarFileScanner.hasNext());
+            assertFalse(jarFileScanner.hasNext(), "Unexpectedly found package 'javax.ws.rs.GE' in javax.ws.rs-api");
         }
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/VFSSchemeResourceFinderTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/VFSSchemeResourceFinderTest.java
index 2c50cd7..493d4bf 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/VFSSchemeResourceFinderTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/VFSSchemeResourceFinderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,11 +30,11 @@
 import org.jboss.vfs.TempFileProvider;
 import org.jboss.vfs.VFS;
 import org.jboss.vfs.VirtualFile;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Martin Snyder
@@ -44,7 +44,7 @@
 
     private String jaxRsApiPath;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         final String classPath = System.getProperty("java.class.path");
         final String[] entries = classPath.split(System.getProperty("path.separator"));
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/sonar/SonarJerseyServerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/sonar/SonarJerseyServerTest.java
index 0c0090d..7595dc7 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/sonar/SonarJerseyServerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/sonar/SonarJerseyServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey.server.internal.sonar;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Stepan Vavra
@@ -26,6 +26,6 @@
 
     @Test
     public void testUnitTest() {
-        Assert.assertEquals("server unit test", new SonarJerseyServer().unitTest());
+        Assertions.assertEquals("server unit test", new SonarJerseyServer().unitTest());
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptAnnotatedReaderWriterTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptAnnotatedReaderWriterTest.java
index 7ac59fb..de42c6a 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptAnnotatedReaderWriterTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptAnnotatedReaderWriterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -45,10 +45,10 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Jakub Podlesak
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptQsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptQsTest.java
index 07e103c..3b28dd3 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptQsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptQsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Jakub Podlesak
@@ -170,35 +170,35 @@
         MediaType bar = MediaType.valueOf("application/bar");
 
         ContainerResponse response = app.apply(RequestContextBuilder.from("/", "GET").accept(foo).build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(foo, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept(bar).build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(bar, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("*/*").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(bar, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/*").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(bar, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/foo;q=0.1", "application/bar").build())
                 .get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(bar, response.getMediaType());
 
         response = app
                 .apply(RequestContextBuilder.from("/", "GET").accept("application/foo;q=0.5", "application/bar;q=0.1").build())
                 .get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(foo, response.getMediaType());
     }
@@ -246,42 +246,42 @@
     private void runTestAcceptSubType(ApplicationHandler app) throws Exception {
 
         ContainerResponse response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("plain", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("image/png, text/plain;q=0.4").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("plain", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain;q=0.5, text/html").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("html", response.getEntity());
         assertEquals(MediaType.TEXT_HTML_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain, text/html;q=0.5").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("plain", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/html;q=0.5").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("html", response.getEntity());
         assertEquals(MediaType.TEXT_HTML_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/*;q=0.5, text/plain;q=0.6").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("plain", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain;q=0.5, text/gaga;q=0.6").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("*", response.getEntity());
         assertEquals(MediaType.valueOf("text/gaga"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/gaga, text/plain").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("plain", response.getEntity());
         assertEquals(MediaType.valueOf("text/plain"), response.getMediaType());
     }
@@ -329,52 +329,52 @@
     private void runTestAcceptSubTypeNotIntuitive(ApplicationHandler app) throws Exception {
 
         ContainerResponse response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("*", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("image/png, text/plain").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("*", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain;q=0.5, text/html").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("*", response.getEntity());
         assertEquals(MediaType.TEXT_HTML_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain, text/html;q=0.5").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("*", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/html;q=0.5").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("*", response.getEntity());
         assertEquals(MediaType.TEXT_HTML_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/*;q=0.5, text/plain;q=0.6").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("*", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain;q=0.5, text/gaga;q=0.6").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("*", response.getEntity());
         assertEquals(MediaType.valueOf("text/gaga"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/gaga, text/plain").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("*", response.getEntity());
         assertEquals(MediaType.valueOf("text/gaga"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/*").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("plain", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/*;q=0.5, text/html;q=0.1").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("plain", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
     }
@@ -408,12 +408,12 @@
         // media type order in the accept header does not impose output media type!
         ContainerResponse response = app
                 .apply(RequestContextBuilder.from("/", "GET").accept("image/png, text/plain;q=0.9").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.valueOf("image/png"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain;q=0.5, text/html").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.TEXT_HTML_TYPE, response.getMediaType());
     }
@@ -512,24 +512,24 @@
     private void runTestFooBar(ApplicationHandler app, String fooContent, String barContent) throws Exception {
 
         ContainerResponse response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/foo").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals(fooContent, response.getEntity());
         assertEquals(MediaType.valueOf("application/foo"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/bar").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals(barContent, response.getEntity());
         assertEquals(MediaType.valueOf("application/bar"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/foo", "application/bar;q=0.5").build())
                 .get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals(fooContent, response.getEntity());
         assertEquals(MediaType.valueOf("application/foo"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/bar", "application/foo;q=0.5").build())
                 .get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals(barContent, response.getEntity());
         assertEquals(MediaType.valueOf("application/bar"), response.getMediaType());
     }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptTest.java
index 63f36a8..3b29041 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,9 +27,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Taken from Jersey 1: jersey-tests:com.sun.jersey.impl.resource.AcceptTest.java
@@ -105,7 +105,7 @@
         ContainerResponse response = app
                 .apply(RequestContextBuilder.from("/", "GET").accept("application/wildcard", "application/foo;q=0.6",
                         "application/bar;q=0.4", "application/baz;q=0.2").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
 
         String s = (String) response.getEntity();
         assertEquals("wildcard", s);
@@ -147,35 +147,35 @@
         MediaType bar = MediaType.valueOf("application/bar");
 
         ContainerResponse response = app.apply(RequestContextBuilder.from("/", "GET").accept(foo).build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(foo, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept(bar).build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(bar, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("*/*").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(foo, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/*").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(foo, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/foo;q=0.1", "application/bar").build())
                 .get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(bar, response.getMediaType());
 
         response = app
                 .apply(RequestContextBuilder.from("/", "GET").accept("application/foo;q=0.5", "application/bar;q=0.1").build())
                 .get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(foo, response.getMediaType());
     }
@@ -189,7 +189,7 @@
         ContainerResponse response;
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("*/*").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(foo, response.getMediaType());
     }
@@ -209,22 +209,22 @@
         ApplicationHandler app = createApplication(SubTypeResource.class);
 
         ContainerResponse response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("image/png, text/plain").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain;q=0.5, text/html").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.TEXT_HTML_TYPE, response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain;q=0.5").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.TEXT_PLAIN_TYPE, response.getMediaType());
     }
@@ -245,12 +245,12 @@
         // media type order in the accept header does not impose output media type!
         ContainerResponse response = app
                 .apply(RequestContextBuilder.from("/", "GET").accept("image/png, text/plain;q=0.9").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.valueOf("image/png"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("text/plain;q=0.5, text/html").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.TEXT_HTML_TYPE, response.getMediaType());
     }
@@ -316,22 +316,22 @@
         ApplicationHandler app = createApplication(c);
 
         ContainerResponse response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/foo").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.valueOf("application/foo"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/bar").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.valueOf("application/bar"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/foo", "application/bar").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.valueOf("application/foo"), response.getMediaType());
 
         response = app.apply(RequestContextBuilder.from("/", "GET").accept("application/bar", "application/foo").build()).get();
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("GET", response.getEntity());
         assertEquals(MediaType.valueOf("application/bar"), response.getMediaType());
     }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptWriterTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptWriterTest.java
index 5cb18b9..b9f4da7 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptWriterTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/AcceptWriterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,8 +37,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey 1: jersey-tests:com.sun.jersey.impl.resource.AcceptWriterTest.java
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/AmbiguousTemplateTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/AmbiguousTemplateTest.java
index 1d50e45..3df2196 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/AmbiguousTemplateTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/AmbiguousTemplateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,11 +33,11 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.hasItems;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test matching of resources with ambiguous templates.
@@ -95,8 +95,8 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(new ResourceConfig(ResourceABC.class,
                 ResourceXYZ.class));
         final ContainerResponse response = applicationHandler.apply(RequestContextBuilder.from("/uuu/a", "GET").build()).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("a-abc:uuu", response.getEntity());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("a-abc:uuu", response.getEntity());
     }
 
     @Test
@@ -104,8 +104,8 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(new ResourceConfig(ResourceABC.class,
                 ResourceXYZ.class));
         final ContainerResponse response = applicationHandler.apply(RequestContextBuilder.from("/test/x", "GET").build()).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("x-xyz:test", response.getEntity());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("x-xyz:test", response.getEntity());
     }
 
     @Test
@@ -113,8 +113,8 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(new ResourceConfig(ResourceABC.class,
                 ResourceXYZ.class));
         final ContainerResponse response = applicationHandler.apply(RequestContextBuilder.from("/uuu", "GET").build()).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("abc:uuu", response.getEntity());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("abc:uuu", response.getEntity());
     }
 
     @Test
@@ -123,8 +123,8 @@
                 ResourceXYZ.class));
         final ContainerResponse response = applicationHandler.apply(RequestContextBuilder.from("/post", "POST")
                 .entity("entity").build()).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("xyz:post", response.getEntity());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("xyz:post", response.getEntity());
     }
 
     @Test
@@ -132,8 +132,8 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(new ResourceConfig(ResourceABC.class,
                 ResourceXYZ.class));
         final ContainerResponse response = applicationHandler.apply(RequestContextBuilder.from("/xxx/foo", "GET").build()).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("subx-xyz:xxx:foo", response.getEntity());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("subx-xyz:xxx:foo", response.getEntity());
     }
 
     @Path("locator")
@@ -155,7 +155,7 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(new ResourceConfig(SimpleLocator.class));
         final ContainerResponse response = applicationHandler.apply(RequestContextBuilder.from("/locator/abc/uuu/a", "GET")
                 .build()).get();
-        Assert.assertEquals(404, response.getStatus());
+        Assertions.assertEquals(404, response.getStatus());
     }
 
     @Test
@@ -163,8 +163,8 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(new ResourceConfig(SimpleLocator.class));
         final ContainerResponse response = applicationHandler.apply(RequestContextBuilder.from("/locator/abc/a", "GET")
                 .build()).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("a-abc:null", response.getEntity());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("a-abc:null", response.getEntity());
     }
 
     @Test
@@ -172,8 +172,8 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(new ResourceConfig(SimpleLocator.class));
         final ContainerResponse response = applicationHandler.apply(RequestContextBuilder.from("/locator/xyz/subxfoo", "GET")
                 .build()).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("subx-xyz:null:subxfoo", response.getEntity());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("subx-xyz:null:subxfoo", response.getEntity());
     }
 
     @Path("{xyz}")
@@ -211,16 +211,16 @@
     public void testSubResourceLocatorWithPathParams() throws ExecutionException, InterruptedException {
         final ApplicationHandler applicationHandler = new ApplicationHandler(new ResourceConfig(ResourceWithLocator.class));
         final ContainerResponse response = applicationHandler.apply(RequestContextBuilder.from("/uuu", "GET").build()).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("uuu", response.getEntity());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("uuu", response.getEntity());
     }
 
     @Test
     public void testSubResourceLocatorWithPathParams2() throws ExecutionException, InterruptedException {
         final ApplicationHandler applicationHandler = new ApplicationHandler(new ResourceConfig(ResourceWithLocator.class));
         final ContainerResponse response = applicationHandler.apply(RequestContextBuilder.from("/uuu/test", "GET").build()).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("uuu:test", response.getEntity());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("uuu:test", response.getEntity());
     }
 
     @Path("{templateA}")
@@ -263,7 +263,7 @@
         ApplicationHandler app = new ApplicationHandler(resourceConfig);
         final ContainerResponse containerResponse = app.apply(RequestContextBuilder.from("/aaa", "OPTIONS")
                 .accept(MediaType.TEXT_PLAIN).build()).get();
-        Assert.assertEquals(200, containerResponse.getStatus());
+        Assertions.assertEquals(200, containerResponse.getStatus());
 
         final List<String> methods = Arrays.asList(containerResponse.getEntity().toString().split(", "));
         assertThat(methods, hasItems("POST", "GET", "OPTIONS", "HEAD"));
@@ -277,8 +277,8 @@
         ApplicationHandler app = new ApplicationHandler(resourceConfig);
         final ContainerResponse containerResponse = app.apply(RequestContextBuilder.from("/aaa", "GET")
                 .accept(MediaType.TEXT_PLAIN).build()).get();
-        Assert.assertEquals(200, containerResponse.getStatus());
-        Assert.assertEquals("getA", containerResponse.getEntity());
+        Assertions.assertEquals(200, containerResponse.getStatus());
+        Assertions.assertEquals("getA", containerResponse.getEntity());
     }
 
     @Test
@@ -287,7 +287,7 @@
         ApplicationHandler app = new ApplicationHandler(resourceConfig);
         final ContainerResponse containerResponse = app.apply(RequestContextBuilder.from("/resq/c", "OPTIONS")
                 .accept(MediaType.TEXT_PLAIN).build()).get();
-        Assert.assertEquals(200, containerResponse.getStatus());
+        Assertions.assertEquals(200, containerResponse.getStatus());
 
         final List<String> methods = Arrays.asList(containerResponse.getEntity().toString().split(", "));
         assertThat(methods, hasItems("PUT", "GET", "OPTIONS", "HEAD"));
@@ -300,7 +300,7 @@
         ResourceConfig resourceConfig = new ResourceConfig(ResourceA.class, ResourceB.class, ResourceQ.class);
         ApplicationHandler app = new ApplicationHandler(resourceConfig);
         final ContainerResponse containerResponse = app.apply(RequestContextBuilder.from("/resq/a", "GET").build()).get();
-        Assert.assertEquals(200, containerResponse.getStatus());
-        Assert.assertEquals("getA", containerResponse.getEntity());
+        Assertions.assertEquals(200, containerResponse.getStatus());
+        Assertions.assertEquals("getA", containerResponse.getEntity());
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/AncestorsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/AncestorsTest.java
index 92d6b4b..e9b11df 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/AncestorsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/AncestorsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey-1: jersey-tests:com.sun.jersey.impl.subresources.AncestorsTest
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/AsyncContentAndEntityTypeTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/AsyncContentAndEntityTypeTest.java
index cdb11f8..3520c38 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/AsyncContentAndEntityTypeTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/AsyncContentAndEntityTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,9 +37,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test of fix for issues JERSEY-1088 and JERSEY-1089.
@@ -91,7 +91,7 @@
             response = responseFuture.get();
         }
 
-        assertTrue("Status: " + response.getStatus(), response.getStatus() < 300);
+        assertTrue(response.getStatus() < 300, "Status: " + response.getStatus());
         assertEquals("Foo", response.getEntity());
         assertEquals(foo, response.getMediaType());
 
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ConstrainedToServerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ConstrainedToServerTest.java
index 676d091..7765045 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ConstrainedToServerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ConstrainedToServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -47,9 +47,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Tests whether providers are correctly validated in the server runtime (for example if provider constrained to
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ConsumeProduceSimpleTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ConsumeProduceSimpleTest.java
index a67be6c..e7ebb5a 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ConsumeProduceSimpleTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ConsumeProduceSimpleTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,8 +31,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey 1: jersey-tests:com.sun.jersey.impl.resource.ConsumeProduceSimpleTest.java
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ConsumeProduceWildcardTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ConsumeProduceWildcardTest.java
index ced90e5..5d6777d 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ConsumeProduceWildcardTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ConsumeProduceWildcardTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey 1: jersey-tests:com.sun.jersey.impl.resource.ConsumeProduceWildcardTest.java
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/DynamicFeatureTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/DynamicFeatureTest.java
index 5f70aa7..2104b90 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/DynamicFeatureTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/DynamicFeatureTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -53,12 +53,12 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Assume;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.Test;
+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.fail;
 
 /**
  * Tests cases of {@code DynamicFeature} implementation.
@@ -293,7 +293,7 @@
 
     @Test
     public void testInjectedConfigurable() throws Exception {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
 
         final ResourceConfig resourceConfig = getTestResourceConfig(InjectConfigurableDynamicFeature.class);
         resourceConfig.property("hello", "world");
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/GenericMethodListTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/GenericMethodListTest.java
index 9a23891..3661ab5 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/GenericMethodListTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/GenericMethodListTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import javax.ws.rs.POST;
 import javax.ws.rs.core.Context;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Paul Sandoz
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/HeadSubResourceMethodTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/HeadSubResourceMethodTest.java
index f619b1f..83e40e5 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/HeadSubResourceMethodTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/HeadSubResourceMethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,9 +28,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 /**
  * @author Paul Sandoz
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/HeadTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/HeadTest.java
index c91ba14..69b99c9 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/HeadTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/HeadTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,13 +36,13 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * @author Paul Sandoz
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/InnerClassWithGenericTypeTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/InnerClassWithGenericTypeTest.java
index 2596011..d2229de 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/InnerClassWithGenericTypeTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/InnerClassWithGenericTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey-1: jersey-tests:com.sun.jersey.impl.subresources.InnerClassWithGenericTypeTest
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/MethodListTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/MethodListTest.java
index 5934f4a..b618c59 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/MethodListTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/MethodListTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,14 +16,14 @@
 
 package org.glassfish.jersey.server.model;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Paul Sandoz
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/MixedResourceConfigurationTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/MixedResourceConfigurationTest.java
index db385d2..9593a1a 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/MixedResourceConfigurationTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/MixedResourceConfigurationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test of mixed (programmatic and annotation-based) resource configuration.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/OptionsSubResourceMethodTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/OptionsSubResourceMethodTest.java
index 8bd12d8..de44237 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/OptionsSubResourceMethodTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/OptionsSubResourceMethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,10 +36,10 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Paul Sandoz
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/OptionsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/OptionsTest.java
index 1fca50b..e6a304c 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/OptionsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/OptionsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,10 +46,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import com.sun.research.ws.wadl.Application;
 
@@ -194,9 +194,9 @@
         ApplicationHandler application = new ApplicationHandler(new ResourceConfig(WadlResource.class));
         final ContainerRequest request = RequestContextBuilder.from("/resource", "OPTIONS").build();
         final ContainerResponse response = application.apply(request).get();
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
         final MediaType type = response.getMediaType();
-        Assert.assertTrue(type.equals(MediaTypes.WADL_TYPE) || type.equals(MediaType.TEXT_HTML_TYPE)
+        Assertions.assertTrue(type.equals(MediaTypes.WADL_TYPE) || type.equals(MediaType.TEXT_HTML_TYPE)
                 || type.equals(MediaType.TEXT_PLAIN));
 
     }
@@ -206,7 +206,7 @@
         ApplicationHandler application = new ApplicationHandler(new ResourceConfig(WadlResource.class, ResponseTextFilter.class));
         final ContainerResponse response = testOptions(MediaType.TEXT_PLAIN_TYPE, application, "/resource");
         final String entity = (String) response.getEntity();
-        Assert.assertTrue(entity.contains("GET"));
+        Assertions.assertTrue(entity.contains("GET"));
     }
 
     @Test
@@ -214,7 +214,7 @@
         ApplicationHandler application = new ApplicationHandler(new ResourceConfig(WadlResource.class, ResponseHtmlFilter.class));
         final MediaType requestType = MediaType.TEXT_HTML_TYPE;
         final ContainerResponse response = testOptions(requestType, application, "/resource");
-        Assert.assertTrue(response.getAllowedMethods().contains("GET"));
+        Assertions.assertTrue(response.getAllowedMethods().contains("GET"));
     }
 
     @Test
@@ -229,7 +229,7 @@
         @Override
         public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
             final MediaType type = responseContext.getMediaType();
-            Assert.assertEquals(MediaType.TEXT_PLAIN_TYPE, type);
+            Assertions.assertEquals(MediaType.TEXT_PLAIN_TYPE, type);
 
         }
     }
@@ -239,7 +239,7 @@
         @Override
         public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
             final MediaType type = responseContext.getMediaType();
-            Assert.assertEquals(MediaType.TEXT_HTML_TYPE, type);
+            Assertions.assertEquals(MediaType.TEXT_HTML_TYPE, type);
 
         }
     }
@@ -249,7 +249,7 @@
         @Override
         public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
             final MediaType type = responseContext.getMediaType();
-            Assert.assertEquals(MediaTypes.WADL_TYPE, type);
+            Assertions.assertEquals(MediaTypes.WADL_TYPE, type);
             responseContext.getEntity().getClass().equals(Application.class);
 
         }
@@ -276,7 +276,7 @@
         ApplicationHandler application = new ApplicationHandler(new ResourceConfig(ResourceWithoutGetMethod.class));
         final ContainerResponse response = testOptions(MediaType.TEXT_PLAIN_TYPE, application, "/no-get");
 
-        Assert.assertFalse(((String) response.getEntity()).contains("HEAD"));
+        Assertions.assertFalse(((String) response.getEntity()).contains("HEAD"));
     }
 
     @Test
@@ -288,11 +288,11 @@
         final ContainerRequest request = RequestContextBuilder.from("/no-get", "OPTIONS").accept(MediaType.MEDIA_TYPE_WILDCARD)
                 .build();
         final ContainerResponse response = application.apply(request).get();
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
 
         final List<String> strings = response.getStringHeaders().get(HttpHeaders.ALLOW);
         for (String allow : strings) {
-            Assert.assertFalse(allow.contains("HEAD"));
+            Assertions.assertFalse(allow.contains("HEAD"));
         }
     }
 
@@ -301,9 +301,9 @@
         final ContainerRequest request = RequestContextBuilder.from(path, "OPTIONS").accept(requestType)
                 .build();
         final ContainerResponse response = application.apply(request).get();
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
         final MediaType type = response.getMediaType();
-        Assert.assertEquals(requestType, type);
+        Assertions.assertEquals(requestType, type);
         return response;
     }
 
@@ -312,6 +312,6 @@
         ApplicationHandler application = new ApplicationHandler(new ResourceConfig(ResourceWithoutGetMethod.class));
         final MediaType requestType = MediaType.TEXT_PLAIN_TYPE;
         final ContainerResponse response = testOptions(requestType, application, "/no-get/sub");
-        Assert.assertFalse(((String) response.getEntity()).contains("HEAD"));
+        Assertions.assertFalse(((String) response.getEntity()).contains("HEAD"));
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ParameterTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ParameterTest.java
index bf895fe..5b01dc6 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ParameterTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ParameterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,10 +22,10 @@
 import java.lang.reflect.Method;
 import java.util.List;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
 /**
  * Parameter model creation test.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ParameterWithMultipleAnnotationsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ParameterWithMultipleAnnotationsTest.java
index a8b1adf..d567e47 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ParameterWithMultipleAnnotationsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ParameterWithMultipleAnnotationsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 
 import javax.ws.rs.PathParam;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Checks that Parameters work fine with multiple annotations.
@@ -47,9 +47,9 @@
         assertEquals(1, parameters.size());
 
         final Parameter parameter = parameters.get(0);
-        assertEquals(methodName, String.class, parameter.getRawType());
-        assertEquals(methodName, String.class, parameter.getType());
-        assertEquals(methodName, "correct", parameter.getSourceName());
+        assertEquals(String.class, parameter.getRawType(), methodName);
+        assertEquals(String.class, parameter.getType(), methodName);
+        assertEquals("correct", parameter.getSourceName(), methodName);
     }
 
     @Target({java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.METHOD,
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/PathAndResourceMethodErrorsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/PathAndResourceMethodErrorsTest.java
index 01420f3..d82ba0b 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/PathAndResourceMethodErrorsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/PathAndResourceMethodErrorsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,10 +29,10 @@
 import org.glassfish.jersey.server.ApplicationHandler;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Taken from Jersey 1: jersey-tests: com.sun.jersey.impl.errors.PathAndResourceMethodErrorsTest
@@ -71,7 +71,7 @@
     }
 
     // FIXME
-    @Ignore
+    @Disabled
     @Test
     public void testPathErrors() {
         List<ResourceModelIssue> issues = initiateWebApplication(PathErrorsResource.class);
@@ -92,7 +92,7 @@
     }
 
     @Test
-    @Ignore
+    @Disabled
     // TODO add cross-resource validation & un-ignore the test
     public void testConflictingRootResourceErrors() {
         ResourceConfig resourceConfig = new ResourceConfig(
@@ -105,7 +105,7 @@
     }
 
     @Test
-    @Ignore
+    @Disabled
     // TODO add cross-resource validation & un-ignore the test
     public void testConflictingRootResourceErrors2() {
         ResourceConfig resourceConfig = new ResourceConfig();
@@ -397,7 +397,7 @@
     }
 
     // FIXME: trailing slashes should not matter
-    @Ignore
+    @Disabled
     @Test
     public void testAmbiguousSubResourceLocatorsWithSlashResource() {
         final List<ResourceModelIssue> issues = initiateWebApplication(AmbiguousSubResourceLocatorsWithSlashResource.class);
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ProgrammaticResourceMethodsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ProgrammaticResourceMethodsTest.java
index f8a539d..3b4e852 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ProgrammaticResourceMethodsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ProgrammaticResourceMethodsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 
 /**
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/RMBuilderTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/RMBuilderTest.java
index 70c8eed..e41bd1f 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/RMBuilderTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/RMBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Runtime model builder test.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceInfoTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceInfoTest.java
index 24716df..9116356 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceInfoTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceInfoTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,9 +36,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Test cases for injected {@link ResourceInfo} in filters.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceModelTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceModelTest.java
index 24713e8..d717d97 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceModelTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceModelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,10 +27,10 @@
 
 import org.glassfish.jersey.uri.internal.UriTemplateParser;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test {@link ResourceModel} and {@link RuntimeResourceModel}.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceNotFoundTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceNotFoundTest.java
index ddc2dcb..7ba201a 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceNotFoundTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceNotFoundTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,8 +31,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * test for JERSEY-938
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ResourcePathOverrideTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ResourcePathOverrideTest.java
index ee3ccc7..3b359f1 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ResourcePathOverrideTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ResourcePathOverrideTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test of resource path overriding via programmatic API.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceTestUtils.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceTestUtils.java
index 10e130d..7ba753b 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceTestUtils.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ResourceTestUtils.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,8 +18,8 @@
 
 import java.util.List;
 
-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;
 
 /**
  * Utils for {@link Resource resource} testing.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceClassDynamicTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceClassDynamicTest.java
index 228f4c5..ecb7e3d 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceClassDynamicTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceClassDynamicTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey-1: jersey-tests:com.sun.jersey.impl.subresources.SubResourceClassDynamicTest
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicTest.java
index 3500035..87dd25e 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey-1: jersey-tests:com.sun.jersey.impl.subresources.SubResourceDynamicTest
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicWithDuplicateTemplateNamesTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicWithDuplicateTemplateNamesTest.java
index 492be69..60f3c5b 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicWithDuplicateTemplateNamesTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicWithDuplicateTemplateNamesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey-1: jersey-tests:com.sun.jersey.impl.subresources.SubResourceDynamicWithDuplicateTemplateNamesTest
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicWithParametersTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicWithParametersTest.java
index 4d68d36..cb5a400 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicWithParametersTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceDynamicWithParametersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey-1: jersey-tests:com.sun.jersey.impl.subresources.SubResourceDynamicWithParametersTest
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceHttpMethodsTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceHttpMethodsTest.java
index 53910bc..41dc0d6 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceHttpMethodsTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceHttpMethodsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey-1: jersey-tests:com.sun.jersey.impl.subresources.SubResourceHttpMethodsTest
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceNullTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceNullTest.java
index 724511c..1f4dc4e 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceNullTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceNullTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Taken from Jersey-1: jersey-tests:com.sun.jersey.impl.subresources.SubResourceNullTest
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceProgrammaticTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceProgrammaticTest.java
index c26dfbe..48ce882 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceProgrammaticTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/SubResourceProgrammaticTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,9 +32,9 @@
 import org.glassfish.jersey.server.RequestContextBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test sub resource locators returning {@link Resource programmatic resources}.
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/ValidatorTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/ValidatorTest.java
index 5b7a801..42bdb0b 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/ValidatorTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/ValidatorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -68,12 +68,12 @@
 import org.glassfish.jersey.server.internal.inject.ValueParamProviderConfigurator;
 import org.glassfish.jersey.server.model.internal.ModelErrors;
 
-import org.junit.Ignore;
-import org.junit.Test;
-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 org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * Taken from Jersey 1: jersey-server:com.sun.jersey.server.impl.modelapi.validation.ResourceModelValidatorTest.java
@@ -374,7 +374,7 @@
     }
 
     @Test
-    @Ignore("Multiple entity validation not implemented yet.")
+    @Disabled("Multiple entity validation not implemented yet.")
     // TODO implement validation
     public void suspendedTestMoreThanOneEntity() throws Exception {
         LOGGER.info("An issue should be reported if a resource method takes more than one entity params:");
@@ -1013,7 +1013,7 @@
     }
 
     @Test
-    @Ignore
+    @Disabled
     // TODO: need to add validation to detect ambiguous problems of ResourceSubPathRoot and two other resources.
     public void testTwoOverlappingSubResourceValidation() throws Exception {
         List<ResourceModelIssue> issues = testResourceValidation(ResourceRoot.class, ResourceSubPathRoot.class);
@@ -1022,7 +1022,7 @@
     }
 
     @Test
-    @Ignore
+    @Disabled
     public void testTwoOverlappingResourceValidation() throws Exception {
         List<ResourceModelIssue> issues = testResourceValidation(ResourceRoot.class, ResourceRootNotUnique.class);
         assertEquals(1, issues.size());
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ChildResourceTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ChildResourceTest.java
index 3b0a1dc..c6839e7 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ChildResourceTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ChildResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.uri.PathPattern;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Miroslav Fuksa
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ModelHelperTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ModelHelperTest.java
index b572aff..a0e896c 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ModelHelperTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ModelHelperTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import javax.ws.rs.Path;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Constantino Cronemberger (ccronemberger at yahoo.com.br)
@@ -33,16 +33,16 @@
     @Test
     public void testClass() {
         final Class cls = ModelHelper.getAnnotatedResourceClass(MyAnnotatedClass.class);
-        Assert.assertSame(MyAnnotatedClass.class, cls);
+        Assertions.assertSame(MyAnnotatedClass.class, cls);
     }
 
     @Test
     public void testSubClass() {
         // Spring with CGLIB proxies creates sub-classes
         final Object obj = new MyAnnotatedClass() {};
-        Assert.assertNotSame(MyAnnotatedClass.class, obj.getClass());
+        Assertions.assertNotSame(MyAnnotatedClass.class, obj.getClass());
         final Class cls = ModelHelper.getAnnotatedResourceClass(obj.getClass());
-        Assert.assertSame(MyAnnotatedClass.class, cls);
+        Assertions.assertSame(MyAnnotatedClass.class, cls);
     }
 
     @Test
@@ -56,7 +56,7 @@
                     }
                 });
         final Class cls = ModelHelper.getAnnotatedResourceClass(obj.getClass());
-        Assert.assertSame(MyServiceInterface.class, cls);
+        Assertions.assertSame(MyServiceInterface.class, cls);
     }
 
     @Path("test")
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ResourceMethodDispatcherFactoryTest.java b/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ResourceMethodDispatcherFactoryTest.java
index bb0edd5..b307ae3 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ResourceMethodDispatcherFactoryTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/model/internal/ResourceMethodDispatcherFactoryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,9 +32,9 @@
 import org.glassfish.jersey.server.model.ResourceModelComponent;
 import org.glassfish.jersey.server.spi.internal.ResourceMethodDispatcher;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * @author Jakub Podlesak
@@ -44,7 +44,7 @@
     private ResourceMethodDispatcherFactory rmdf;
     private ResourceMethodInvocationHandlerFactory rmihf;
 
-    @Before
+    @BeforeEach
     public void setupApplication() {
         TestInjectionManagerFactory.BootstrapResult result = TestInjectionManagerFactory.createInjectionManager();
 
@@ -73,8 +73,8 @@
         for (ResourceModelComponent component : rb.build().getComponents()) {
             if (component instanceof ResourceMethod) {
                 Invocable invocable = ((ResourceMethod) component).getInvocable();
-                assertNotNull("No dispatcher found for invocable " + invocable.toString(),
-                        rmdf.create(invocable, rmihf.create(invocable), null));
+                assertNotNull(rmdf.create(invocable, rmihf.create(invocable), null),
+                        "No dispatcher found for invocable " + invocable.toString());
             }
         }
 
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/modelapi/annotation/IntrospectionModellerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/modelapi/annotation/IntrospectionModellerTest.java
index bd929dc..c5f4f01 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/modelapi/annotation/IntrospectionModellerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/modelapi/annotation/IntrospectionModellerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,9 +38,9 @@
 import org.glassfish.jersey.server.model.ResourceMethod;
 
 import org.hamcrest.Matchers;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.api.Test;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Jakub Podlesak
@@ -132,38 +132,38 @@
 
         result = Resource.builder(resourceClass).build();
         resourceMethods = result.getResourceMethods();
-        assertEquals("Unexpected number of resource methods in the resource model.", 2, resourceMethods.size());
+        assertEquals(2, resourceMethods.size(), "Unexpected number of resource methods in the resource model.");
 
         resourceMethod = find(resourceMethods, "postA");
-        assertEquals("Unexpected number of produced media types in the resource method model",
-                3, resourceMethod.getProducedTypes().size());
-        assertEquals("Unexpected number of consumed media types in the resource method model",
-                2, resourceMethod.getConsumedTypes().size());
-        assertEquals("Unexpected number of handler parameters",
-                0, resourceMethod.getInvocable().getHandler().getParameters().size());
+        assertEquals(3, resourceMethod.getProducedTypes().size(),
+                "Unexpected number of produced media types in the resource method model");
+        assertEquals(2, resourceMethod.getConsumedTypes().size(),
+                "Unexpected number of consumed media types in the resource method model");
+        assertEquals(0, resourceMethod.getInvocable().getHandler().getParameters().size(),
+                "Unexpected number of handler parameters");
 
         resourceMethod = find(resourceMethods, "postB");
-        assertEquals("Unexpected number of inherited produced media types in the resource method model",
-                2, resourceMethod.getProducedTypes().size());
-        assertEquals("Unexpected number of inherited consumed media types in the resource method model",
-                3, resourceMethod.getConsumedTypes().size());
-        assertEquals("Unexpected number of handler parameters",
-                0, resourceMethod.getInvocable().getHandler().getParameters().size());
+        assertEquals(2, resourceMethod.getProducedTypes().size(),
+                "Unexpected number of inherited produced media types in the resource method model");
+        assertEquals(3, resourceMethod.getConsumedTypes().size(),
+                "Unexpected number of inherited consumed media types in the resource method model");
+        assertEquals(0, resourceMethod.getInvocable().getHandler().getParameters().size(),
+                "Unexpected number of handler parameters");
 
         // OtherResource
         resourceClass = OtherResource.class;
 
         result = Resource.builder(resourceClass).build();
         resourceMethods = result.getResourceMethods();
-        assertEquals("Unexpected number of resource methods in the resource model.", 2, resourceMethods.size());
+        assertEquals(2, resourceMethods.size(), "Unexpected number of resource methods in the resource model.");
 
         resourceMethod = find(resourceMethods, "get");
-        assertEquals("Unexpected number of produced media types in the resource method model",
-                0, resourceMethod.getProducedTypes().size());
-        assertEquals("Unexpected number of consumed media types in the resource method model",
-                0, resourceMethod.getConsumedTypes().size());
-        assertEquals("Unexpected number of handler parameters",
-                5, resourceMethod.getInvocable().getHandler().getParameters().size());
+        assertEquals(0, resourceMethod.getProducedTypes().size(),
+                "Unexpected number of produced media types in the resource method model");
+        assertEquals(0, resourceMethod.getConsumedTypes().size(),
+                "Unexpected number of consumed media types in the resource method model");
+        assertEquals(5, resourceMethod.getInvocable().getHandler().getParameters().size(),
+                "Unexpected number of handler parameters");
         assertSources(resourceMethod.getInvocable().getHandler().getParameters(),
                 Parameter.Source.CONTEXT,
                 Parameter.Source.PATH,
@@ -172,12 +172,12 @@
                 Parameter.Source.UNKNOWN);  // @Inject on setter
 
         resourceMethod = find(resourceMethods, "post");
-        assertEquals("Unexpected number of inherited produced media types in the resource method model",
-                0, resourceMethod.getProducedTypes().size());
-        assertEquals("Unexpected number of inherited consumed media types in the resource method model",
-                0, resourceMethod.getConsumedTypes().size());
-        assertEquals("Unexpected number of handler parameters",
-                5, resourceMethod.getInvocable().getHandler().getParameters().size());
+        assertEquals(0, resourceMethod.getProducedTypes().size(),
+                "Unexpected number of inherited produced media types in the resource method model");
+        assertEquals(0, resourceMethod.getConsumedTypes().size(),
+                "Unexpected number of inherited consumed media types in the resource method model");
+        assertEquals(5, resourceMethod.getInvocable().getHandler().getParameters().size(),
+                "Unexpected number of handler parameters");
         assertSources(resourceMethod.getInvocable().getHandler().getParameters(),
                 Parameter.Source.CONTEXT,
                 Parameter.Source.PATH,
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/monitoring/MonitoringFeatureTest.java b/core-server/src/test/java/org/glassfish/jersey/server/monitoring/MonitoringFeatureTest.java
index e882ce8..b8ba55c 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/monitoring/MonitoringFeatureTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/monitoring/MonitoringFeatureTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.server.internal.monitoring.MonitoringFeature;
 import org.glassfish.jersey.server.internal.monitoring.jmx.MBeanExposer;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test of registration of {@link MonitoringFeature}.
@@ -41,9 +41,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertTrue(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertTrue(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -54,9 +54,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertFalse(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertFalse(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertFalse(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertFalse(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -67,9 +67,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertFalse(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertFalse(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -79,9 +79,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertTrue(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertTrue(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -92,9 +92,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertFalse(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertFalse(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -104,9 +104,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertTrue(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertTrue(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -116,9 +116,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertFalse(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertFalse(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertFalse(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertFalse(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
 
@@ -131,9 +131,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertTrue(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertTrue(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertTrue(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertTrue(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -146,9 +146,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertTrue(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertTrue(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -162,9 +162,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertFalse(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertFalse(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -177,9 +177,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertFalse(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertFalse(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -190,9 +190,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertFalse(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertFalse(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertFalse(config.isRegistered(MBeanExposer.class));
+        Assertions.assertFalse(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertFalse(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertFalse(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -203,9 +203,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertTrue(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertTrue(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertTrue(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertTrue(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -219,9 +219,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertTrue(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertTrue(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertTrue(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertTrue(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -231,9 +231,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertTrue(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertTrue(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertTrue(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertTrue(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -244,9 +244,9 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertTrue(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertTrue(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertTrue(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertTrue(config.isRegistered(MBeanExposer.class));
     }
 
     @Test
@@ -258,8 +258,8 @@
         final ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
 
         final ResourceConfig config = applicationHandler.getConfiguration();
-        Assert.assertTrue(config.isRegistered(ApplicationInfoListener.class));
-        Assert.assertTrue(config.isRegistered(MonitoringEventListener.class));
-        Assert.assertTrue(config.isRegistered(MBeanExposer.class));
+        Assertions.assertTrue(config.isRegistered(ApplicationInfoListener.class));
+        Assertions.assertTrue(config.isRegistered(MonitoringEventListener.class));
+        Assertions.assertTrue(config.isRegistered(MBeanExposer.class));
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorConfigTest.java b/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorConfigTest.java
index 5aa59e9..ef3cca8 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorConfigTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorConfigTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.server.wadl.WadlGenerator;
 import org.glassfish.jersey.server.wadl.internal.ApplicationDescription;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import com.sun.research.ws.wadl.Application;
 import com.sun.research.ws.wadl.Method;
@@ -64,8 +64,8 @@
         TestInjectionManagerFactory.BootstrapResult result = TestInjectionManagerFactory.createInjectionManager();
         WadlGenerator wadlGenerator = config.createWadlGenerator(result.injectionManager);
 
-        Assert.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
-        Assert.assertEquals(MyWadlGenerator.class, ((MyWadlGenerator2) wadlGenerator).getDelegate().getClass());
+        Assertions.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
+        Assertions.assertEquals(MyWadlGenerator.class, ((MyWadlGenerator2) wadlGenerator).getDelegate().getClass());
     }
 
     @Test
@@ -76,8 +76,8 @@
                 .prop("foo", propValue)
                 .build();
         WadlGenerator wadlGenerator = config.createWadlGenerator(result.injectionManager);
-        Assert.assertEquals(MyWadlGenerator.class, wadlGenerator.getClass());
-        Assert.assertEquals(((MyWadlGenerator) wadlGenerator).getFoo(), propValue);
+        Assertions.assertEquals(MyWadlGenerator.class, wadlGenerator.getClass());
+        Assertions.assertEquals(((MyWadlGenerator) wadlGenerator).getFoo(), propValue);
 
         final String propValue2 = "baz";
         config = WadlGeneratorConfig.generator(MyWadlGenerator.class)
@@ -85,12 +85,12 @@
                 .prop("bar", propValue2)
                 .build();
         wadlGenerator = config.createWadlGenerator(result.injectionManager);
-        Assert.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
+        Assertions.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
         final MyWadlGenerator2 wadlGenerator2 = (MyWadlGenerator2) wadlGenerator;
-        Assert.assertEquals(wadlGenerator2.getBar(), propValue2);
+        Assertions.assertEquals(wadlGenerator2.getBar(), propValue2);
 
-        Assert.assertEquals(MyWadlGenerator.class, wadlGenerator2.getDelegate().getClass());
-        Assert.assertEquals(((MyWadlGenerator) wadlGenerator2.getDelegate()).getFoo(), propValue);
+        Assertions.assertEquals(MyWadlGenerator.class, wadlGenerator2.getDelegate().getClass());
+        Assertions.assertEquals(((MyWadlGenerator) wadlGenerator2.getDelegate()).getFoo(), propValue);
     }
 
     @Test
@@ -114,12 +114,12 @@
         WadlGeneratorConfig config = new MyWadlGeneratorConfig();
         WadlGenerator wadlGenerator = config.createWadlGenerator(result.injectionManager);
 
-        Assert.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
+        Assertions.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
         final MyWadlGenerator2 wadlGenerator2 = (MyWadlGenerator2) wadlGenerator;
-        Assert.assertEquals(wadlGenerator2.getBar(), propValue2);
+        Assertions.assertEquals(wadlGenerator2.getBar(), propValue2);
 
-        Assert.assertEquals(MyWadlGenerator.class, wadlGenerator2.getDelegate().getClass());
-        Assert.assertEquals(((MyWadlGenerator) wadlGenerator2.getDelegate()).getFoo(), propValue);
+        Assertions.assertEquals(MyWadlGenerator.class, wadlGenerator2.getDelegate().getClass());
+        Assertions.assertEquals(((MyWadlGenerator) wadlGenerator2.getDelegate()).getFoo(), propValue);
     }
 
     public abstract static class BaseWadlGenerator implements WadlGenerator {
@@ -271,11 +271,11 @@
         TestInjectionManagerFactory.BootstrapResult result = TestInjectionManagerFactory.createInjectionManager();
         WadlGenerator wadlGenerator = config.createWadlGenerator(result.injectionManager);
 
-        Assert.assertEquals(MyWadlGenerator3.class, wadlGenerator.getClass());
+        Assertions.assertEquals(MyWadlGenerator3.class, wadlGenerator.getClass());
 
         MyWadlGenerator3 g = (MyWadlGenerator3) wadlGenerator;
-        Assert.assertNotNull(g.foo);
-        Assert.assertEquals(g.foo.s, "string");
-        Assert.assertNotNull(g.bar);
+        Assertions.assertNotNull(g.foo);
+        Assertions.assertEquals(g.foo.s, "string");
+        Assertions.assertNotNull(g.bar);
     }
 }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorConfigurationLoaderTest.java b/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorConfigurationLoaderTest.java
index 589dc89..88e3bdb 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorConfigurationLoaderTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorConfigurationLoaderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.server.wadl.WadlGenerator;
 import org.glassfish.jersey.server.wadl.internal.ApplicationDescription;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import com.sun.research.ws.wadl.Application;
 import com.sun.research.ws.wadl.Method;
@@ -61,7 +61,7 @@
                 TestInjectionManagerFactory.createInjectionManager(resourceConfig);
         final WadlGenerator wadlGenerator = WadlGeneratorConfigLoader.loadWadlGeneratorsFromConfig(resourceConfig.getProperties())
                 .createWadlGenerator(result.injectionManager);
-        Assert.assertEquals(MyWadlGenerator.class, wadlGenerator.getClass());
+        Assertions.assertEquals(MyWadlGenerator.class, wadlGenerator.getClass());
 
     }
 
@@ -75,7 +75,7 @@
                 TestInjectionManagerFactory.createInjectionManager(resourceConfig);
         final WadlGenerator wadlGenerator = WadlGeneratorConfigLoader.loadWadlGeneratorsFromConfig(resourceConfig.getProperties())
                 .createWadlGenerator(result.injectionManager);
-        Assert.assertTrue(wadlGenerator instanceof MyWadlGenerator);
+        Assertions.assertTrue(wadlGenerator instanceof MyWadlGenerator);
     }
 
     public static class MyWadlGenerator implements WadlGenerator {
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorLoaderTest.java b/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorLoaderTest.java
index 0667055..c9d774e 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorLoaderTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorLoaderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,8 +37,8 @@
 import org.glassfish.jersey.server.wadl.WadlGenerator;
 import org.glassfish.jersey.server.wadl.internal.ApplicationDescription;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import com.sun.research.ws.wadl.Application;
 import com.sun.research.ws.wadl.Method;
@@ -67,10 +67,10 @@
 
         final WadlGenerator wadlGenerator =
                 WadlGeneratorLoader.loadWadlGeneratorDescriptions(result.injectionManager, description);
-        Assert.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
+        Assertions.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
 
         final URL resource = getClass().getResource("testfile.xml");
-        Assert.assertEquals(new File(resource.toURI()).getAbsolutePath(), ((MyWadlGenerator2) wadlGenerator).getTestFile()
+        Assertions.assertEquals(new File(resource.toURI()).getAbsolutePath(), ((MyWadlGenerator2) wadlGenerator).getTestFile()
                 .getAbsolutePath());
 
     }
@@ -85,10 +85,10 @@
 
         final WadlGenerator wadlGenerator =
                 WadlGeneratorLoader.loadWadlGeneratorDescriptions(result.injectionManager, description);
-        Assert.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
+        Assertions.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
 
         final URL resource = getClass().getResource("testfile.xml");
-        Assert.assertEquals(new File(resource.toURI()).getAbsolutePath(), ((MyWadlGenerator2) wadlGenerator).getTestFile()
+        Assertions.assertEquals(new File(resource.toURI()).getAbsolutePath(), ((MyWadlGenerator2) wadlGenerator).getTestFile()
                 .getAbsolutePath());
 
     }
@@ -105,9 +105,9 @@
 
         final WadlGenerator wadlGenerator =
                 WadlGeneratorLoader.loadWadlGeneratorDescriptions(result.injectionManager, description);
-        Assert.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
+        Assertions.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
 
-        Assert.assertEquals(new File(resource.toURI()).getAbsolutePath(), ((MyWadlGenerator2) wadlGenerator).getTestFile()
+        Assertions.assertEquals(new File(resource.toURI()).getAbsolutePath(), ((MyWadlGenerator2) wadlGenerator).getTestFile()
                 .getAbsolutePath());
     }
 
@@ -121,10 +121,10 @@
 
         final WadlGenerator wadlGenerator =
                 WadlGeneratorLoader.loadWadlGeneratorDescriptions(result.injectionManager, description);
-        Assert.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
+        Assertions.assertEquals(MyWadlGenerator2.class, wadlGenerator.getClass());
 
         final URL resource = getClass().getResource("testfile.xml");
-        Assert.assertEquals(new File(resource.toURI()).length(), ((MyWadlGenerator2) wadlGenerator).getTestStreamContent()
+        Assertions.assertEquals(new File(resource.toURI()).length(), ((MyWadlGenerator2) wadlGenerator).getTestStreamContent()
                 .length());
 
     }
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/wadl/generators/resourcedoc/WadlGeneratorResourceDocSupportTest.java b/core-server/src/test/java/org/glassfish/jersey/server/wadl/generators/resourcedoc/WadlGeneratorResourceDocSupportTest.java
index e42b397..803d13f 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/wadl/generators/resourcedoc/WadlGeneratorResourceDocSupportTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/wadl/generators/resourcedoc/WadlGeneratorResourceDocSupportTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,7 +42,7 @@
 import org.glassfish.jersey.server.wadl.internal.generators.resourcedoc.model.ParamDocType;
 import org.glassfish.jersey.server.wadl.internal.generators.resourcedoc.model.ResourceDocType;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import com.sun.research.ws.wadl.Application;
 
diff --git a/docs/src/main/docbook/getting-started.xml b/docs/src/main/docbook/getting-started.xml
index 3680d60..401d19b 100644
--- a/docs/src/main/docbook/getting-started.xml
+++ b/docs/src/main/docbook/getting-started.xml
@@ -151,7 +151,7 @@
     private HttpServer server;
     private WebTarget target;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         server = Main.startServer();
 
@@ -159,7 +159,7 @@
         target = c.target(Main.BASE_URI);
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         server.stop();
     }
diff --git a/examples/bookmark-em/src/test/java/org/glassfish/jersey/examples/bookmark_em/BookmarkTest.java b/examples/bookmark-em/src/test/java/org/glassfish/jersey/examples/bookmark_em/BookmarkTest.java
index 5bdba8a..7b287f9 100644
--- a/examples/bookmark-em/src/test/java/org/glassfish/jersey/examples/bookmark_em/BookmarkTest.java
+++ b/examples/bookmark-em/src/test/java/org/glassfish/jersey/examples/bookmark_em/BookmarkTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -25,13 +25,13 @@
 
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONObject;
-import org.junit.FixMethodOrder;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runners.MethodSorters;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * TODO un-ignore once Jersey supports @ManagedBean
@@ -39,8 +39,8 @@
  * @author Pavel Bucek
  * @author Michal Gajdos
  */
-@Ignore("un-ignore once Jersey supports @ManagedBean")
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@Disabled("un-ignore once Jersey supports @ManagedBean")
+@TestMethodOrder(MethodOrderer.MethodName.class)
 public class BookmarkTest extends JerseyTest {
 
     @Override
diff --git a/examples/bookmark/src/test/java/org/glassfish/jersey/examples/bookmark/BookmarkTest.java b/examples/bookmark/src/test/java/org/glassfish/jersey/examples/bookmark/BookmarkTest.java
index 2ecbfef..2b1e690 100644
--- a/examples/bookmark/src/test/java/org/glassfish/jersey/examples/bookmark/BookmarkTest.java
+++ b/examples/bookmark/src/test/java/org/glassfish/jersey/examples/bookmark/BookmarkTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -26,18 +26,19 @@
 
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONObject;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
-import org.junit.runners.MethodSorters;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
  * @author Michal Gajdos
  */
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@TestMethodOrder(MethodOrderer.MethodName.class)
 public class BookmarkTest extends JerseyTest {
 
     @Override
diff --git a/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/BookstoreTest.java b/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/BookstoreTest.java
index abecf27..0b25af3 100644
--- a/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/BookstoreTest.java
+++ b/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/BookstoreTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -26,9 +26,9 @@
 
 package org.glassfish.jersey.examples.bookstore.webapp.resource;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * @author James Strachan
@@ -54,8 +54,8 @@
     public void testResourceAsXml() throws Exception {
         final Bookstore response = target("bookstore-webapp").request("application/xml").get(Bookstore.class);
 
-        assertNotNull("Should have returned a bookstore!", response);
-        assertEquals("bookstore name", "Czech Bookstore", response.getName());
+        assertNotNull(response, "Should have returned a bookstore!");
+        assertEquals("Czech Bookstore", response.getName(), "bookstore name");
     }
 
     @Test
diff --git a/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/ItemTest.java b/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/ItemTest.java
index 8a3e6dc..b61f6c1 100644
--- a/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/ItemTest.java
+++ b/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/ItemTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -28,9 +28,9 @@
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * @author James Strachan
@@ -51,8 +51,8 @@
         System.out.println("Item XML is: " + text);
 
         final Book response = item1resource().request("application/xml").get(Book.class);
-        assertNotNull("Should have returned an item!", response);
-        assertEquals("item title", "Svejk", response.getTitle());
+        assertNotNull(response, "Should have returned an item!");
+        assertEquals("Svejk", response.getTitle(), "item title");
     }
 
     @Test
diff --git a/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/TestSupport.java b/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/TestSupport.java
index 6a4c221..10212c6 100644
--- a/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/TestSupport.java
+++ b/examples/bookstore-webapp/src/test/java/org/glassfish/jersey/examples/bookstore/webapp/resource/TestSupport.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.servlet.ServletProperties;
 import org.glassfish.jersey.test.JerseyTest;
 
-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;
 
 /**
  * @author James Strachan
@@ -52,13 +52,13 @@
     }
 
     protected void assertHtmlResponse(String response) {
-        assertNotNull("No text returned!", response);
+        assertNotNull(response, "No text returned!");
 
         assertResponseContains(response, "<html>");
         assertResponseContains(response, "</html>");
     }
 
     protected void assertResponseContains(String response, String text) {
-        assertTrue("Response should contain " + text + " but was: " + response, response.contains(text));
+        assertTrue(response.contains(text), "Response should contain " + text + " but was: " + response);
     }
 }
diff --git a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/CdiTest.java b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/CdiTest.java
index bfc6096..7f4e073 100644
--- a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/CdiTest.java
+++ b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/CdiTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -19,8 +19,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assume;
-import org.junit.Before;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
 
 /**
  * Test for CDI web application resources.
@@ -36,11 +37,12 @@
 
     Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         weld = new Weld();
@@ -48,6 +50,7 @@
         super.setUp();
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
diff --git a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/EchoParamBeanTest.java b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/EchoParamBeanTest.java
index 195dbc2..dcbbe8e 100644
--- a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/EchoParamBeanTest.java
+++ b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/EchoParamBeanTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,50 +10,35 @@
 
 package org.glassfish.jersey.examples.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for the echo with injected param managed bean resource.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class EchoParamBeanTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"alpha", "beta"},
-                {"AAA", "BBB"},
-                {"b", "a"},
-                {"1$s", "2&d"}
-        });
+    public static Stream<Arguments> testData() {
+        return Stream.of(
+                Arguments.of("alpha", "beta"),
+                Arguments.of("AAA", "BBB"),
+                Arguments.of("b", "a"),
+                Arguments.of("1$s", "2&d")
+        );
     }
 
-    final String a, b;
-
-    /**
-     * Create a new test case based on the above defined parameters.
-     *
-     * @param a query parameter value
-     * @param b path parameter value
-     */
-    public EchoParamBeanTest(String a, String b) {
-        this.a = a;
-        this.b = b;
-    }
-
-    @Test
-    public void testEchoParamResource() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testEchoParamResource(String a, String b) {
 
         final WebTarget target = target().path("echofield").path(b);
 
diff --git a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/EchoResourceTest.java b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/EchoResourceTest.java
index fd76151..97f9645 100644
--- a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/EchoResourceTest.java
+++ b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/EchoResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,48 +10,30 @@
 
 package org.glassfish.jersey.examples.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for the echo resource.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class EchoResourceTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"alpha"},
-                {"AAA"},
-                {"b"},
-                {"1"}
-        });
+    public static Stream<String> testData() {
+        return Stream.of("alpha", "AAA", "b", "1");
     }
 
-    final String a;
-
-    /**
-     * Create a new test case based on the above defined parameters.
-     *
-     * @param a path parameter value
-     */
-    public EchoResourceTest(String a) {
-        this.a = a;
-    }
-
-    @Test
-    public void testEchoResource() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testEchoResource(String a) {
 
         final WebTarget target = target().path("echo").path(a);
 
@@ -61,8 +43,9 @@
         assertThat(s, containsString(a));
     }
 
-    @Test
-    public void testEchoParamCtorResource() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testEchoParamCtorResource(String a) {
 
         final WebTarget target = target().path("echoparamconstructor").path(a);
 
diff --git a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/HelloworldTest.java b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/HelloworldTest.java
index 006634c..3ebf7a7 100644
--- a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/HelloworldTest.java
+++ b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/HelloworldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,9 +10,9 @@
 
 package org.glassfish.jersey.examples.cdi.resources;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.CoreMatchers.containsString;
 
 /**
diff --git a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/PerApplicationBeanTest.java b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/PerApplicationBeanTest.java
index 45c4087..b85c077 100644
--- a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/PerApplicationBeanTest.java
+++ b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/PerApplicationBeanTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -13,7 +13,7 @@
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.CoreMatchers.containsString;
diff --git a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/PerRequestBeanTest.java b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/PerRequestBeanTest.java
index a758d15..ed6be52 100644
--- a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/PerRequestBeanTest.java
+++ b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/PerRequestBeanTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,51 +10,36 @@
 
 package org.glassfish.jersey.examples.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.startsWith;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for the request scoped managed bean resource.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class PerRequestBeanTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"gamma", "delta"},
-                {"CC C", "D DD"},
-                {"d", "c"},
-                {"@^&", "?!:"}
-        });
+    public static Stream<Arguments> testData() {
+        return Stream.of(
+                Arguments.of("gamma", "delta"),
+                Arguments.of("CC C", "D DD"),
+                Arguments.of("d", "c"),
+                Arguments.of("@^&", "?!:")
+        );
     }
 
-    final String c, d;
-
-    /**
-     * Create a new test case based on the above defined parameters.
-     *
-     * @param c first path parameter value.
-     * @param d second path parameter value.
-     */
-    public PerRequestBeanTest(String c, String d) {
-        this.c = c;
-        this.d = d;
-    }
-
-    @Test
-    public void testTheOtherResource() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testTheOtherResource(String c, String d) {
         final WebTarget target = target().path("other").path(c).path(d);
 
         String s = target.request().get(String.class);
diff --git a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/ProxyScopeAlignmentTest.java b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/ProxyScopeAlignmentTest.java
index 0787114..43829be 100644
--- a/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/ProxyScopeAlignmentTest.java
+++ b/examples/cdi-webapp/src/test/java/org/glassfish/jersey/examples/cdi/resources/ProxyScopeAlignmentTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,17 +10,15 @@
 
 package org.glassfish.jersey.examples.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Ensure CDI and JAX-RS scopes are well aligned, so that dynamic proxies
@@ -28,31 +26,15 @@
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class ProxyScopeAlignmentTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"one"},
-                {"too"},
-                {"much"}
-        });
+    public static Stream<String> testData() {
+        return Stream.of("one", "too", "much");
     }
 
-    final String p;
-
-    /**
-     * Create a new test case based on the above defined parameters.
-     *
-     * @param p path parameter value
-     */
-    public ProxyScopeAlignmentTest(String p) {
-        this.p = p;
-    }
-
-    @Test
-    public void testUiInjection() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testUiInjection(String p) {
 
         final WebTarget app = target().path("ui-app").path(p);
         final WebTarget req = target().path("ui-req").path(p);
diff --git a/examples/clipboard-programmatic/src/test/java/org/glassfish/jersey/examples/clipboard/ClipboardTest.java b/examples/clipboard-programmatic/src/test/java/org/glassfish/jersey/examples/clipboard/ClipboardTest.java
index c708156..e9ae01b 100644
--- a/examples/clipboard-programmatic/src/test/java/org/glassfish/jersey/examples/clipboard/ClipboardTest.java
+++ b/examples/clipboard-programmatic/src/test/java/org/glassfish/jersey/examples/clipboard/ClipboardTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -18,8 +18,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class ClipboardTest extends JerseyTest {
 
diff --git a/examples/clipboard/src/test/java/org/glassfish/jersey/examples/clipboard/ClipboardTest.java b/examples/clipboard/src/test/java/org/glassfish/jersey/examples/clipboard/ClipboardTest.java
index 4fdb3b3..55c34a0 100644
--- a/examples/clipboard/src/test/java/org/glassfish/jersey/examples/clipboard/ClipboardTest.java
+++ b/examples/clipboard/src/test/java/org/glassfish/jersey/examples/clipboard/ClipboardTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -20,9 +20,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class ClipboardTest extends JerseyTest {
 
@@ -32,7 +32,7 @@
         return App.createApp();
     }
 
-    @Before
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         super.setUp();
diff --git a/examples/declarative-linking/src/test/java/org/glassfish/jersey/examples/linking/LinkWebAppTest.java b/examples/declarative-linking/src/test/java/org/glassfish/jersey/examples/linking/LinkWebAppTest.java
index 1ff3435..df19dd3 100644
--- a/examples/declarative-linking/src/test/java/org/glassfish/jersey/examples/linking/LinkWebAppTest.java
+++ b/examples/declarative-linking/src/test/java/org/glassfish/jersey/examples/linking/LinkWebAppTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -21,10 +21,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Naresh (Srinivas Bhimisetty)
@@ -52,12 +52,12 @@
                 .get(Response.class);
 
         final Response.StatusType statusInfo = response.getStatusInfo();
-        assertEquals("Should have succeeded", 200, statusInfo.getStatusCode());
+        assertEquals(200, statusInfo.getStatusCode(), "Should have succeeded");
 
         final String content = response.readEntity(String.class);
         final List<Object> linkHeaders = response.getHeaders().get("Link");
 
-        assertEquals("Should have two link headers", 2, linkHeaders.size());
+        assertEquals(2, linkHeaders.size(), "Should have two link headers");
         assertThat("Content should contain next link",
                 content,
                 containsString("http://localhost:" + getPort() + "/items?offset=20&amp;limit=10"));
diff --git a/examples/entity-filtering-security/src/test/java/org/glassfish/jersey/examples/entityfiltering/security/RestrictedResourceTest.java b/examples/entity-filtering-security/src/test/java/org/glassfish/jersey/examples/entityfiltering/security/RestrictedResourceTest.java
index 1a530b7..c247fe1 100644
--- a/examples/entity-filtering-security/src/test/java/org/glassfish/jersey/examples/entityfiltering/security/RestrictedResourceTest.java
+++ b/examples/entity-filtering-security/src/test/java/org/glassfish/jersey/examples/entityfiltering/security/RestrictedResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,8 +10,6 @@
 
 package org.glassfish.jersey.examples.entityfiltering.security;
 
-import java.util.Arrays;
-
 import javax.ws.rs.core.Feature;
 import javax.ws.rs.core.Response;
 
@@ -23,10 +21,15 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -37,111 +40,122 @@
  *
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class RestrictedResourceTest extends JerseyTest {
+public class RestrictedResourceTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][]{{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
     }
 
-    public RestrictedResourceTest(final Class<Feature> filteringProvider) {
-        super(new ResourceConfig(SecurityEntityFilteringFeature.class)
-                .packages("org.glassfish.jersey.examples.entityfiltering.security")
-                .register(filteringProvider));
-
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        providers().forEach(feature -> {
+            RestrictedResourceTemplateTest test = new RestrictedResourceTemplateTest(feature);
+            tests.add(TestHelper.toTestContainer(test, feature.getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testDenyAll() throws Exception {
-        assertThat(target("restricted-resource").path("denyAll").request().get().getStatus(),
-                equalTo(Response.Status.FORBIDDEN.getStatusCode()));
-    }
+    public static class RestrictedResourceTemplateTest extends JerseyTest {
+        public RestrictedResourceTemplateTest(final Class<? extends Feature> filteringProvider) {
+            super(new ResourceConfig(SecurityEntityFilteringFeature.class)
+                    .packages("org.glassfish.jersey.examples.entityfiltering.security")
+                    .register(filteringProvider));
 
-    @Test
-    public void testPermitAll() throws Exception {
-        final RestrictedEntity entity = target("restricted-resource").path("permitAll").request().get(RestrictedEntity.class);
-        final RestrictedSubEntity mixedField = entity.getMixedField();
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
+        }
 
-        // Not null values.
-        assertThat(entity.getSimpleField(), notNullValue());
-        assertThat(entity.getPermitAll(), notNullValue());
+        @Test
+        public void testDenyAll() throws Exception {
+            assertThat(target("restricted-resource").path("denyAll").request().get().getStatus(),
+                    equalTo(Response.Status.FORBIDDEN.getStatusCode()));
+        }
 
-        // Null values.
-        assertThat(entity.getDenyAll(), nullValue());
-        assertThat(mixedField, nullValue());
-    }
+        @Test
+        public void testPermitAll() throws Exception {
+            final RestrictedEntity entity = target("restricted-resource").path("permitAll").request().get(RestrictedEntity.class);
+            final RestrictedSubEntity mixedField = entity.getMixedField();
 
-    @Test
-    public void testRolesAllowed() throws Exception {
-        final RestrictedEntity entity = target("restricted-resource").path("rolesAllowed").request().get(RestrictedEntity.class);
-        final RestrictedSubEntity mixedField = entity.getMixedField();
+            // Not null values.
+            assertThat(entity.getSimpleField(), notNullValue());
+            assertThat(entity.getPermitAll(), notNullValue());
 
-        // Not null values.
-        assertThat(entity.getSimpleField(), notNullValue());
-        assertThat(entity.getPermitAll(), notNullValue());
-        assertThat(mixedField, notNullValue());
-        assertThat(mixedField.getManagerField(), notNullValue());
+            // Null values.
+            assertThat(entity.getDenyAll(), nullValue());
+            assertThat(mixedField, nullValue());
+        }
 
-        // Null values.
-        assertThat(entity.getDenyAll(), nullValue());
-        assertThat(mixedField.getUserField(), nullValue());
-    }
+        @Test
+        public void testRolesAllowed() throws Exception {
+            final RestrictedEntity entity = target("restricted-resource").path("rolesAllowed")
+                    .request().get(RestrictedEntity.class);
+            final RestrictedSubEntity mixedField = entity.getMixedField();
 
-    @Test
-    public void testRuntimeRolesAllowedUser() throws Exception {
-        final RestrictedEntity entity = target("restricted-resource")
-                .path("runtimeRolesAllowed")
-                .queryParam("roles", "user")
-                .request().get(RestrictedEntity.class);
-        final RestrictedSubEntity mixedField = entity.getMixedField();
+            // Not null values.
+            assertThat(entity.getSimpleField(), notNullValue());
+            assertThat(entity.getPermitAll(), notNullValue());
+            assertThat(mixedField, notNullValue());
+            assertThat(mixedField.getManagerField(), notNullValue());
 
-        // Not null values.
-        assertThat(entity.getSimpleField(), notNullValue());
-        assertThat(entity.getPermitAll(), notNullValue());
-        assertThat(mixedField, notNullValue());
-        assertThat(mixedField.getUserField(), notNullValue());
+            // Null values.
+            assertThat(entity.getDenyAll(), nullValue());
+            assertThat(mixedField.getUserField(), nullValue());
+        }
 
-        // Null values.
-        assertThat(entity.getDenyAll(), nullValue());
-        assertThat(mixedField.getManagerField(), nullValue());
-    }
+        @Test
+        public void testRuntimeRolesAllowedUser() throws Exception {
+            final RestrictedEntity entity = target("restricted-resource")
+                    .path("runtimeRolesAllowed")
+                    .queryParam("roles", "user")
+                    .request().get(RestrictedEntity.class);
+            final RestrictedSubEntity mixedField = entity.getMixedField();
 
-    @Test
-    public void testRuntimeRolesAllowedManagerUser() throws Exception {
-        final RestrictedEntity entity = target("restricted-resource")
-                .path("runtimeRolesAllowed")
-                .queryParam("roles", "user,manager")
-                .request().get(RestrictedEntity.class);
-        final RestrictedSubEntity mixedField = entity.getMixedField();
+            // Not null values.
+            assertThat(entity.getSimpleField(), notNullValue());
+            assertThat(entity.getPermitAll(), notNullValue());
+            assertThat(mixedField, notNullValue());
+            assertThat(mixedField.getUserField(), notNullValue());
 
-        // Not null values.
-        assertThat(entity.getSimpleField(), notNullValue());
-        assertThat(entity.getPermitAll(), notNullValue());
-        assertThat(mixedField, notNullValue());
-        assertThat(mixedField.getUserField(), notNullValue());
-        assertThat(mixedField.getManagerField(), notNullValue());
+            // Null values.
+            assertThat(entity.getDenyAll(), nullValue());
+            assertThat(mixedField.getManagerField(), nullValue());
+        }
 
-        // Null values.
-        assertThat(entity.getDenyAll(), nullValue());
-    }
+        @Test
+        public void testRuntimeRolesAllowedManagerUser() throws Exception {
+            final RestrictedEntity entity = target("restricted-resource")
+                    .path("runtimeRolesAllowed")
+                    .queryParam("roles", "user,manager")
+                    .request().get(RestrictedEntity.class);
+            final RestrictedSubEntity mixedField = entity.getMixedField();
 
-    @Test
-    public void testRuntimeRolesAllowedInvalid() throws Exception {
-        final RestrictedEntity entity = target("restricted-resource")
-                .path("runtimeRolesAllowed")
-                .queryParam("roles", "invalid")
-                .request().get(RestrictedEntity.class);
-        final RestrictedSubEntity mixedField = entity.getMixedField();
+            // Not null values.
+            assertThat(entity.getSimpleField(), notNullValue());
+            assertThat(entity.getPermitAll(), notNullValue());
+            assertThat(mixedField, notNullValue());
+            assertThat(mixedField.getUserField(), notNullValue());
+            assertThat(mixedField.getManagerField(), notNullValue());
 
-        // Not null values.
-        assertThat(entity.getSimpleField(), notNullValue());
-        assertThat(entity.getPermitAll(), notNullValue());
+            // Null values.
+            assertThat(entity.getDenyAll(), nullValue());
+        }
 
-        // Null values.
-        assertThat(entity.getDenyAll(), nullValue());
-        assertThat(mixedField, nullValue());
+        @Test
+        public void testRuntimeRolesAllowedInvalid() throws Exception {
+            final RestrictedEntity entity = target("restricted-resource")
+                    .path("runtimeRolesAllowed")
+                    .queryParam("roles", "invalid")
+                    .request().get(RestrictedEntity.class);
+            final RestrictedSubEntity mixedField = entity.getMixedField();
+
+            // Not null values.
+            assertThat(entity.getSimpleField(), notNullValue());
+            assertThat(entity.getPermitAll(), notNullValue());
+
+            // Null values.
+            assertThat(entity.getDenyAll(), nullValue());
+            assertThat(mixedField, nullValue());
+        }
     }
 }
diff --git a/examples/entity-filtering-security/src/test/java/org/glassfish/jersey/examples/entityfiltering/security/UnrestrictedResourceTest.java b/examples/entity-filtering-security/src/test/java/org/glassfish/jersey/examples/entityfiltering/security/UnrestrictedResourceTest.java
index 5b6a838..5990662 100644
--- a/examples/entity-filtering-security/src/test/java/org/glassfish/jersey/examples/entityfiltering/security/UnrestrictedResourceTest.java
+++ b/examples/entity-filtering-security/src/test/java/org/glassfish/jersey/examples/entityfiltering/security/UnrestrictedResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,8 +10,6 @@
 
 package org.glassfish.jersey.examples.entityfiltering.security;
 
-import java.util.Arrays;
-
 import javax.ws.rs.core.Feature;
 
 import org.glassfish.jersey.examples.entityfiltering.security.domain.RestrictedEntity;
@@ -22,10 +20,15 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -35,36 +38,46 @@
  *
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class UnrestrictedResourceTest extends JerseyTest {
+public class UnrestrictedResourceTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][]{{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
     }
 
-    public UnrestrictedResourceTest(final Class<Feature> filteringProvider) {
-        super(new ResourceConfig(SecurityEntityFilteringFeature.class)
-                .packages("org.glassfish.jersey.examples.entityfiltering.security")
-                .register(filteringProvider));
-
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        providers().forEach(feature -> {
+            UnrestrictedResourceTemplateTest test = new UnrestrictedResourceTemplateTest(feature) {};
+            tests.add(TestHelper.toTestContainer(test, feature.getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testRestrictedEntity() throws Exception {
-        final RestrictedEntity entity = target("unrestricted-resource").request().get(RestrictedEntity.class);
-        final RestrictedSubEntity mixedField = entity.getMixedField();
+    public static class UnrestrictedResourceTemplateTest extends JerseyTest {
+        public UnrestrictedResourceTemplateTest(final Class<? extends Feature> filteringProvider) {
+            super(new ResourceConfig(SecurityEntityFilteringFeature.class)
+                    .packages("org.glassfish.jersey.examples.entityfiltering.security")
+                    .register(filteringProvider));
 
-        // Not null values.
-        assertThat(entity.getSimpleField(), notNullValue());
-        assertThat(entity.getPermitAll(), notNullValue());
-        assertThat(mixedField, notNullValue());
-        assertThat(mixedField.getManagerField(), notNullValue());
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
+        }
 
-        // Null values.
-        assertThat(entity.getDenyAll(), nullValue());
-        assertThat(mixedField.getUserField(), nullValue());
+        @Test
+        public void testRestrictedEntity() throws Exception {
+            final RestrictedEntity entity = target("unrestricted-resource").request().get(RestrictedEntity.class);
+            final RestrictedSubEntity mixedField = entity.getMixedField();
+
+            // Not null values.
+            assertThat(entity.getSimpleField(), notNullValue());
+            assertThat(entity.getPermitAll(), notNullValue());
+            assertThat(mixedField, notNullValue());
+            assertThat(mixedField.getManagerField(), notNullValue());
+
+            // Null values.
+            assertThat(entity.getDenyAll(), nullValue());
+            assertThat(mixedField.getUserField(), nullValue());
+        }
     }
 }
diff --git a/examples/entity-filtering-selectable/src/test/java/org/glassfish/jersey/examples/entityfiltering/selectable/PersonResourceTest.java b/examples/entity-filtering-selectable/src/test/java/org/glassfish/jersey/examples/entityfiltering/selectable/PersonResourceTest.java
index 3dc9ace..5bd5a38 100644
--- a/examples/entity-filtering-selectable/src/test/java/org/glassfish/jersey/examples/entityfiltering/selectable/PersonResourceTest.java
+++ b/examples/entity-filtering-selectable/src/test/java/org/glassfish/jersey/examples/entityfiltering/selectable/PersonResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,7 +10,9 @@
 
 package org.glassfish.jersey.examples.entityfiltering.selectable;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
@@ -27,10 +29,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -41,164 +44,173 @@
  * @author Andy Pemberton (pembertona at gmail.com)
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class PersonResourceTest extends JerseyTest {
+public class PersonResourceTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][]{{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
     }
 
-    private final Class<Feature> filteringProvider;
-
-    public PersonResourceTest(final Class<Feature> filteringProvider) {
-        super(new ResourceConfig(SelectableEntityFilteringFeature.class)
-                .packages("org.glassfish.jersey.examples.entityfiltering.selectable")
-                .property(SelectableEntityFilteringFeature.QUERY_PARAM_NAME, "select")
-                .register(filteringProvider));
-
-        this.filteringProvider = filteringProvider;
-
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        providers().forEach(feature -> {
+            PersonResourceTemplateTest test = new PersonResourceTemplateTest(feature);
+            tests.add(TestHelper.toTestContainer(test, feature.getSimpleName()));
+        });
+        return tests;
     }
 
-    @Override
-    protected void configureClient(final ClientConfig config) {
-        config.register(filteringProvider);
-    }
+    public static class PersonResourceTemplateTest extends JerseyTest {
+        private final Class<? extends Feature> filteringProvider;
 
-    @Test
-    public void testNoFilter() throws Exception {
-        final Person entity = target("people").path("1234").request().get(Person.class);
+        public PersonResourceTemplateTest(final Class<? extends Feature> filteringProvider) {
+            super(new ResourceConfig(SelectableEntityFilteringFeature.class)
+                    .packages("org.glassfish.jersey.examples.entityfiltering.selectable")
+                    .property(SelectableEntityFilteringFeature.QUERY_PARAM_NAME, "select")
+                    .register(filteringProvider));
 
-        // Not null values.
-        assertThat(entity.getFamilyName(), notNullValue());
-        assertThat(entity.getGivenName(), notNullValue());
-        assertThat(entity.getHonorificPrefix(), notNullValue());
-        assertThat(entity.getHonorificSuffix(), notNullValue());
-        assertThat(entity.getRegion(), notNullValue());
+            this.filteringProvider = filteringProvider;
 
-        final List<Address> addresses = entity.getAddresses();
-        assertThat(addresses, notNullValue());
-        final Address address = addresses.get(0);
-        assertThat(address, notNullValue());
-        assertThat(address.getRegion(), notNullValue());
-        assertThat(address.getStreetAddress(), notNullValue());
-        PhoneNumber phoneNumber = address.getPhoneNumber();
-        assertThat(phoneNumber, notNullValue());
-        assertThat(phoneNumber.getAreaCode(), notNullValue());
-        assertThat(phoneNumber.getNumber(), notNullValue());
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
+        }
 
-        final Map<String, PhoneNumber> phoneNumbers = entity.getPhoneNumbers();
-        assertThat(phoneNumbers, notNullValue());
+        @Override
+        protected void configureClient(final ClientConfig config) {
+            config.register(filteringProvider);
+        }
 
-        // TODO: enable for MOXy as well when JERSEY-2751 gets fixed.
-        if (JacksonFeature.class.isAssignableFrom(filteringProvider)) {
-            phoneNumber = phoneNumbers.get("HOME");
+        @Test
+        public void testNoFilter() throws Exception {
+            final Person entity = target("people").path("1234").request().get(Person.class);
+
+            // Not null values.
+            assertThat(entity.getFamilyName(), notNullValue());
+            assertThat(entity.getGivenName(), notNullValue());
+            assertThat(entity.getHonorificPrefix(), notNullValue());
+            assertThat(entity.getHonorificSuffix(), notNullValue());
+            assertThat(entity.getRegion(), notNullValue());
+
+            final List<Address> addresses = entity.getAddresses();
+            assertThat(addresses, notNullValue());
+            final Address address = addresses.get(0);
+            assertThat(address, notNullValue());
+            assertThat(address.getRegion(), notNullValue());
+            assertThat(address.getStreetAddress(), notNullValue());
+            PhoneNumber phoneNumber = address.getPhoneNumber();
             assertThat(phoneNumber, notNullValue());
             assertThat(phoneNumber.getAreaCode(), notNullValue());
             assertThat(phoneNumber.getNumber(), notNullValue());
+
+            final Map<String, PhoneNumber> phoneNumbers = entity.getPhoneNumbers();
+            assertThat(phoneNumbers, notNullValue());
+
+            // TODO: enable for MOXy as well when JERSEY-2751 gets fixed.
+            if (JacksonFeature.class.isAssignableFrom(filteringProvider)) {
+                phoneNumber = phoneNumbers.get("HOME");
+                assertThat(phoneNumber, notNullValue());
+                assertThat(phoneNumber.getAreaCode(), notNullValue());
+                assertThat(phoneNumber.getNumber(), notNullValue());
+            }
+        }
+
+        @Test
+        public void testInvalidFilter() throws Exception {
+            final Person entity = target("people").path("1234")
+                    .queryParam("select", "invalid").request().get(Person.class);
+
+            // All null values.
+            assertThat(entity.getFamilyName(), nullValue());
+            assertThat(entity.getGivenName(), nullValue());
+            assertThat(entity.getHonorificPrefix(), nullValue());
+            assertThat(entity.getHonorificSuffix(), nullValue());
+            assertThat(entity.getRegion(), nullValue());
+            assertThat(entity.getAddresses(), nullValue());
+            assertThat(entity.getPhoneNumbers(), nullValue());
+        }
+
+        /**
+         * Test first level filters.
+         */
+        @Test
+        public void testFilters() throws Exception {
+            final Person entity = target("people").path("1234")
+                    .queryParam("select", "familyName,givenName").request()
+                    .get(Person.class);
+
+            // Not null values.
+            assertThat(entity.getFamilyName(), notNullValue());
+            assertThat(entity.getGivenName(), notNullValue());
+
+            // Null values.
+            assertThat(entity.getAddresses(), nullValue());
+            assertThat(entity.getPhoneNumbers(), nullValue());
+            assertThat(entity.getRegion(), nullValue());
+        }
+
+        /**
+         * Test empty (but valid) filters.
+         * Valid empty filters are:
+         *  . ,. , .. .,
+         *
+         *
+         * result is empty object (nothing is returned) but Jersey will not throw any exception
+         */
+        @Test
+        public void testEmptyFilters() throws Exception {
+            final Person entity = target("people").path("1234")
+                    .queryParam("select", ".").request()
+                    .get(Person.class);
+
+            // Null values (all elements).
+            assertThat(entity.getFamilyName(), nullValue());
+            assertThat(entity.getGivenName(), nullValue());
+            assertThat(entity.getAddresses(), nullValue());
+            assertThat(entity.getPhoneNumbers(), nullValue());
+            assertThat(entity.getRegion(), nullValue());
+        }
+
+        /**
+         * Test 2nd and 3rd level filters.
+         */
+        @Test
+        public void testSubFilters() throws Exception {
+            final Person entity = target("people")
+                    .path("1234")
+                    .queryParam("select",
+                            "familyName,givenName,addresses.streetAddress,addresses.phoneNumber.areaCode")
+                    .request().get(Person.class);
+
+            // Not null values.
+            assertThat(entity.getFamilyName(), notNullValue());
+            assertThat(entity.getGivenName(), notNullValue());
+            assertThat(entity.getAddresses().get(0).getStreetAddress(), notNullValue());
+            assertThat(entity.getAddresses().get(0).getPhoneNumber().getAreaCode(), notNullValue());
+
+            // Null values.
+            assertThat(entity.getRegion(), nullValue());
+            assertThat(entity.getAddresses().get(0).getPhoneNumber().getNumber(), nullValue());
+        }
+
+        /**
+         * Test that 1st and 2nd level filters with the same name act as expected.
+         */
+        @Test
+        public void testFiltersSameName() throws Exception {
+            final Person firstLevel = target("people").path("1234")
+                    .queryParam("select", "familyName,region").request()
+                    .get(Person.class);
+            final Person secondLevel = target("people").path("1234")
+                    .queryParam("select", "familyName,addresses.region").request()
+                    .get(Person.class);
+
+            // Not null values.
+            assertThat(firstLevel.getRegion(), notNullValue());
+            assertThat(secondLevel.getAddresses().get(0).getRegion(), notNullValue());
+
+            // Null values.
+            assertThat(firstLevel.getAddresses(), nullValue()); //confirms 2nd level region on addresses is null
+            assertThat(secondLevel.getRegion(), nullValue());
         }
     }
-
-    @Test
-    public void testInvalidFilter() throws Exception {
-        final Person entity = target("people").path("1234")
-                .queryParam("select", "invalid").request().get(Person.class);
-
-        // All null values.
-        assertThat(entity.getFamilyName(), nullValue());
-        assertThat(entity.getGivenName(), nullValue());
-        assertThat(entity.getHonorificPrefix(), nullValue());
-        assertThat(entity.getHonorificSuffix(), nullValue());
-        assertThat(entity.getRegion(), nullValue());
-        assertThat(entity.getAddresses(), nullValue());
-        assertThat(entity.getPhoneNumbers(), nullValue());
-    }
-
-    /**
-     * Test first level filters.
-     */
-    @Test
-    public void testFilters() throws Exception {
-        final Person entity = target("people").path("1234")
-                .queryParam("select", "familyName,givenName").request()
-                .get(Person.class);
-
-        // Not null values.
-        assertThat(entity.getFamilyName(), notNullValue());
-        assertThat(entity.getGivenName(), notNullValue());
-
-        // Null values.
-        assertThat(entity.getAddresses(), nullValue());
-        assertThat(entity.getPhoneNumbers(), nullValue());
-        assertThat(entity.getRegion(), nullValue());
-    }
-
-    /**
-     * Test empty (but valid) filters.
-     * Valid empty filters are:
-     *  . ,. , .. .,
-     *
-     *
-     * result is empty object (nothing is returned) but Jersey will not throw any exception
-     */
-    @Test
-    public void testEmptyFilters() throws Exception {
-        final Person entity = target("people").path("1234")
-                .queryParam("select", ".").request()
-                .get(Person.class);
-
-        // Null values (all elements).
-        assertThat(entity.getFamilyName(), nullValue());
-        assertThat(entity.getGivenName(), nullValue());
-        assertThat(entity.getAddresses(), nullValue());
-        assertThat(entity.getPhoneNumbers(), nullValue());
-        assertThat(entity.getRegion(), nullValue());
-    }
-
-    /**
-     * Test 2nd and 3rd level filters.
-     */
-    @Test
-    public void testSubFilters() throws Exception {
-        final Person entity = target("people")
-                .path("1234")
-                .queryParam("select",
-                        "familyName,givenName,addresses.streetAddress,addresses.phoneNumber.areaCode")
-                .request().get(Person.class);
-
-        // Not null values.
-        assertThat(entity.getFamilyName(), notNullValue());
-        assertThat(entity.getGivenName(), notNullValue());
-        assertThat(entity.getAddresses().get(0).getStreetAddress(), notNullValue());
-        assertThat(entity.getAddresses().get(0).getPhoneNumber().getAreaCode(), notNullValue());
-
-        // Null values.
-        assertThat(entity.getRegion(), nullValue());
-        assertThat(entity.getAddresses().get(0).getPhoneNumber().getNumber(), nullValue());
-    }
-
-    /**
-     * Test that 1st and 2nd level filters with the same name act as expected.
-     */
-    @Test
-    public void testFiltersSameName() throws Exception {
-        final Person firstLevel = target("people").path("1234")
-                .queryParam("select", "familyName,region").request()
-                .get(Person.class);
-        final Person secondLevel = target("people").path("1234")
-                .queryParam("select", "familyName,addresses.region").request()
-                .get(Person.class);
-
-        // Not null values.
-        assertThat(firstLevel.getRegion(), notNullValue());
-        assertThat(secondLevel.getAddresses().get(0).getRegion(), notNullValue());
-
-        // Null values.
-        assertThat(firstLevel.getAddresses(), nullValue()); //confirms 2nd level region on addresses is null
-        assertThat(secondLevel.getRegion(), nullValue());
-    }
-
 }
diff --git a/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/ProjectsResourceTest.java b/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/ProjectsResourceTest.java
index 5d51237..b834406 100644
--- a/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/ProjectsResourceTest.java
+++ b/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/ProjectsResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,7 +10,9 @@
 
 package org.glassfish.jersey.examples.entityfiltering;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 
 import javax.ws.rs.core.Feature;
@@ -23,10 +25,12 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -36,60 +40,71 @@
  *
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class ProjectsResourceTest extends JerseyTest {
+public class ProjectsResourceTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][]{{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
     }
 
-    public ProjectsResourceTest(final Class<Feature> filteringProvider) {
-        super(new ResourceConfig(EntityFilteringFeature.class)
-                .packages("org.glassfish.jersey.examples.entityfiltering.resource")
-                .register(filteringProvider));
-
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        providers().forEach(feature -> {
+            ProjectsResourceTemplateTest test = new ProjectsResourceTemplateTest(feature);
+            tests.add(TestHelper.toTestContainer(test, feature.getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testProjects() throws Exception {
-        for (final Project project : target("projects").request().get(new GenericType<List<Project>>() {})) {
-            testProject(project, false);
+    public static class ProjectsResourceTemplateTest extends JerseyTest {
+        public ProjectsResourceTemplateTest(final Class<? extends Feature> filteringProvider) {
+            super(new ResourceConfig(EntityFilteringFeature.class)
+                    .packages("org.glassfish.jersey.examples.entityfiltering.resource")
+                    .register(filteringProvider));
+
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
+        }
+
+        @Test
+        public void testProjects() throws Exception {
+            for (final Project project : target("projects").request().get(new GenericType<List<Project>>() {})) {
+                testProject(project, false);
+            }
+        }
+
+        @Test
+        public void testProject() throws Exception {
+            testProject(target("projects").path("1").request().get(Project.class), false);
+        }
+
+        @Test
+        public void testDetailedProjects() throws Exception {
+            for (final Project project : target("projects/detailed").request().get(new GenericType<List<Project>>() {})) {
+                testProject(project, true);
+            }
+        }
+
+        @Test
+        public void testDetailedProject() throws Exception {
+            testProject(target("projects/detailed").path("1").request().get(Project.class), true);
+        }
+
+        private void testProject(final Project project, final boolean isDetailed) {
+            // Following properties should be in every returned project.
+            assertThat(project.getId(), notNullValue());
+            assertThat(project.getName(), notNullValue());
+            assertThat(project.getDescription(), notNullValue());
+
+            // Tasks and users should be only in "detailed" view.
+            if (!isDetailed) {
+                assertThat("Users present in non-detailed project view", project.getUsers(), nullValue());
+                assertThat("Tasks present in non-detailed project view", project.getTasks(), nullValue());
+            } else {
+                assertThat("Users not present in detailed project view", project.getUsers(), notNullValue());
+                assertThat("Tasks not present in detailed project view", project.getTasks(), notNullValue());
+            }
         }
     }
 
-    @Test
-    public void testProject() throws Exception {
-        testProject(target("projects").path("1").request().get(Project.class), false);
-    }
-
-    @Test
-    public void testDetailedProjects() throws Exception {
-        for (final Project project : target("projects/detailed").request().get(new GenericType<List<Project>>() {})) {
-            testProject(project, true);
-        }
-    }
-
-    @Test
-    public void testDetailedProject() throws Exception {
-        testProject(target("projects/detailed").path("1").request().get(Project.class), true);
-    }
-
-    private void testProject(final Project project, final boolean isDetailed) {
-        // Following properties should be in every returned project.
-        assertThat(project.getId(), notNullValue());
-        assertThat(project.getName(), notNullValue());
-        assertThat(project.getDescription(), notNullValue());
-
-        // Tasks and users should be only in "detailed" view.
-        if (!isDetailed) {
-            assertThat("Users present in non-detailed project view", project.getUsers(), nullValue());
-            assertThat("Tasks present in non-detailed project view", project.getTasks(), nullValue());
-        } else {
-            assertThat("Users not present in detailed project view", project.getUsers(), notNullValue());
-            assertThat("Tasks not present in detailed project view", project.getTasks(), notNullValue());
-        }
-    }
 }
diff --git a/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/TaskResourceTest.java b/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/TaskResourceTest.java
index c7171ac..ad61b9a 100644
--- a/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/TaskResourceTest.java
+++ b/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/TaskResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,7 +10,9 @@
 
 package org.glassfish.jersey.examples.entityfiltering;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 
 import javax.ws.rs.core.Feature;
@@ -23,10 +25,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -36,60 +39,70 @@
  *
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class TaskResourceTest extends JerseyTest {
+public class TaskResourceTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][]{{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
     }
 
-    public TaskResourceTest(final Class<Feature> filteringProvider) {
-        super(new ResourceConfig(EntityFilteringFeature.class)
-                .packages("org.glassfish.jersey.examples.entityfiltering.resource")
-                .register(filteringProvider));
-
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        providers().forEach(feature -> {
+            TaskResourceTemplateTest test = new TaskResourceTemplateTest(feature) {};
+            tests.add(TestHelper.toTestContainer(test, feature.getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testTasks() throws Exception {
-        for (final Task task : target("tasks").request().get(new GenericType<List<Task>>() {})) {
-            testTask(task, false);
+    public abstract static class TaskResourceTemplateTest extends JerseyTest {
+        public TaskResourceTemplateTest(final Class<? extends Feature> filteringProvider) {
+            super(new ResourceConfig(EntityFilteringFeature.class)
+                    .packages("org.glassfish.jersey.examples.entityfiltering.resource")
+                    .register(filteringProvider));
+
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
         }
-    }
 
-    @Test
-    public void testTask() throws Exception {
-        testTask(target("tasks").path("1").request().get(Task.class), false);
-    }
-
-    @Test
-    public void testDetailedTasks() throws Exception {
-        for (final Task task : target("tasks").path("detailed").request().get(new GenericType<List<Task>>() {})) {
-            testTask(task, true);
+        @Test
+        public void testTasks() throws Exception {
+            for (final Task task : target("tasks").request().get(new GenericType<List<Task>>() {})) {
+                testTask(task, false);
+            }
         }
-    }
 
-    @Test
-    public void testDetailedTask() throws Exception {
-        testTask(target("tasks").path("1").queryParam("detailed", true).request().get(Task.class), true);
-    }
+        @Test
+        public void testTask() throws Exception {
+            testTask(target("tasks").path("1").request().get(Task.class), false);
+        }
 
-    private void testTask(final Task task, final boolean isDetailed) {
-        // Following properties should be in every returned task.
-        assertThat(task.getId(), notNullValue());
-        assertThat(task.getName(), notNullValue());
-        assertThat(task.getDescription(), notNullValue());
+        @Test
+        public void testDetailedTasks() throws Exception {
+            for (final Task task : target("tasks").path("detailed").request().get(new GenericType<List<Task>>() {})) {
+                testTask(task, true);
+            }
+        }
 
-        // Tasks and tasks should be in "detailed" view.
-        if (!isDetailed) {
-            assertThat(task.getProject(), nullValue());
-            assertThat(task.getUser(), nullValue());
-        } else {
-            assertThat(task.getProject(), notNullValue());
-            assertThat(task.getUser(), notNullValue());
+        @Test
+        public void testDetailedTask() throws Exception {
+            testTask(target("tasks").path("1").queryParam("detailed", true).request().get(Task.class), true);
+        }
+
+        private void testTask(final Task task, final boolean isDetailed) {
+            // Following properties should be in every returned task.
+            assertThat(task.getId(), notNullValue());
+            assertThat(task.getName(), notNullValue());
+            assertThat(task.getDescription(), notNullValue());
+
+            // Tasks and tasks should be in "detailed" view.
+            if (!isDetailed) {
+                assertThat(task.getProject(), nullValue());
+                assertThat(task.getUser(), nullValue());
+            } else {
+                assertThat(task.getProject(), notNullValue());
+                assertThat(task.getUser(), notNullValue());
+            }
         }
     }
 }
diff --git a/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/UsersResourceTest.java b/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/UsersResourceTest.java
index e85f779..777d110 100644
--- a/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/UsersResourceTest.java
+++ b/examples/entity-filtering/src/test/java/org/glassfish/jersey/examples/entityfiltering/UsersResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,7 +10,9 @@
 
 package org.glassfish.jersey.examples.entityfiltering;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 
 import javax.ws.rs.core.Feature;
@@ -23,73 +25,84 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * {@link org.glassfish.jersey.examples.entityfiltering.resource.UsersResource} unit tests.
  *
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class UsersResourceTest extends JerseyTest {
+public class UsersResourceTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][]{{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
     }
 
-    public UsersResourceTest(final Class<Feature> filteringProvider) {
-        super(new ResourceConfig(EntityFilteringFeature.class)
-                .packages("org.glassfish.jersey.examples.entityfiltering.resource")
-                .register(filteringProvider));
-
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        providers().forEach(feature -> {
+            UsersResourceTemplateTest test = new UsersResourceTemplateTest(feature) {};
+            tests.add(TestHelper.toTestContainer(test, feature.getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testUsers() throws Exception {
-        for (final User user : target("users").request().get(new GenericType<List<User>>() {})) {
-            testUser(user, false);
+    public abstract static class UsersResourceTemplateTest extends JerseyTest {
+        public UsersResourceTemplateTest(final Class<? extends Feature> filteringProvider) {
+            super(new ResourceConfig(EntityFilteringFeature.class)
+                    .packages("org.glassfish.jersey.examples.entityfiltering.resource")
+                    .register(filteringProvider));
+
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
         }
-    }
 
-    @Test
-    public void testUser() throws Exception {
-        testUser(target("users").path("1").request().get(User.class), false);
-    }
-
-    @Test
-    public void testDetailedUsers() throws Exception {
-        for (final User user : target("users").queryParam("detailed", true).request().get(new GenericType<List<User>>() {})) {
-            testUser(user, true);
+        @Test
+        public void testUsers() throws Exception {
+            for (final User user : target("users").request().get(new GenericType<List<User>>() {})) {
+                testUser(user, false);
+            }
         }
-    }
 
-    @Test
-    public void testDetailedUser() throws Exception {
-        testUser(target("users").path("1").queryParam("detailed", true).request().get(User.class), true);
-    }
+        @Test
+        public void testUser() throws Exception {
+            testUser(target("users").path("1").request().get(User.class), false);
+        }
 
-    private void testUser(final User user, final boolean isDetailed) {
-        // Following properties should be in every returned user.
-        assertThat(user.getId(), notNullValue());
-        assertThat(user.getName(), notNullValue());
-        assertThat(user.getEmail(), notNullValue());
+        @Test
+        public void testDetailedUsers() throws Exception {
+            for (final User user : target("users").queryParam("detailed", true).request().get(new GenericType<List<User>>() {})) {
+                testUser(user, true);
+            }
+        }
 
-        // Tasks and users should be in "detailed" view.
-        if (!isDetailed) {
-            assertThat(user.getProjects(), nullValue());
-            assertThat(user.getTasks(), nullValue());
-        } else {
-            assertThat(user.getProjects(), notNullValue());
-            assertThat(user.getTasks(), notNullValue());
+        @Test
+        public void testDetailedUser() throws Exception {
+            testUser(target("users").path("1").queryParam("detailed", true).request().get(User.class), true);
+        }
+
+        private void testUser(final User user, final boolean isDetailed) {
+            // Following properties should be in every returned user.
+            assertThat(user.getId(), notNullValue());
+            assertThat(user.getName(), notNullValue());
+            assertThat(user.getEmail(), notNullValue());
+
+            // Tasks and users should be in "detailed" view.
+            if (!isDetailed) {
+                assertThat(user.getProjects(), nullValue());
+                assertThat(user.getTasks(), nullValue());
+            } else {
+                assertThat(user.getProjects(), notNullValue());
+                assertThat(user.getTasks(), notNullValue());
+            }
         }
     }
 }
diff --git a/examples/exception-mapping/src/test/java/org/glassfish/jersey/examples/exception/ExceptionMappingFilterTest.java b/examples/exception-mapping/src/test/java/org/glassfish/jersey/examples/exception/ExceptionMappingFilterTest.java
index d509934..f95f191 100644
--- a/examples/exception-mapping/src/test/java/org/glassfish/jersey/examples/exception/ExceptionMappingFilterTest.java
+++ b/examples/exception-mapping/src/test/java/org/glassfish/jersey/examples/exception/ExceptionMappingFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -18,13 +18,13 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.glassfish.jersey.examples.exception.ExceptionResource.MyResponseFilter;
 import static org.glassfish.jersey.examples.exception.Exceptions.MyExceptionMapper;
 import static org.glassfish.jersey.examples.exception.Exceptions.MySubExceptionMapper;
 import static org.glassfish.jersey.examples.exception.Exceptions.WebApplicationExceptionMapper;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * ExceptionMappingFilterTest class.
diff --git a/examples/exception-mapping/src/test/java/org/glassfish/jersey/examples/exception/ExceptionMappingTest.java b/examples/exception-mapping/src/test/java/org/glassfish/jersey/examples/exception/ExceptionMappingTest.java
index 3166312..615cd29 100644
--- a/examples/exception-mapping/src/test/java/org/glassfish/jersey/examples/exception/ExceptionMappingTest.java
+++ b/examples/exception-mapping/src/test/java/org/glassfish/jersey/examples/exception/ExceptionMappingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -18,14 +18,14 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.glassfish.jersey.examples.exception.ExceptionResource.MyResponseFilter;
 import static org.glassfish.jersey.examples.exception.Exceptions.MyExceptionMapper;
 import static org.glassfish.jersey.examples.exception.Exceptions.MySubExceptionMapper;
 import static org.glassfish.jersey.examples.exception.Exceptions.MySubSubException;
 import static org.glassfish.jersey.examples.exception.Exceptions.WebApplicationExceptionMapper;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * ExceptionMappingTest class.
diff --git a/examples/extended-wadl-webapp/pom.xml b/examples/extended-wadl-webapp/pom.xml
index 736b997..e44a4ee 100644
--- a/examples/extended-wadl-webapp/pom.xml
+++ b/examples/extended-wadl-webapp/pom.xml
@@ -90,6 +90,12 @@
             <artifactId>pax-exam-link-mvn</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit4.version}</version>
+            <scope>test</scope>
+        </dependency>
 
         <!-- OSGi runtime - Felix -->
         <dependency>
@@ -228,6 +234,13 @@
                     <forkMode>always</forkMode>
                     <enableAssertions>false</enableAssertions>
                 </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.maven.surefire</groupId>
+                        <artifactId>surefire-junit47</artifactId>
+                        <version>${surefire.version}</version>
+                    </dependency>
+                </dependencies>
             </plugin>
             <plugin>
                 <groupId>org.ops4j.pax.exam</groupId>
diff --git a/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappOsgiTest.java b/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappOsgiTest.java
index e315052..584ec0a 100644
--- a/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappOsgiTest.java
+++ b/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappOsgiTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -300,7 +300,7 @@
         String val = (String) xp.evaluate("/wadl:application/wadl:resources/@base", document, XPathConstants.STRING);
         assertEquals(baseUri.toString(), val.endsWith("/") ? val.substring(0, val.length() - 1) : val);
         val = (String) xp.evaluate("count(//wadl:resource)", document, XPathConstants.STRING);
-        assertEquals("Unexpected number of resource elements.", val, "4");
+        assertEquals("Unexpected number of resource elements.", "4", val);
         val = (String) xp.evaluate("count(//wadl:resource[@path='items'])", document, XPathConstants.STRING);
         assertEquals("Unexpected number of resource elements with 'items' path.", "1", val);
         val = (String) xp.evaluate("count(//wadl:resource[@path='{id}'])", document, XPathConstants.STRING);
diff --git a/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappTest.java b/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappTest.java
index e2050b1..918471c 100644
--- a/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappTest.java
+++ b/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -120,7 +120,7 @@
         String val = (String) xp.evaluate("/wadl:application/wadl:resources/@base", document, XPathConstants.STRING);
         assertEquals(baseUri.toString(), val.endsWith("/") ? val.substring(0, val.length() - 1) : val);
         val = (String) xp.evaluate("count(//wadl:resource)", document, XPathConstants.STRING);
-        assertEquals("Unexpected number of resource elements.", val, "4");
+        assertEquals("Unexpected number of resource elements.", "4", val);
         val = (String) xp.evaluate("count(//wadl:resource[@path='items'])", document, XPathConstants.STRING);
         assertEquals("Unexpected number of resource elements with 'items' path.", "1", val);
         val = (String) xp.evaluate("count(//wadl:resource[@path='{id}'])", document, XPathConstants.STRING);
diff --git a/examples/freemarker-webapp/src/test/java/org/glassfish/jersey/examples/freemarker/FreemarkerTest.java b/examples/freemarker-webapp/src/test/java/org/glassfish/jersey/examples/freemarker/FreemarkerTest.java
index 7c8abda..1fa542b 100644
--- a/examples/freemarker-webapp/src/test/java/org/glassfish/jersey/examples/freemarker/FreemarkerTest.java
+++ b/examples/freemarker-webapp/src/test/java/org/glassfish/jersey/examples/freemarker/FreemarkerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -19,8 +19,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/examples/groovy/pom.xml b/examples/groovy/pom.xml
index ccc4956..3009cba 100644
--- a/examples/groovy/pom.xml
+++ b/examples/groovy/pom.xml
@@ -45,6 +45,12 @@
             <groupId>org.glassfish.jersey.inject</groupId>
             <artifactId>jersey-hk2</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <version>5.8.2</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <profiles>
diff --git a/examples/groovy/src/test/groovy/org/glassfish/jersey/examples/groovy/GroovyResourceTest.groovy b/examples/groovy/src/test/groovy/org/glassfish/jersey/examples/groovy/GroovyResourceTest.groovy
index 11db4f6..eb0d749 100644
--- a/examples/groovy/src/test/groovy/org/glassfish/jersey/examples/groovy/GroovyResourceTest.groovy
+++ b/examples/groovy/src/test/groovy/org/glassfish/jersey/examples/groovy/GroovyResourceTest.groovy
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -13,10 +13,10 @@
 import org.glassfish.jersey.server.ResourceConfig
 import org.glassfish.jersey.test.JerseyTest
 import org.glassfish.jersey.test.TestProperties
-import org.junit.Test
+import org.junit.jupiter.api.Test
 
 import javax.ws.rs.core.Response
-import static org.junit.Assert.assertEquals
+import static org.junit.jupiter.api.Assertions.assertEquals
 
 /**
  * Test the availability of the {@link GroovyResource}.
diff --git a/examples/helloworld-benchmark/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java b/examples/helloworld-benchmark/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
index 6e7c046..00ede89 100644
--- a/examples/helloworld-benchmark/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
+++ b/examples/helloworld-benchmark/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -17,9 +17,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * {@link org.glassfish.jersey.examples.helloworld.HelloWorldResource} tests.
diff --git a/examples/helloworld-cdi2-se/src/test/java/org/glassfish/jersey/examples/helloworld/cdi2se/CounterTest.java b/examples/helloworld-cdi2-se/src/test/java/org/glassfish/jersey/examples/helloworld/cdi2se/CounterTest.java
index 9017419..42f8128 100644
--- a/examples/helloworld-cdi2-se/src/test/java/org/glassfish/jersey/examples/helloworld/cdi2se/CounterTest.java
+++ b/examples/helloworld-cdi2-se/src/test/java/org/glassfish/jersey/examples/helloworld/cdi2se/CounterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -13,8 +13,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests CDI counter resource.
diff --git a/examples/helloworld-cdi2-se/src/test/java/org/glassfish/jersey/examples/helloworld/cdi2se/HelloWorldTest.java b/examples/helloworld-cdi2-se/src/test/java/org/glassfish/jersey/examples/helloworld/cdi2se/HelloWorldTest.java
index 0bba28a..2880426 100644
--- a/examples/helloworld-cdi2-se/src/test/java/org/glassfish/jersey/examples/helloworld/cdi2se/HelloWorldTest.java
+++ b/examples/helloworld-cdi2-se/src/test/java/org/glassfish/jersey/examples/helloworld/cdi2se/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -13,8 +13,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests CDI helloworld resource.
diff --git a/examples/helloworld-netty/pom.xml b/examples/helloworld-netty/pom.xml
index 99ec59d..b27775d 100644
--- a/examples/helloworld-netty/pom.xml
+++ b/examples/helloworld-netty/pom.xml
@@ -59,6 +59,9 @@
                     <mainClass>org.glassfish.jersey.examples.helloworld.netty.App</mainClass>
                 </configuration>
             </plugin>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/examples/helloworld-netty/src/test/java/org/glassfish/jersey/examples/helloworld/netty/CustomLoggingFilter.java b/examples/helloworld-netty/src/test/java/org/glassfish/jersey/examples/helloworld/netty/CustomLoggingFilter.java
index 396abdd..219f219 100644
--- a/examples/helloworld-netty/src/test/java/org/glassfish/jersey/examples/helloworld/netty/CustomLoggingFilter.java
+++ b/examples/helloworld-netty/src/test/java/org/glassfish/jersey/examples/helloworld/netty/CustomLoggingFilter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -22,7 +22,7 @@
 import javax.ws.rs.container.ContainerResponseContext;
 import javax.ws.rs.container.ContainerResponseFilter;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Custom logging filter.
@@ -40,28 +40,28 @@
     @Override
     public void filter(ClientRequestContext context) throws IOException {
         LOGGER.info("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ClientRequestContext context, ClientResponseContext clientResponseContext) throws IOException {
         LOGGER.info("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         postFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context) throws IOException {
         LOGGER.info("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context, ContainerResponseContext containerResponseContext) throws IOException {
         LOGGER.info("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         postFilterCalled++;
     }
 }
diff --git a/examples/helloworld-netty/src/test/java/org/glassfish/jersey/examples/helloworld/netty/HelloWorldTest.java b/examples/helloworld-netty/src/test/java/org/glassfish/jersey/examples/helloworld/netty/HelloWorldTest.java
index 23e8956..44f5e2f 100644
--- a/examples/helloworld-netty/src/test/java/org/glassfish/jersey/examples/helloworld/netty/HelloWorldTest.java
+++ b/examples/helloworld-netty/src/test/java/org/glassfish/jersey/examples/helloworld/netty/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -33,15 +33,18 @@
 import org.glassfish.jersey.test.netty.NettyTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
-import org.glassfish.jersey.test.util.runner.RunSeparately;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
 
-@RunWith(ConcurrentRunner.class)
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class HelloWorldTest extends JerseyTest {
 
     @Override
@@ -62,7 +65,9 @@
     }
 
     @Test
-    @Ignore("not compatible with test framework (doesn't use client())")
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
+    @Disabled("not compatible with test framework (doesn't use client())")
     public void testHelloWorld() throws Exception {
         URL getUrl = UriBuilder.fromUri(getBaseUri()).path(App.ROOT_PATH).build().toURL();
         HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();
@@ -78,18 +83,24 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testConnection() {
         Response response = target().path(App.ROOT_PATH).request("text/plain").get();
         assertEquals(200, response.getStatus());
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testClientStringResponse() {
         String s = target().path(App.ROOT_PATH).request().get(String.class);
         assertEquals(HelloWorldResource.CLICHED_MESSAGE, s);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testAsyncClientRequests() throws InterruptedException {
         final int REQUESTS = 10;
         final CountDownLatch latch = new CountDownLatch(REQUESTS);
@@ -120,6 +131,8 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testHead() {
         Response response = target().path(App.ROOT_PATH).request().head();
         assertEquals(200, response.getStatus());
@@ -127,6 +140,8 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testFooBarOptions() {
         Response response = target().path(App.ROOT_PATH).request().header("Accept", "foo/bar").options();
         assertEquals(200, response.getStatus());
@@ -137,6 +152,8 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testTextPlainOptions() {
         Response response = target().path(App.ROOT_PATH).request().header("Accept", MediaType.TEXT_PLAIN).options();
         assertEquals(200, response.getStatus());
@@ -154,6 +171,8 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testMissingResourceNotFound() {
         Response response;
 
@@ -165,7 +184,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testLoggingFilterClientClass() {
         Client client = client();
         client.register(CustomLoggingFilter.class).property("foo", "bar");
@@ -177,7 +196,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testLoggingFilterClientInstance() {
         Client client = client();
         client.register(new CustomLoggingFilter()).property("foo", "bar");
@@ -189,7 +208,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testLoggingFilterTargetClass() {
         WebTarget target = target().path(App.ROOT_PATH);
         target.register(CustomLoggingFilter.class).property("foo", "bar");
@@ -201,7 +220,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testLoggingFilterTargetInstance() {
         WebTarget target = target().path(App.ROOT_PATH);
         target.register(new CustomLoggingFilter()).property("foo", "bar");
@@ -213,7 +232,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testConfigurationUpdate() {
         Client client1 = client();
         client1.register(CustomLoggingFilter.class).property("foo", "bar");
@@ -227,7 +246,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testQueryParameterGet() {
         String result = target().path(App.ROOT_PATH + "/query1").queryParam("test1", "expected1")
                 .queryParam("test2", "expected2").request().get(String.class);
@@ -235,7 +254,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testQueryParameterPost() {
         String result = target().path(App.ROOT_PATH + "/query2").queryParam("test1", "expected1")
                 .queryParam("test2", "expected2").request("text/plain").post(Entity.entity("entity", "text/plain"))
diff --git a/examples/helloworld-programmatic/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java b/examples/helloworld-programmatic/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
index f9596ef..a74b18f 100644
--- a/examples/helloworld-programmatic/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
+++ b/examples/helloworld-programmatic/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -18,10 +18,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class HelloWorldTest extends JerseyTest {
 
diff --git a/examples/helloworld-pure-jax-rs/pom.xml b/examples/helloworld-pure-jax-rs/pom.xml
index 4bc6916..eb09c25 100644
--- a/examples/helloworld-pure-jax-rs/pom.xml
+++ b/examples/helloworld-pure-jax-rs/pom.xml
@@ -40,8 +40,8 @@
             <artifactId>jersey-hk2</artifactId>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/examples/helloworld-pure-jax-rs/src/test/java/org/glassfish/jersey/examples/helloworld/jaxrs/HelloWorldTest.java b/examples/helloworld-pure-jax-rs/src/test/java/org/glassfish/jersey/examples/helloworld/jaxrs/HelloWorldTest.java
index 2562a4f..37e4e9a 100644
--- a/examples/helloworld-pure-jax-rs/src/test/java/org/glassfish/jersey/examples/helloworld/jaxrs/HelloWorldTest.java
+++ b/examples/helloworld-pure-jax-rs/src/test/java/org/glassfish/jersey/examples/helloworld/jaxrs/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -14,8 +14,8 @@
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import com.sun.net.httpserver.HttpServer;
 
diff --git a/examples/helloworld-spring-annotations/src/test/java/org/glassfish/jersey/examples/hello/spring/annotations/SpringRequestResourceTest.java b/examples/helloworld-spring-annotations/src/test/java/org/glassfish/jersey/examples/hello/spring/annotations/SpringRequestResourceTest.java
index 0f6fd4a..3ad9bea 100644
--- a/examples/helloworld-spring-annotations/src/test/java/org/glassfish/jersey/examples/hello/spring/annotations/SpringRequestResourceTest.java
+++ b/examples/helloworld-spring-annotations/src/test/java/org/glassfish/jersey/examples/hello/spring/annotations/SpringRequestResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -14,8 +14,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
@@ -35,16 +35,16 @@
     @Test
     public void testGreet() throws Exception {
         final String greeting = target("spring-resource").request().get(String.class);
-        Assert.assertEquals("hello, world 1!", greeting);
+        Assertions.assertEquals("hello, world 1!", greeting);
         final String greeting2 = target("spring-resource").request().get(String.class);
-        Assert.assertEquals("hello, world 2!", greeting2);
+        Assertions.assertEquals("hello, world 2!", greeting2);
     }
 
     @Test
     public void testGoodbye() {
         final String goodbye = target("spring-resource").path("goodbye").request().get(String.class);
-        Assert.assertEquals("goodbye, cruel world!", goodbye);
+        Assertions.assertEquals("goodbye, cruel world!", goodbye);
         final String norwegianGoodbye = target("spring-resource").path("norwegian-goodbye").request().get(String.class);
-        Assert.assertEquals("hadet, på badet!", norwegianGoodbye);
+        Assertions.assertEquals("hadet, på badet!", norwegianGoodbye);
     }
 }
diff --git a/examples/helloworld-spring-webapp/pom.xml b/examples/helloworld-spring-webapp/pom.xml
index 0610019..ce32294 100644
--- a/examples/helloworld-spring-webapp/pom.xml
+++ b/examples/helloworld-spring-webapp/pom.xml
@@ -76,8 +76,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/examples/helloworld-webapp/src/test/java/org/glassfish/jersey/examples/helloworld/webapp/HelloWorldTest.java b/examples/helloworld-webapp/src/test/java/org/glassfish/jersey/examples/helloworld/webapp/HelloWorldTest.java
index 9228165..a5b9f9b 100644
--- a/examples/helloworld-webapp/src/test/java/org/glassfish/jersey/examples/helloworld/webapp/HelloWorldTest.java
+++ b/examples/helloworld-webapp/src/test/java/org/glassfish/jersey/examples/helloworld/webapp/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -16,9 +16,9 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Simple test to check "Hello World!" is being returned from the helloworld resource.
diff --git a/examples/helloworld-weld/pom.xml b/examples/helloworld-weld/pom.xml
index 64b5bef..126585f 100644
--- a/examples/helloworld-weld/pom.xml
+++ b/examples/helloworld-weld/pom.xml
@@ -84,6 +84,9 @@
                     <mainClass>org.glassfish.jersey.examples.helloworld.App</mainClass>
                 </configuration>
             </plugin>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/AppScopedResourceTest.java b/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/AppScopedResourceTest.java
index 4b32463..e736aca 100644
--- a/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/AppScopedResourceTest.java
+++ b/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/AppScopedResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -17,10 +17,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 import org.jboss.weld.environment.se.Weld;
-
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test for the {@link AppScopedResource} JAX-RS resource class.
@@ -31,6 +32,7 @@
 
     Weld weld;
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         weld = new Weld();
@@ -38,6 +40,7 @@
         super.setUp();
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
diff --git a/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java b/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
index 9343440..c59b686 100644
--- a/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
+++ b/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -16,9 +16,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 import org.jboss.weld.environment.se.Weld;
-
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test for the {@link HelloWorldResource} JAX-RS resource class.
@@ -29,6 +30,7 @@
 
     private Weld weld;
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         weld = new Weld();
@@ -36,6 +38,7 @@
         super.setUp();
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
@@ -55,8 +58,9 @@
 
     @Test
     public void testHelloWorld() {
-        Response response = target().path("helloworld").queryParam("name", "Josef").request("text/plain").get();
+        String name = "Josef";
+        Response response = target().path("helloworld").queryParam("name", name).request("text/plain").get();
         assertEquals(200, response.getStatus());
-        assertEquals(String.format("Hello %s", "Josef"), response.readEntity(String.class));
+        assertEquals(String.format("Hello %s", name), response.readEntity(String.class));
     }
 }
diff --git a/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/RequestScopeAlignmentTest.java b/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/RequestScopeAlignmentTest.java
index e3dfea8..365d749 100644
--- a/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/RequestScopeAlignmentTest.java
+++ b/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/RequestScopeAlignmentTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,24 +10,18 @@
 
 package org.glassfish.jersey.examples.helloworld;
 
-import java.util.Arrays;
-import java.util.List;
-
 import javax.ws.rs.client.WebTarget;
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.jboss.weld.environment.se.Weld;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.startsWith;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for the request scoped managed bean resource.
@@ -38,13 +32,13 @@
 
     static Weld weld;
 
-    @BeforeClass
+    @BeforeAll
     public static void before() throws Exception {
         weld = new Weld();
         weld.initialize();
     }
 
-    @AfterClass
+    @AfterAll
     public static void after() throws Exception {
         weld.shutdown();
     }
diff --git a/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/RequestScopedResourceTest.java b/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/RequestScopedResourceTest.java
index 17213f1..47415b0 100644
--- a/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/RequestScopedResourceTest.java
+++ b/examples/helloworld-weld/src/test/java/org/glassfish/jersey/examples/helloworld/RequestScopedResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -13,21 +13,25 @@
 import java.util.Iterator;
 import java.util.Random;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
 
 import javax.ws.rs.core.Response;
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.util.runner.ConcurrentParameterizedRunner;
-
 import org.jboss.weld.environment.se.Weld;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Test request scoped resource. Number of various requests will be made in parallel
@@ -36,7 +40,7 @@
  *
  * @author Jakub Podlesak
  */
-@RunWith(ConcurrentParameterizedRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class RequestScopedResourceTest extends JerseyTest {
 
     // Total number of requests to make
@@ -55,13 +59,11 @@
      *
      * @return iterable test input data
      */
-    @Parameterized.Parameters
-    public static Iterable<Object[]> data() {
-        return new Iterable<Object[]>() {
-
+    public static Stream<Arguments> data() {
+        Iterable<Arguments> iterable = new Iterable<Arguments>() {
             @Override
-            public Iterator<Object[]> iterator() {
-                return new Iterator<Object[]>() {
+            public Iterator<Arguments> iterator() {
+                return new Iterator<Arguments>() {
 
                     @Override
                     public boolean hasNext() {
@@ -69,11 +71,9 @@
                     }
 
                     @Override
-                    public Object[] next() {
-                        Object[] result = new Object[1];
+                    public Arguments next() {
                         int nextValue = dataFeed.getAndIncrement();
-                        result[0] = String.format("%02d", nextValue);
-                        return result;
+                        return Arguments.of(String.format("%02d", nextValue));
                     }
 
                     @Override
@@ -83,20 +83,22 @@
                 };
             }
         };
+        return StreamSupport.stream(iterable.spliterator(), false);
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void before() throws Exception {
         weld = new Weld();
         weld.initialize();
     }
 
-    @AfterClass
+    @AfterAll
     public static void after() throws Exception {
         weld.shutdown();
     }
 
     @Override
+    @AfterAll
     public void tearDown() throws Exception {
         super.tearDown();
         System.out.printf("SYNC: %d, ASYNC: %d, STRAIGHT: %d%n",
@@ -114,7 +116,9 @@
     final AtomicInteger parameterizedAsyncCounter = new AtomicInteger(0);
     final AtomicInteger straightCounter = new AtomicInteger(0);
 
-    @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ParameterizedTest
+    @MethodSource("data")
     public void testRequestScopedResource(final String param) {
 
         String path;
@@ -139,7 +143,7 @@
 
         final Response response = target().path(path).queryParam("q", param).request("text/plain").get();
 
-        assertNotNull(String.format("Request failed for %s", path), response);
+        assertNotNull(response, String.format("Request failed for %s", path));
         assertEquals(200, response.getStatus());
         assertEquals(expected, response.readEntity(String.class));
     }
diff --git a/examples/helloworld/pom.xml b/examples/helloworld/pom.xml
index db2aeef..d45d38c 100644
--- a/examples/helloworld/pom.xml
+++ b/examples/helloworld/pom.xml
@@ -65,6 +65,9 @@
                     <mainClass>org.glassfish.jersey.examples.helloworld.App</mainClass>
                 </configuration>
             </plugin>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/examples/helloworld/src/test/java/org/glassfish/jersey/examples/helloworld/CustomLoggingFilter.java b/examples/helloworld/src/test/java/org/glassfish/jersey/examples/helloworld/CustomLoggingFilter.java
index 4e04d46..c37f6bd 100644
--- a/examples/helloworld/src/test/java/org/glassfish/jersey/examples/helloworld/CustomLoggingFilter.java
+++ b/examples/helloworld/src/test/java/org/glassfish/jersey/examples/helloworld/CustomLoggingFilter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -21,7 +21,7 @@
 import javax.ws.rs.container.ContainerResponseContext;
 import javax.ws.rs.container.ContainerResponseFilter;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Custom logging filter.
@@ -37,28 +37,28 @@
     @Override
     public void filter(ClientRequestContext context) throws IOException {
         System.out.println("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ClientRequestContext context, ClientResponseContext clientResponseContext) throws IOException {
         System.out.println("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getConfiguration().getProperty("foo"), "bar");
+        assertEquals("bar", context.getConfiguration().getProperty("foo"));
         postFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context) throws IOException {
         System.out.println("CustomLoggingFilter.preFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         preFilterCalled++;
     }
 
     @Override
     public void filter(ContainerRequestContext context, ContainerResponseContext containerResponseContext) throws IOException {
         System.out.println("CustomLoggingFilter.postFilter called");
-        assertEquals(context.getProperty("foo"), "bar");
+        assertEquals("bar", context.getProperty("foo"));
         postFilterCalled++;
     }
 }
diff --git a/examples/helloworld/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java b/examples/helloworld/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
index 538c212..bf0d7d5 100644
--- a/examples/helloworld/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
+++ b/examples/helloworld/src/test/java/org/glassfish/jersey/examples/helloworld/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -27,17 +27,19 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
-import org.glassfish.jersey.test.util.runner.RunSeparately;
 
-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.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class HelloWorldTest extends JerseyTest {
 
     @Override
@@ -58,7 +60,9 @@
 //    }
 
     @Test
-    @Ignore("not compatible with test framework (doesn't use client())")
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
+    @Disabled("not compatible with test framework (doesn't use client())")
     public void testHelloWorld() throws Exception {
         URL getUrl = UriBuilder.fromUri(getBaseUri()).path(App.ROOT_PATH).build().toURL();
         HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();
@@ -74,18 +78,24 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testConnection() {
         Response response = target().path(App.ROOT_PATH).request("text/plain").get();
         assertEquals(200, response.getStatus());
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testClientStringResponse() {
         String s = target().path(App.ROOT_PATH).request().get(String.class);
         assertEquals(HelloWorldResource.CLICHED_MESSAGE, s);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testAsyncClientRequests() throws InterruptedException {
         final int REQUESTS = 10;
         final CountDownLatch latch = new CountDownLatch(REQUESTS);
@@ -116,6 +126,8 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testHead() {
         Response response = target().path(App.ROOT_PATH).request().head();
         assertEquals(200, response.getStatus());
@@ -123,6 +135,8 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testFooBarOptions() {
         Response response = target().path(App.ROOT_PATH).request().header("Accept", "foo/bar").options();
         assertEquals(200, response.getStatus());
@@ -133,6 +147,8 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testTextPlainOptions() {
         Response response = target().path(App.ROOT_PATH).request().header("Accept", MediaType.TEXT_PLAIN).options();
         assertEquals(200, response.getStatus());
@@ -150,6 +166,8 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ)
     public void testMissingResourceNotFound() {
         Response response;
 
@@ -161,7 +179,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testLoggingFilterClientClass() {
         Client client = client();
         client.register(CustomLoggingFilter.class).property("foo", "bar");
@@ -173,7 +191,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testLoggingFilterClientInstance() {
         Client client = client();
         client.register(new CustomLoggingFilter()).property("foo", "bar");
@@ -185,7 +203,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testLoggingFilterTargetClass() {
         WebTarget target = target().path(App.ROOT_PATH);
         target.register(CustomLoggingFilter.class).property("foo", "bar");
@@ -197,7 +215,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testLoggingFilterTargetInstance() {
         WebTarget target = target().path(App.ROOT_PATH);
         target.register(new CustomLoggingFilter()).property("foo", "bar");
@@ -209,7 +227,7 @@
     }
 
     @Test
-    @RunSeparately
+    @ResourceLock(value = "dummy", mode = ResourceAccessMode.READ_WRITE)
     public void testConfigurationUpdate() {
         Client client1 = client();
         client1.register(CustomLoggingFilter.class).property("foo", "bar");
diff --git a/examples/http-patch/src/test/java/org/glassfish/jersey/examples/httppatch/HttpPatchTest.java b/examples/http-patch/src/test/java/org/glassfish/jersey/examples/httppatch/HttpPatchTest.java
index 7c4d81f..e43a9f5 100644
--- a/examples/http-patch/src/test/java/org/glassfish/jersey/examples/httppatch/HttpPatchTest.java
+++ b/examples/http-patch/src/test/java/org/glassfish/jersey/examples/httppatch/HttpPatchTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * HTTP PATCH Example unit tests.
diff --git a/examples/http-trace/src/test/java/org/glassfish/jersey/examples/httptrace/TraceSupportTest.java b/examples/http-trace/src/test/java/org/glassfish/jersey/examples/httptrace/TraceSupportTest.java
index 4dec416..c2af58b 100644
--- a/examples/http-trace/src/test/java/org/glassfish/jersey/examples/httptrace/TraceSupportTest.java
+++ b/examples/http-trace/src/test/java/org/glassfish/jersey/examples/httptrace/TraceSupportTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -24,10 +24,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 public class TraceSupportTest extends JerseyTest {
 
@@ -59,9 +59,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsProgrammatic) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // toLowerCase - http header field names are case insensitive
-                    responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                    responseEntity.contains(expectedFragment),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
@@ -73,9 +73,9 @@
 
         String responseEntity = response.readEntity(String.class);
         for (String expectedFragment : expectedFragmentsAnnotated) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // toLowerCase - http header field names are case insensitive
-                    responseEntity.contains(expectedFragment));
+            assertTrue(// toLowerCase - http header field names are case insensitive
+                    responseEntity.contains(expectedFragment),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
diff --git a/examples/https-clientserver-grizzly/pom.xml b/examples/https-clientserver-grizzly/pom.xml
index c96284f..668688a 100644
--- a/examples/https-clientserver-grizzly/pom.xml
+++ b/examples/https-clientserver-grizzly/pom.xml
@@ -54,8 +54,8 @@
             <artifactId>jakarta.xml.bind-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/examples/https-clientserver-grizzly/src/test/java/org/glassfish/jersey/examples/httpsclientservergrizzly/MainTest.java b/examples/https-clientserver-grizzly/src/test/java/org/glassfish/jersey/examples/httpsclientservergrizzly/MainTest.java
index ce21918..09cc994 100644
--- a/examples/https-clientserver-grizzly/src/test/java/org/glassfish/jersey/examples/httpsclientservergrizzly/MainTest.java
+++ b/examples/https-clientserver-grizzly/src/test/java/org/glassfish/jersey/examples/httpsclientservergrizzly/MainTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -24,11 +24,11 @@
 import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.logging.LoggingFeature;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * This test class starts the grizzly server and then client performs several SSL (https)
@@ -48,7 +48,7 @@
     private final Object serverGuard = new Object();
     private Server server = null;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         synchronized (serverGuard) {
             if (server != null) {
@@ -59,7 +59,7 @@
         }
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         synchronized (serverGuard) {
             if (server == null) {
diff --git a/examples/java8-webapp/src/test/java/org/glassfish/jersey/examples/java8/DefaultMethodResourceTest.java b/examples/java8-webapp/src/test/java/org/glassfish/jersey/examples/java8/DefaultMethodResourceTest.java
index 3515b51..fd63730 100644
--- a/examples/java8-webapp/src/test/java/org/glassfish/jersey/examples/java8/DefaultMethodResourceTest.java
+++ b/examples/java8-webapp/src/test/java/org/glassfish/jersey/examples/java8/DefaultMethodResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -15,8 +15,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test usage of Java8's interface default methods as resource methods.
diff --git a/examples/java8-webapp/src/test/java/org/glassfish/jersey/examples/java8/LambdaResourceTest.java b/examples/java8-webapp/src/test/java/org/glassfish/jersey/examples/java8/LambdaResourceTest.java
index ce52d78..96e3145 100644
--- a/examples/java8-webapp/src/test/java/org/glassfish/jersey/examples/java8/LambdaResourceTest.java
+++ b/examples/java8-webapp/src/test/java/org/glassfish/jersey/examples/java8/LambdaResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -15,9 +15,9 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test usage of Java SE 8 lambdas in JAX-RS resource methods.
diff --git a/examples/jaxb/src/test/java/org/glassfish/jersey/examples/jaxb/JaxbTest.java b/examples/jaxb/src/test/java/org/glassfish/jersey/examples/jaxb/JaxbTest.java
index c887ae3..ff63be2 100644
--- a/examples/jaxb/src/test/java/org/glassfish/jersey/examples/jaxb/JaxbTest.java
+++ b/examples/jaxb/src/test/java/org/glassfish/jersey/examples/jaxb/JaxbTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -23,9 +23,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Jersey JAXB example test.
@@ -49,8 +49,7 @@
     @Test
     public void testApplicationWadl() {
         String applicationWadl = target().path("application.wadl").request().get(String.class);
-        assertTrue("Something wrong. Returned wadl length is not > 0",
-                applicationWadl.length() > 0);
+        assertTrue(applicationWadl.length() > 0, "Something wrong. Returned wadl length is not > 0");
     }
 
     @Test
diff --git a/examples/jaxrs-types-injection/src/test/java/org/glassfish/jersey/examples/jaxrstypeinjection/JaxrsTypeInjectionTest.java b/examples/jaxrs-types-injection/src/test/java/org/glassfish/jersey/examples/jaxrstypeinjection/JaxrsTypeInjectionTest.java
index d9e87e1..7c113f5 100644
--- a/examples/jaxrs-types-injection/src/test/java/org/glassfish/jersey/examples/jaxrstypeinjection/JaxrsTypeInjectionTest.java
+++ b/examples/jaxrs-types-injection/src/test/java/org/glassfish/jersey/examples/jaxrstypeinjection/JaxrsTypeInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -16,8 +16,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class JaxrsTypeInjectionTest extends JerseyTest {
 
@@ -91,9 +91,9 @@
                 .toLowerCase();
 
         for (String expectedFragment : expectedFragmentsProgrammatic) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // http header field names are case insensitive
-                    responseEntity.contains(expectedFragment.toLowerCase()));
+            assertTrue(// http header field names are case insensitive
+                    responseEntity.contains(expectedFragment.toLowerCase()),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
@@ -103,9 +103,9 @@
                 .toLowerCase();
 
         for (String expectedFragment : expectedFragmentsAnnotatedInstance) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // http header field names are case insensitive
-                    responseEntity.contains(expectedFragment.toLowerCase()));
+            assertTrue(// http header field names are case insensitive
+                    responseEntity.contains(expectedFragment.toLowerCase()),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 
@@ -115,9 +115,9 @@
                 .toLowerCase();
 
         for (String expectedFragment : expectedFragmentsAnnotatedMethod) {
-            assertTrue("Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity,
-                    // http header field names are case insensitive
-                    responseEntity.contains(expectedFragment.toLowerCase()));
+            assertTrue(// http header field names are case insensitive
+                    responseEntity.contains(expectedFragment.toLowerCase()),
+                    "Expected fragment '" + expectedFragment + "' not found in response:\n" + responseEntity);
         }
     }
 }
diff --git a/examples/jersey-ejb/src/test/java/org/glassfish/jersey/examples/jersey_ejb/test/MessageBoardTest.java b/examples/jersey-ejb/src/test/java/org/glassfish/jersey/examples/jersey_ejb/test/MessageBoardTest.java
index 5d5b455..b96640f 100644
--- a/examples/jersey-ejb/src/test/java/org/glassfish/jersey/examples/jersey_ejb/test/MessageBoardTest.java
+++ b/examples/jersey-ejb/src/test/java/org/glassfish/jersey/examples/jersey_ejb/test/MessageBoardTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -21,10 +21,10 @@
 import org.glassfish.jersey.examples.jersey_ejb.resources.MyApplication;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Basic test for adding/removing messages.
@@ -56,9 +56,8 @@
     public void testListMessages() {
         Response response = target().path("app/messages").request(MediaType.TEXT_HTML).get();
 
-        assertEquals(
-                String.format("Response status should be 200. Current value is %d.", response.getStatus()),
-                200, response.getStatus());
+        assertEquals(200, response.getStatus(),
+                String.format("Response status should be 200. Current value is %d.", response.getStatus()));
     }
 
     @Test
@@ -67,8 +66,8 @@
         Response response = target().path("app/messages").request(MediaType.TEXT_PLAIN)
                 .post(Entity.entity("hello world!", MediaType.TEXT_PLAIN));
 
-        assertEquals("Response status should be CREATED. Current value is \"" + response.getStatus() + "\"",
-                Response.Status.CREATED.getStatusCode(), response.getStatus());
+        assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus(),
+                "Response status should be CREATED. Current value is \"" + response.getStatus() + "\"");
 
         client().target(response.getLocation()).request().delete(); // remove added message
     }
@@ -91,14 +90,14 @@
 
         Response firstDeleteResponse = client().target(u).request().delete();
         final int successfulDeleteResponseStatus = firstDeleteResponse.getStatus();
-        assertTrue("First DELETE request should return with a 2xx status code",
-                (200 <= successfulDeleteResponseStatus) && (successfulDeleteResponseStatus < 300));
+        assertTrue((200 <= successfulDeleteResponseStatus) && (successfulDeleteResponseStatus < 300),
+                "First DELETE request should return with a 2xx status code");
 
         Response nonExistentGetResponse = client().target(u).request().get();
-        assertEquals("GET request to a non existent resource should return 404", 404, nonExistentGetResponse.getStatus());
+        assertEquals(404, nonExistentGetResponse.getStatus(), "GET request to a non existent resource should return 404");
 
         Response nonExistentDeleteResponse = client().target(u).request().delete();
-        assertEquals("DELETE request to a non existent resource should return 404", 404, nonExistentDeleteResponse.getStatus());
+        assertEquals(404, nonExistentDeleteResponse.getStatus(), "DELETE request to a non existent resource should return 404");
     }
 
 }
diff --git a/examples/json-jackson/src/test/java/org/glassfish/jersey/examples/jackson/JacksonTest.java b/examples/json-jackson/src/test/java/org/glassfish/jersey/examples/jackson/JacksonTest.java
index 9bef3a6..3e93068 100644
--- a/examples/json-jackson/src/test/java/org/glassfish/jersey/examples/jackson/JacksonTest.java
+++ b/examples/json-jackson/src/test/java/org/glassfish/jersey/examples/jackson/JacksonTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -21,20 +21,21 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import org.junit.runner.RunWith;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Jakub Podlesak
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class JacksonTest extends JerseyTest {
 
     @Override
@@ -51,6 +52,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testEmptyArrayPresent() {
         WebTarget target = target();
         String responseMsg = target.path("emptyArrayResource").request(MediaType.APPLICATION_JSON).get(String.class);
@@ -58,6 +60,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJSONPPresent() {
         WebTarget target = target();
         String responseMsg = target.path("nonJaxbResource").request("application/javascript").get(String.class);
@@ -65,6 +68,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJSONDoesNotReflectJSONPWrapper() {
         WebTarget target = target();
         String responseMsg = target.path("nonJaxbResource").request("application/json").get(String.class);
@@ -72,6 +76,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testCombinedAnnotationResource() {
         WebTarget target = target();
         String responseMsg = target.path("combinedAnnotations").request("application/json").get(String.class);
@@ -79,6 +84,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testEmptyArrayBean() {
         WebTarget target = target();
         EmptyArrayBean responseMsg = target.path("emptyArrayResource").request(MediaType.APPLICATION_JSON)
@@ -87,6 +93,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testCombinedAnnotationBean() {
         WebTarget target = target();
         CombinedAnnotationBean responseMsg = target.path("combinedAnnotations").request("application/json")
@@ -95,7 +102,8 @@
     }
 
     @Test
-    @Ignore
+    @Execution(ExecutionMode.CONCURRENT)
+    @Disabled
     // TODO un-ignore once a JSON reader for "application/javascript" is supported
     public void testJSONPBean() {
         WebTarget target = target();
@@ -109,6 +117,7 @@
      * <p/>
      */
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testApplicationWadl() {
         WebTarget target = target();
         String serviceWadl = target.path("application.wadl").request(MediaTypes.WADL_TYPE).get(String.class);
@@ -121,6 +130,7 @@
      * 400 - bad request instead of 500 - server error
      */
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testExceptionMapping() {
         enable(TestProperties.LOG_TRAFFIC);
         // create a request with invalid json string to cause an exception in Jackson
diff --git a/examples/json-jackson1/src/test/java/org/glassfish/jersey/examples/jackson1/Jackson1Test.java b/examples/json-jackson1/src/test/java/org/glassfish/jersey/examples/jackson1/Jackson1Test.java
index d2c9be0..ff56201 100644
--- a/examples/json-jackson1/src/test/java/org/glassfish/jersey/examples/jackson1/Jackson1Test.java
+++ b/examples/json-jackson1/src/test/java/org/glassfish/jersey/examples/jackson1/Jackson1Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -22,11 +22,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Jakub Podlesak
@@ -81,7 +81,7 @@
     }
 
     @Test
-    @Ignore
+    @Disabled
     // TODO un-ignore once a JSON reader for "application/javascript" is supported
     public void testJSONPBean() {
         assertNotNull(target("nonJaxbResource").request("application/javascript").get(NonJaxbBean.class));
diff --git a/examples/json-jettison/src/test/java/org/glassfish/jersey/examples/jettison/JsonJettisonTest.java b/examples/json-jettison/src/test/java/org/glassfish/jersey/examples/jettison/JsonJettisonTest.java
index 0f36b6b..4943e6c 100644
--- a/examples/json-jettison/src/test/java/org/glassfish/jersey/examples/jettison/JsonJettisonTest.java
+++ b/examples/json-jettison/src/test/java/org/glassfish/jersey/examples/jettison/JsonJettisonTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -21,10 +21,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Jakub Podlesak
@@ -44,7 +44,7 @@
         config.register(new JettisonFeature()).register(JaxbContextResolver.class);
     }
 
-    @Before
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         super.setUp();
@@ -60,7 +60,7 @@
     @Test
     public void testApplicationWadl() {
         String applicationWadl = target().path("application.wadl").request().get(String.class);
-        assertTrue("Something wrong. Returned wadl length is not > 0", applicationWadl.length() > 0);
+        assertTrue(applicationWadl.length() > 0, "Something wrong. Returned wadl length is not > 0");
     }
 
     /**
@@ -71,7 +71,7 @@
         // get the initial representation
         Flights flights = target().path("flights").request("application/json").get(Flights.class);
         // check that there are two flight entries
-        assertEquals("Expected number of initial entries not found", 2, flights.getFlight().size());
+        assertEquals(2, flights.getFlight().size(), "Expected number of initial entries not found");
     }
 
     /**
@@ -83,7 +83,7 @@
         Flights flights = target().path("flights")
                 .request("application/json").get(Flights.class);
         // check that there are two flight entries
-        assertEquals("Expected number of initial entries not found", 2, flights.getFlight().size());
+        assertEquals(2, flights.getFlight().size(), "Expected number of initial entries not found");
 
         // remove the second flight entry
         if (flights.getFlight().size() > 1) {
@@ -100,10 +100,10 @@
         // get the updated list out from the server:
         Flights updatedFlights = target().path("flights").request("application/json").get(Flights.class);
         //check that there is only one flight entry
-        assertEquals("Remaining number of flight entries do not match the expected value", 1, updatedFlights.getFlight().size());
+        assertEquals(1, updatedFlights.getFlight().size(), "Remaining number of flight entries do not match the expected value");
         // check that the flight entry in retrieved list has FlightID OK!@%
-        assertEquals("Retrieved flight ID doesn't match the expected value", "OK125",
-                updatedFlights.getFlight().get(0).getFlightId());
+        assertEquals("OK125", updatedFlights.getFlight().get(0).getFlightId(),
+                "Retrieved flight ID doesn't match the expected value");
     }
 
     /**
@@ -114,7 +114,7 @@
         // get the initial representation
         Flights flights = target().path("flights").request("application/xml").get(Flights.class);
         // check that there are two flight entries
-        assertEquals("Expected number of initial entries not found", 2, flights.getFlight().size());
+        assertEquals(2, flights.getFlight().size(), "Expected number of initial entries not found");
     }
 
     /**
@@ -125,7 +125,7 @@
         // get the initial representation
         Flights flights = target().path("flights").request("application/XML").get(Flights.class);
         // check that there are two flight entries
-        assertEquals("Expected number of initial entries not found", 2, flights.getFlight().size());
+        assertEquals(2, flights.getFlight().size(), "Expected number of initial entries not found");
 
         // remove the second flight entry
         if (flights.getFlight().size() > 1) {
@@ -142,10 +142,10 @@
         // get the updated list out from the server:
         Flights updatedFlights = target().path("flights").request("application/XML").get(Flights.class);
         //check that there is only one flight entry
-        assertEquals("Remaining number of flight entries do not match the expected value", 1, updatedFlights.getFlight().size());
+        assertEquals(1, updatedFlights.getFlight().size(), "Remaining number of flight entries do not match the expected value");
         // check that the flight entry in retrieved list has FlightID OK!@%
-        assertEquals("Retrieved flight ID doesn't match the expected value", "OK125",
-                updatedFlights.getFlight().get(0).getFlightId());
+        assertEquals("OK125", updatedFlights.getFlight().get(0).getFlightId(),
+                "Retrieved flight ID doesn't match the expected value");
     }
 
     /**
@@ -158,6 +158,6 @@
         // get the initial representation
         List<AircraftType> aircraftTypes = target().path("aircrafts").request("application/json").get(listOfAircrafts);
         // check that there are two aircraft type entries
-        assertEquals("Expected number of initial aircraft types not found", 2, aircraftTypes.size());
+        assertEquals(2, aircraftTypes.size(), "Expected number of initial aircraft types not found");
     }
 }
diff --git a/examples/json-moxy/src/test/java/org/glassfish/jersey/examples/jsonmoxy/JsonResourceTest.java b/examples/json-moxy/src/test/java/org/glassfish/jersey/examples/jsonmoxy/JsonResourceTest.java
index 8ea7611..86af7ae 100644
--- a/examples/json-moxy/src/test/java/org/glassfish/jersey/examples/jsonmoxy/JsonResourceTest.java
+++ b/examples/json-moxy/src/test/java/org/glassfish/jersey/examples/jsonmoxy/JsonResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -19,8 +19,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
diff --git a/examples/json-processing-webapp/src/test/java/org/glassfish/jersey/examples/jsonp/JsonProcessingResourceTest.java b/examples/json-processing-webapp/src/test/java/org/glassfish/jersey/examples/jsonp/JsonProcessingResourceTest.java
index 9b686c1..f8566fd 100644
--- a/examples/json-processing-webapp/src/test/java/org/glassfish/jersey/examples/jsonp/JsonProcessingResourceTest.java
+++ b/examples/json-processing-webapp/src/test/java/org/glassfish/jersey/examples/jsonp/JsonProcessingResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -32,9 +32,9 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Michal Gajdos
diff --git a/examples/json-with-padding/src/test/java/org/glassfish/jersey/examples/jsonp/JsonWithPaddingTest.java b/examples/json-with-padding/src/test/java/org/glassfish/jersey/examples/jsonp/JsonWithPaddingTest.java
index c674923..79a508e 100644
--- a/examples/json-with-padding/src/test/java/org/glassfish/jersey/examples/jsonp/JsonWithPaddingTest.java
+++ b/examples/json-with-padding/src/test/java/org/glassfish/jersey/examples/jsonp/JsonWithPaddingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -19,9 +19,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Jakub Podlesak
@@ -44,7 +44,7 @@
     public void testApplicationWadl() {
         WebTarget target = target();
         String applicationWadl = target.path("application.wadl").request().get(String.class);
-        assertTrue("Something wrong. Returned wadl length is not > 0", applicationWadl.length() > 0);
+        assertTrue(applicationWadl.length() > 0, "Something wrong. Returned wadl length is not > 0");
     }
 
     /**
@@ -57,7 +57,7 @@
         // get the initial representation
         List<ChangeRecordBean> changes = target.path("changes").request("application/json").get(genericType);
         // check that there are two changes entries
-        assertEquals("Expected number of initial changes not found", 5, changes.size());
+        assertEquals(5, changes.size(), "Expected number of initial changes not found");
     }
 
     /**
diff --git a/examples/managed-beans-webapp/src/test/java/org/glassfish/jersey/examples/managedbeans/ManagedBeanWebAppTest.java b/examples/managed-beans-webapp/src/test/java/org/glassfish/jersey/examples/managedbeans/ManagedBeanWebAppTest.java
index 662685c..f6ea946 100644
--- a/examples/managed-beans-webapp/src/test/java/org/glassfish/jersey/examples/managedbeans/ManagedBeanWebAppTest.java
+++ b/examples/managed-beans-webapp/src/test/java/org/glassfish/jersey/examples/managedbeans/ManagedBeanWebAppTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -22,7 +22,7 @@
 import org.glassfish.jersey.message.internal.MediaTypes;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
diff --git a/examples/managed-client-simple-webapp/src/test/java/org/glassfish/jersey/examples/managedclientsimple/ManagedClientSimpleTest.java b/examples/managed-client-simple-webapp/src/test/java/org/glassfish/jersey/examples/managedclientsimple/ManagedClientSimpleTest.java
index 8610f89..d49a024 100644
--- a/examples/managed-client-simple-webapp/src/test/java/org/glassfish/jersey/examples/managedclientsimple/ManagedClientSimpleTest.java
+++ b/examples/managed-client-simple-webapp/src/test/java/org/glassfish/jersey/examples/managedclientsimple/ManagedClientSimpleTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Miroslav Fuksa
diff --git a/examples/managed-client-webapp/src/test/java/org/glassfish/jersey/examples/managedclient/ManagedClientTest.java b/examples/managed-client-webapp/src/test/java/org/glassfish/jersey/examples/managedclient/ManagedClientTest.java
index bc5a38e..68fcabd 100644
--- a/examples/managed-client-webapp/src/test/java/org/glassfish/jersey/examples/managedclient/ManagedClientTest.java
+++ b/examples/managed-client-webapp/src/test/java/org/glassfish/jersey/examples/managedclient/ManagedClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -21,8 +21,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Jersey managed client example tests.
diff --git a/examples/managed-client/src/test/java/org/glassfish/jersey/examples/managedclient/ManagedClientTest.java b/examples/managed-client/src/test/java/org/glassfish/jersey/examples/managedclient/ManagedClientTest.java
index dc6a1be..25de43c 100644
--- a/examples/managed-client/src/test/java/org/glassfish/jersey/examples/managedclient/ManagedClientTest.java
+++ b/examples/managed-client/src/test/java/org/glassfish/jersey/examples/managedclient/ManagedClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -18,8 +18,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Jersey managed client example tests.
diff --git a/examples/multipart-webapp/src/test/java/org/glassfish/jersey/examples/multipart/webapp/MultiPartWebAppTest.java b/examples/multipart-webapp/src/test/java/org/glassfish/jersey/examples/multipart/webapp/MultiPartWebAppTest.java
index ad1a346..677ff22 100644
--- a/examples/multipart-webapp/src/test/java/org/glassfish/jersey/examples/multipart/webapp/MultiPartWebAppTest.java
+++ b/examples/multipart-webapp/src/test/java/org/glassfish/jersey/examples/multipart/webapp/MultiPartWebAppTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -35,9 +35,9 @@
 import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.w3c.dom.Document;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for {@code MultipartResource} class.
diff --git a/examples/osgi-helloworld-webapp/functional-test/pom.xml b/examples/osgi-helloworld-webapp/functional-test/pom.xml
index dc12eaa..038517f 100644
--- a/examples/osgi-helloworld-webapp/functional-test/pom.xml
+++ b/examples/osgi-helloworld-webapp/functional-test/pom.xml
@@ -123,6 +123,7 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
+            <version>${junit4.version}</version>
             <scope>test</scope>
         </dependency>
 
diff --git a/examples/osgi-http-service/functional-test/pom.xml b/examples/osgi-http-service/functional-test/pom.xml
index 2777ad5..60f5a0a 100644
--- a/examples/osgi-http-service/functional-test/pom.xml
+++ b/examples/osgi-http-service/functional-test/pom.xml
@@ -122,6 +122,7 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
+            <version>${junit4.version}</version>
             <scope>test</scope>
         </dependency>
 
@@ -218,7 +219,7 @@
                                 <!--
                                 excluded due to javax.servlet-api collision -
                                 more than one version is required, so it is not possible to execute that test.
-                                (since pax-exam version 4.13.4)
+                                (since pax-exam version 4.13.5)
                                   -->
                                 <exclude>org.glassfish.jersey.examples.osgihttpservice.test.GrizzlyHttpServiceFelixTest</exclude>
                             </excludes>
diff --git a/examples/reload/src/test/java/org/glassfish/jersey/examples/reload/ReloadTest.java b/examples/reload/src/test/java/org/glassfish/jersey/examples/reload/ReloadTest.java
index 81079e4..bb5763f 100644
--- a/examples/reload/src/test/java/org/glassfish/jersey/examples/reload/ReloadTest.java
+++ b/examples/reload/src/test/java/org/glassfish/jersey/examples/reload/ReloadTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -19,9 +19,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * This is to test the reload feature without updating the resources text file.
@@ -65,7 +65,7 @@
         // check stats
         response = target().path("stats").request(MediaType.TEXT_PLAIN).get();
         assertEquals(200, response.getStatus());
-        assertTrue("1 expected as number of arrivals hits in stats", response.readEntity(String.class).contains("1"));
+        assertTrue(response.readEntity(String.class).contains("1"), "1 expected as number of arrivals hits in stats");
 
         // another arrivals hit
         response = target().path("arrivals").request(MediaType.TEXT_PLAIN).get();
@@ -74,7 +74,7 @@
         // check updated stats
         response = target().path("stats").request(MediaType.TEXT_PLAIN).get();
         assertEquals(200, response.getStatus());
-        assertTrue("2 expected as number of arrivals hits in stats", response.readEntity(String.class).contains("2"));
+        assertTrue(response.readEntity(String.class).contains("2"), "2 expected as number of arrivals hits in stats");
 
         // remove stats
         container.reload(new ResourceConfig(ArrivalsResource.class));
diff --git a/examples/rx-client-webapp/src/test/java/org/glassfish/jersey/examples/rx/RxClientsTest.java b/examples/rx-client-webapp/src/test/java/org/glassfish/jersey/examples/rx/RxClientsTest.java
index 271d91f..737a28c 100644
--- a/examples/rx-client-webapp/src/test/java/org/glassfish/jersey/examples/rx/RxClientsTest.java
+++ b/examples/rx-client-webapp/src/test/java/org/glassfish/jersey/examples/rx/RxClientsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -17,7 +17,7 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.ServletDeploymentContext;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/examples/server-async-managed/src/test/java/org/glassfish/jersey/examples/server/async/managed/ManagedAsyncResourceTest.java b/examples/server-async-managed/src/test/java/org/glassfish/jersey/examples/server/async/managed/ManagedAsyncResourceTest.java
index c8f54eb..07032f0 100644
--- a/examples/server-async-managed/src/test/java/org/glassfish/jersey/examples/server/async/managed/ManagedAsyncResourceTest.java
+++ b/examples/server-async-managed/src/test/java/org/glassfish/jersey/examples/server/async/managed/ManagedAsyncResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -34,10 +34,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test for the asynchronous managed resources example.
@@ -149,9 +149,8 @@
         LOGGER.info(messageBuilder.toString());
 
         for (Map.Entry<Integer, String> entry : getResponses.entrySet()) {
-            assertTrue(
-                    "Unexpected GET notification response for message " + entry.getKey(),
-                    entry.getValue().contains(expectedResponse));
+            assertTrue(entry.getValue().contains(expectedResponse),
+                    "Unexpected GET notification response for message " + entry.getKey());
         }
         assertEquals(MAX_MESSAGES, getResponses.size());
     }
@@ -293,9 +292,8 @@
         LOGGER.info(messageBuilder.toString());
 
         for (Map.Entry<Integer, Integer> postResponseEntry : postResponses.entrySet()) {
-            assertEquals(
-                    "Unexpected POST notification response for message " + postResponseEntry.getKey(),
-                    200, postResponseEntry.getValue().intValue());
+            assertEquals(200, postResponseEntry.getValue().intValue(),
+                    "Unexpected POST notification response for message " + postResponseEntry.getKey());
         }
 
         final List<Integer> lost = new LinkedList<Integer>();
diff --git a/examples/server-async-standalone/client/pom.xml b/examples/server-async-standalone/client/pom.xml
index 567abdc..b03d5ba 100644
--- a/examples/server-async-standalone/client/pom.xml
+++ b/examples/server-async-standalone/client/pom.xml
@@ -46,8 +46,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/examples/server-async-standalone/client/src/test/java/org/glassfish/jersey/examples/server/async/MainTest.java b/examples/server-async-standalone/client/src/test/java/org/glassfish/jersey/examples/server/async/MainTest.java
index 2826e44..240b53a 100644
--- a/examples/server-async-standalone/client/src/test/java/org/glassfish/jersey/examples/server/async/MainTest.java
+++ b/examples/server-async-standalone/client/src/test/java/org/glassfish/jersey/examples/server/async/MainTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,8 +10,8 @@
 
 package org.glassfish.jersey.examples.server.async;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test whether cases described in {@code README} are passing.
diff --git a/examples/server-async/src/test/java/org/glassfish/jersey/examples/server/async/AsyncResourceTest.java b/examples/server-async/src/test/java/org/glassfish/jersey/examples/server/async/AsyncResourceTest.java
index 1e7c8dc..b66ff64 100644
--- a/examples/server-async/src/test/java/org/glassfish/jersey/examples/server/async/AsyncResourceTest.java
+++ b/examples/server-async/src/test/java/org/glassfish/jersey/examples/server/async/AsyncResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -34,10 +34,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 public class AsyncResourceTest extends JerseyTest {
 
@@ -197,9 +197,8 @@
         LOGGER.info(messageBuilder.toString());
 
         for (Map.Entry<Integer, String> postResponseEntry : postResponses.entrySet()) {
-            assertEquals(
-                    String.format("Unexpected POST notification response for message %02d", postResponseEntry.getKey()),
-                    expectedPostResponse, postResponseEntry.getValue());
+            assertEquals(expectedPostResponse, postResponseEntry.getValue(),
+                    String.format("Unexpected POST notification response for message %02d", postResponseEntry.getKey()));
         }
 
         final List<Integer> lost = new LinkedList<Integer>();
@@ -309,9 +308,8 @@
         LOGGER.info(messageBuilder.toString());
 
         for (Map.Entry<Integer, String> entry : responseEntryList) {
-            assertEquals(
-                    String.format("Unexpected GET notification response for message %02d", entry.getKey()),
-                    expectedResponse, entry.getValue());
+            assertEquals(expectedResponse, entry.getValue(),
+                    String.format("Unexpected GET notification response for message %02d", entry.getKey()));
         }
         assertEquals(MAX_MESSAGES, getResponses.size());
     }
diff --git a/examples/server-sent-events-jaxrs/src/test/java/org/glassfish/jersey/examples/sse/jaxrs/ServerSentEventsTest.java b/examples/server-sent-events-jaxrs/src/test/java/org/glassfish/jersey/examples/sse/jaxrs/ServerSentEventsTest.java
index 7078512..8ae98c3 100644
--- a/examples/server-sent-events-jaxrs/src/test/java/org/glassfish/jersey/examples/sse/jaxrs/ServerSentEventsTest.java
+++ b/examples/server-sent-events-jaxrs/src/test/java/org/glassfish/jersey/examples/sse/jaxrs/ServerSentEventsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -30,12 +30,12 @@
 import org.glassfish.jersey.internal.guava.ThreadFactoryBuilder;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * SSE example resources test.
@@ -61,6 +61,7 @@
         return client;
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         super.tearDown();
@@ -89,8 +90,8 @@
         target().path(App.ROOT_PATH).request().post(Entity.text("message")).close();
 
         try {
-            assertTrue("Waiting for message to be delivered has timed out.",
-                    latch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS));
+            assertTrue(latch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS),
+                    "Waiting for message to be delivered has timed out.");
         } finally {
             target().path(App.ROOT_PATH).request().delete().close();
             eventSource.close();
diff --git a/examples/server-sent-events-jersey/src/test/java/org/glassfish/jersey/examples/sse/jersey/ServerSentEventsTest.java b/examples/server-sent-events-jersey/src/test/java/org/glassfish/jersey/examples/sse/jersey/ServerSentEventsTest.java
index 56ee494..9da0021 100644
--- a/examples/server-sent-events-jersey/src/test/java/org/glassfish/jersey/examples/sse/jersey/ServerSentEventsTest.java
+++ b/examples/server-sent-events-jersey/src/test/java/org/glassfish/jersey/examples/sse/jersey/ServerSentEventsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -39,12 +39,12 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * SSE example resources test.
@@ -93,8 +93,8 @@
         target().path(App.ROOT_PATH).request().post(Entity.text("message"));
 
         try {
-            assertTrue("Waiting for message to be delivered has timed out.",
-                    latch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS));
+            assertTrue(latch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS),
+                    "Waiting for message to be delivered has timed out.");
         } finally {
             eventSource.close();
         }
@@ -139,8 +139,8 @@
                         }
                     });
 
-            assertTrue("Waiting for receiver thread to start has timed out.",
-                    startLatch.await(5, TimeUnit.SECONDS));
+            assertTrue(startLatch.await(5, TimeUnit.SECONDS),
+                    "Waiting for receiver thread to start has timed out.");
 
             for (int i = 0; i < MAX_MESSAGES; i++) {
                 target(App.ROOT_PATH).request().post(Entity.text("message " + i));
diff --git a/examples/servlet3-webapp/src/test/java/Servlet3WebappITCase.java b/examples/servlet3-webapp/src/test/java/Servlet3WebappITCase.java
index 0bf859b..a2b6d9c 100644
--- a/examples/servlet3-webapp/src/test/java/Servlet3WebappITCase.java
+++ b/examples/servlet3-webapp/src/test/java/Servlet3WebappITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -14,14 +14,14 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.UriBuilder;
 
 import java.net.URI;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests the servlet3-webapp example.
diff --git a/examples/simple-console/src/test/java/org/glassfish/jersey/examples/console/MainTest.java b/examples/simple-console/src/test/java/org/glassfish/jersey/examples/console/MainTest.java
index f5a58a7..3a5c2b5 100644
--- a/examples/simple-console/src/test/java/org/glassfish/jersey/examples/console/MainTest.java
+++ b/examples/simple-console/src/test/java/org/glassfish/jersey/examples/console/MainTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -29,9 +29,9 @@
 import org.glassfish.jersey.test.TestProperties;
 
 import org.codehaus.jettison.json.JSONArray;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Naresh (Srinivas Bhimisetty)
@@ -66,8 +66,8 @@
     @Test
     public void testGetOnForm() {
         Response response = target().path("form").request(MediaType.TEXT_HTML).get();
-        assertEquals("GET on the 'form' resource doesn't give expected response", Response.Status.OK.getStatusCode(),
-                response.getStatusInfo().getStatusCode());
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatusInfo().getStatusCode(),
+                "GET on the 'form' resource doesn't give expected response");
     }
 
     /**
@@ -105,17 +105,17 @@
     public void testGetColoursAsPlainText() {
         // without the query param "match"
         Response response = target().path("form").path("colours").request(MediaType.TEXT_PLAIN).get();
-        assertEquals("GET on path '/form/colours' with mime type 'text/html' doesn't give expected response",
-                Response.Status.OK.getStatusCode(), response.getStatusInfo().getStatusCode());
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatusInfo().getStatusCode(),
+                "GET on path '/form/colours' with mime type 'text/html' doesn't give expected response");
 
         String responseMsg = target().path("form").path("colours").request(MediaType.TEXT_PLAIN).get(String.class);
-        assertEquals("Response content doesn't match the expected value", "red\norange\nyellow\ngreen\nblue\nindigo\nviolet\n",
-                responseMsg);
+        assertEquals("red\norange\nyellow\ngreen\nblue\nindigo\nviolet\n", responseMsg,
+                "Response content doesn't match the expected value");
 
         // with the query param "match" value "re"
         responseMsg = target("form/colours").queryParam("match", "re").request(MediaType.TEXT_PLAIN).get(String.class);
-        assertEquals("Response content doesn't match the expected value with the query param 'match=re'", "red\ngreen\n",
-                responseMsg);
+        assertEquals("red\ngreen\n", responseMsg,
+                "Response content doesn't match the expected value with the query param 'match=re'");
     }
 
     /**
@@ -125,16 +125,17 @@
     @Test
     public void testGetColoursAsJson() {
         Response response = target().path("form").path("colours").request(MediaType.APPLICATION_JSON).get();
-        assertEquals("GET on path '/form/colours' with mime type 'application/json' doesn't give expected response",
-                Response.Status.OK.getStatusCode(), response.getStatusInfo().getStatusCode());
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatusInfo().getStatusCode(),
+                "GET on path '/form/colours' with mime type 'application/json' doesn't give expected response");
 
         JSONArray jsonArray = target().path("form").path("colours").request(MediaType.APPLICATION_JSON).get(JSONArray.class);
-        assertEquals("Returned JSONArray doesn't have expected number of entries", 7, jsonArray.length());
+        assertEquals(7, jsonArray.length(),
+                "Returned JSONArray doesn't have expected number of entries");
 
         // with the query param "match" value "re"
         jsonArray = target("form/colours").queryParam("match", "re").request(MediaType.APPLICATION_JSON).get(JSONArray.class);
-        assertEquals("Returned JSONArray doesn't have expected number of entries with the query param 'match=re'", 2,
-                jsonArray.length());
+        assertEquals(2, jsonArray.length(),
+                "Returned JSONArray doesn't have expected number of entries with the query param 'match=re'");
     }
 
 }
diff --git a/examples/sse-item-store-jaxrs-webapp/src/test/java/org/glassfish/jersey/examples/sseitemstore/jaxrs/JaxrsItemStoreResourceTest.java b/examples/sse-item-store-jaxrs-webapp/src/test/java/org/glassfish/jersey/examples/sseitemstore/jaxrs/JaxrsItemStoreResourceTest.java
index 87c85c5..02ca768 100644
--- a/examples/sse-item-store-jaxrs-webapp/src/test/java/org/glassfish/jersey/examples/sseitemstore/jaxrs/JaxrsItemStoreResourceTest.java
+++ b/examples/sse-item-store-jaxrs-webapp/src/test/java/org/glassfish/jersey/examples/sseitemstore/jaxrs/JaxrsItemStoreResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -45,15 +45,16 @@
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.describedAs;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.hasItems;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Item store test.
@@ -103,6 +104,7 @@
         return client.get();
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         super.tearDown();
@@ -161,9 +163,8 @@
             open(sources);
             items.forEach((item) -> postItem(itemsTarget, item));
 
-            assertTrue("Waiting to receive all events has timed out.",
-                    latch.await((1000 + MAX_LISTENERS * RECONNECT_DEFAULT) * getAsyncTimeoutMultiplier(),
-                            TimeUnit.MILLISECONDS));
+            assertTrue(latch.await((1000 + MAX_LISTENERS * RECONNECT_DEFAULT) * getAsyncTimeoutMultiplier(),
+                    TimeUnit.MILLISECONDS), "Waiting to receive all events has timed out.");
 
             // need to force disconnect on server in order for EventSource.close(...) to succeed with HttpUrlConnection
             sendCommand(itemsTarget, "disconnect");
@@ -172,18 +173,18 @@
         }
 
         String postedItems = itemsTarget.request().get(String.class);
-        items.forEach((item) -> assertTrue("Item '" + item + "' not stored on server.", postedItems.contains(item)));
+        items.forEach((item) -> assertTrue(postedItems.contains(item), "Item '" + item + "' not stored on server."));
 
         final AtomicInteger queueId = new AtomicInteger(0);
         indexQueues.forEach((indexes) -> {
             for (int i = 0; i < items.size(); i++) {
-                assertTrue("Event for '" + items.get(i) + "' not received in queue " + queueId.get(), indexes.contains(i));
+                assertTrue(indexes.contains(i), "Event for '" + items.get(i) + "' not received in queue " + queueId.get());
             }
-            assertEquals("Not received the expected number of events in queue " + queueId.get(), items.size(), indexes.size());
+            assertEquals(items.size(), indexes.size(), "Not received the expected number of events in queue " + queueId.get());
             queueId.incrementAndGet();
         });
 
-        assertEquals("Number of received 'size' events does not match.", items.size() * MAX_LISTENERS, sizeEventsCount.get());
+        assertEquals(items.size() * MAX_LISTENERS, sizeEventsCount.get(), "Number of received 'size' events does not match.");
     }
 
     /**
@@ -248,9 +249,8 @@
 
             sendCommand(itemsTarget, "reconnect now");
 
-            assertTrue("Waiting to receive all events has timed out.",
-                    latch.await((1 + MAX_LISTENERS * (MAX_ITEMS + 1) * reconnectDelay) * getAsyncTimeoutMultiplier(),
-                            TimeUnit.SECONDS));
+            assertTrue(latch.await((1 + MAX_LISTENERS * (MAX_ITEMS + 1) * reconnectDelay) * getAsyncTimeoutMultiplier(),
+                    TimeUnit.SECONDS), "Waiting to receive all events has timed out.");
 
             // need to force disconnect on server in order for EventSource.close(...) to succeed with HttpUrlConnection
             sendCommand(itemsTarget, "disconnect");
@@ -274,7 +274,7 @@
 
     private static void postItem(final WebTarget itemsTarget, final String item) {
         final Response response = itemsTarget.request().post(Entity.form(new Form("name", item)));
-        assertEquals("Posting new item has failed.", 204, response.getStatus());
+        assertEquals(204, response.getStatus(), "Posting new item has failed.");
         LOGGER.info("[-i-] POSTed item: '" + item + "'");
     }
 
@@ -286,7 +286,7 @@
         int i = 0;
         for (SseEventSource source : sources) {
             if (source.isOpen()) {
-                assertTrue("Waiting to close a source has timed out.", source.close(1, TimeUnit.SECONDS));
+                assertTrue(source.close(1, TimeUnit.SECONDS), "Waiting to close a source has timed out.");
 //                    source.close(100, TimeUnit.MILLISECONDS);
                 LOGGER.info("[<--] SOURCE " + i++ + " closed.");
             }
@@ -295,7 +295,7 @@
 
     private static void sendCommand(final WebTarget itemsTarget, final String command) {
         final Response response = itemsTarget.path("commands").request().post(Entity.text(command));
-        assertEquals("'" + command + "' command has failed.", 200, response.getStatus());
+        assertEquals(200, response.getStatus(), "'" + command + "' command has failed.");
         LOGGER.info("[-!-] COMMAND '" + command + "' has been processed.");
     }
 }
diff --git a/examples/sse-item-store-jersey-webapp/src/test/java/org/glassfish/jersey/examples/sseitemstore/jersey/JerseyItemStoreResourceTest.java b/examples/sse-item-store-jersey-webapp/src/test/java/org/glassfish/jersey/examples/sseitemstore/jersey/JerseyItemStoreResourceTest.java
index a561f71..08f18cf 100644
--- a/examples/sse-item-store-jersey-webapp/src/test/java/org/glassfish/jersey/examples/sseitemstore/jersey/JerseyItemStoreResourceTest.java
+++ b/examples/sse-item-store-jersey-webapp/src/test/java/org/glassfish/jersey/examples/sseitemstore/jersey/JerseyItemStoreResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -40,15 +40,15 @@
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.describedAs;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.hasItems;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Item store test.
@@ -140,9 +140,8 @@
                 postItem(itemsTarget, item);
             }
 
-            assertTrue("Waiting to receive all events has timed out.",
-                    latch.await((1000 + MAX_LISTENERS * EventSource.RECONNECT_DEFAULT) * getAsyncTimeoutMultiplier(),
-                            TimeUnit.MILLISECONDS));
+            assertTrue(latch.await((1000 + MAX_LISTENERS * EventSource.RECONNECT_DEFAULT) * getAsyncTimeoutMultiplier(),
+                    TimeUnit.MILLISECONDS), "Waiting to receive all events has timed out.");
 
             // need to force disconnect on server in order for EventSource.close(...) to succeed with HttpUrlConnection
             sendCommand(itemsTarget, "disconnect");
@@ -152,19 +151,19 @@
 
         String postedItems = itemsTarget.request().get(String.class);
         for (String item : items) {
-            assertTrue("Item '" + item + "' not stored on server.", postedItems.contains(item));
+            assertTrue(postedItems.contains(item), "Item '" + item + "' not stored on server.");
         }
 
         int queueId = 0;
         for (Queue<Integer> indexes : indexQueues) {
             for (int i = 0; i < items.size(); i++) {
-                assertTrue("Event for '" + items.get(i) + "' not received in queue " + queueId, indexes.contains(i));
+                assertTrue(indexes.contains(i), "Event for '" + items.get(i) + "' not received in queue " + queueId);
             }
-            assertEquals("Not received the expected number of events in queue " + queueId, items.size(), indexes.size());
+            assertEquals(items.size(), indexes.size(), "Not received the expected number of events in queue " + queueId);
             queueId++;
         }
 
-        assertEquals("Number of received 'size' events does not match.", items.size() * MAX_LISTENERS, sizeEventsCount.get());
+        assertEquals(items.size() * MAX_LISTENERS, sizeEventsCount.get(), "Number of received 'size' events does not match.");
     }
 
     /**
@@ -228,9 +227,8 @@
 
             sendCommand(itemsTarget, "reconnect now");
 
-            assertTrue("Waiting to receive all events has timed out.",
-                    latch.await((1 + MAX_LISTENERS * (MAX_ITEMS + 1) * reconnectDelay) * getAsyncTimeoutMultiplier(),
-                            TimeUnit.SECONDS));
+            assertTrue(latch.await((1 + MAX_LISTENERS * (MAX_ITEMS + 1) * reconnectDelay) * getAsyncTimeoutMultiplier(),
+                    TimeUnit.SECONDS), "Waiting to receive all events has timed out.");
 
             // need to force disconnect on server in order for EventSource.close(...) to succeed with HttpUrlConnection
             sendCommand(itemsTarget, "disconnect");
@@ -254,7 +252,7 @@
 
     private static void postItem(final WebTarget itemsTarget, final String item) {
         final Response response = itemsTarget.request().post(Entity.form(new Form("name", item)));
-        assertEquals("Posting new item has failed.", 204, response.getStatus());
+        assertEquals(204, response.getStatus(), "Posting new item has failed.");
         LOGGER.info("[-i-] POSTed item: '" + item + "'");
     }
 
@@ -270,7 +268,7 @@
         int i = 0;
         for (EventSource source : sources) {
             if (source.isOpen()) {
-                assertTrue("Waiting to close a source has timed out.", source.close(1, TimeUnit.SECONDS));
+                assertTrue(source.close(1, TimeUnit.SECONDS), "Waiting to close a source has timed out.");
 //                    source.close(100, TimeUnit.MILLISECONDS);
                 LOGGER.info("[<--] SOURCE " + i++ + " closed.");
             }
@@ -279,7 +277,7 @@
 
     private static void sendCommand(final WebTarget itemsTarget, final String command) {
         final Response response = itemsTarget.path("commands").request().post(Entity.text(command));
-        assertEquals("'" + command + "' command has failed.", 200, response.getStatus());
+        assertEquals(200, response.getStatus(), "'" + command + "' command has failed.");
         LOGGER.info("[-!-] COMMAND '" + command + "' has been processed.");
     }
 }
diff --git a/examples/system-properties-example/src/test/java/org/glassfish/jersey/examples/sysprops/SysPropsTest.java b/examples/system-properties-example/src/test/java/org/glassfish/jersey/examples/sysprops/SysPropsTest.java
index 21887fc..54c9607 100644
--- a/examples/system-properties-example/src/test/java/org/glassfish/jersey/examples/sysprops/SysPropsTest.java
+++ b/examples/system-properties-example/src/test/java/org/glassfish/jersey/examples/sysprops/SysPropsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -18,8 +18,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * System properties example unit test.
diff --git a/examples/xml-moxy/src/test/java/org/glassfish/jersey/examples/xmlmoxy/MoxyAppTest.java b/examples/xml-moxy/src/test/java/org/glassfish/jersey/examples/xmlmoxy/MoxyAppTest.java
index d154e1a..d8fd49e 100644
--- a/examples/xml-moxy/src/test/java/org/glassfish/jersey/examples/xmlmoxy/MoxyAppTest.java
+++ b/examples/xml-moxy/src/test/java/org/glassfish/jersey/examples/xmlmoxy/MoxyAppTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -21,8 +21,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/src/test/java/org/glassfish/jersey/ext/cdi1x/hk2ban/EmptyHk2CustomInjectionTypeProviderTest.java b/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/src/test/java/org/glassfish/jersey/ext/cdi1x/hk2ban/EmptyHk2CustomInjectionTypeProviderTest.java
index 4b6e83a..5e379a9 100644
--- a/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/src/test/java/org/glassfish/jersey/ext/cdi1x/hk2ban/EmptyHk2CustomInjectionTypeProviderTest.java
+++ b/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/src/test/java/org/glassfish/jersey/ext/cdi1x/hk2ban/EmptyHk2CustomInjectionTypeProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,7 +21,7 @@
 import org.glassfish.jersey.ext.cdi1x.spi.Hk2CustomBoundTypesProvider;
 import org.glassfish.jersey.internal.ServiceFinder;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.emptyCollectionOf;
 import static org.hamcrest.Matchers.instanceOf;
diff --git a/ext/cdi/jersey-cdi1x/pom.xml b/ext/cdi/jersey-cdi1x/pom.xml
index 61c5971..234bb1a 100644
--- a/ext/cdi/jersey-cdi1x/pom.xml
+++ b/ext/cdi/jersey-cdi1x/pom.xml
@@ -59,6 +59,12 @@
             <artifactId>jmockit</artifactId>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ext/cdi/jersey-cdi1x/src/test/java/org/glassfish/jersey/ext/cdi1x/internal/CdiComponentProviderTest.java b/ext/cdi/jersey-cdi1x/src/test/java/org/glassfish/jersey/ext/cdi1x/internal/CdiComponentProviderTest.java
index 479d349..4a14b8e 100644
--- a/ext/cdi/jersey-cdi1x/src/test/java/org/glassfish/jersey/ext/cdi1x/internal/CdiComponentProviderTest.java
+++ b/ext/cdi/jersey-cdi1x/src/test/java/org/glassfish/jersey/ext/cdi1x/internal/CdiComponentProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,9 +33,9 @@
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.ext.MessageBodyReader;
 
-import org.junit.Test;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test for {@link CdiComponentProvider}.
diff --git a/ext/cdi/jersey-cdi1x/src/test/java/org/glassfish/jersey/ext/cdi1x/internal/CdiUtilTest.java b/ext/cdi/jersey-cdi1x/src/test/java/org/glassfish/jersey/ext/cdi1x/internal/CdiUtilTest.java
index 0f9fa51..fb839f0 100644
--- a/ext/cdi/jersey-cdi1x/src/test/java/org/glassfish/jersey/ext/cdi1x/internal/CdiUtilTest.java
+++ b/ext/cdi/jersey-cdi1x/src/test/java/org/glassfish/jersey/ext/cdi1x/internal/CdiUtilTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,10 +23,10 @@
 import org.glassfish.jersey.ext.cdi1x.internal.spi.InjectionManagerStore;
 import org.glassfish.jersey.internal.inject.InjectionManager;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import mockit.Mock;
 import mockit.MockUp;
diff --git a/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityAnnotationsTest.java b/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityAnnotationsTest.java
index 8c5fa49..19112b9 100644
--- a/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityAnnotationsTest.java
+++ b/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityAnnotationsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,7 +16,7 @@
 
 package org.glassfish.jersey.message.filtering;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityEntityProcessorTest.java b/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityEntityProcessorTest.java
index 21edda4..46c7bee 100644
--- a/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityEntityProcessorTest.java
+++ b/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityEntityProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,8 @@
 import org.glassfish.jersey.message.filtering.spi.FilteringHelper;
 import org.glassfish.jersey.message.filtering.spi.ScopeProvider;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -42,7 +42,7 @@
 
     private SecurityEntityProcessor processor;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         processor = new SecurityEntityProcessor();
     }
diff --git a/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityHelperTest.java b/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityHelperTest.java
index e86b1d3..75ce7d8 100644
--- a/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityHelperTest.java
+++ b/ext/entity-filtering/src/test/java/org/glassfish/jersey/message/filtering/SecurityHelperTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,7 +29,7 @@
 import org.glassfish.jersey.internal.inject.CustomAnnotationLiteral;
 import org.glassfish.jersey.message.filtering.spi.FilteringHelper;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/ext/metainf-services/pom.xml b/ext/metainf-services/pom.xml
index 14d4231..37b85c5 100644
--- a/ext/metainf-services/pom.xml
+++ b/ext/metainf-services/pom.xml
@@ -90,6 +90,13 @@
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <test>**/MetaInfServicesTest*</test>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/ext/metainf-services/src/test/java/org/glassfish/jersey/message/MetaInfServicesTest.java b/ext/metainf-services/src/test/java/org/glassfish/jersey/message/MetaInfServicesTest.java
index e764ef5..f1ad7da 100644
--- a/ext/metainf-services/src/test/java/org/glassfish/jersey/message/MetaInfServicesTest.java
+++ b/ext/metainf-services/src/test/java/org/glassfish/jersey/message/MetaInfServicesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,18 +42,14 @@
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
+import org.junit.jupiter.api.Test;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({MetaInfServicesTest.Enable.class, MetaInfServicesTest.DisableServer.class,
-        MetaInfServicesTest.DisableClient.class})
 public class MetaInfServicesTest {
 
     public static class MetaInf {
diff --git a/ext/microprofile/mp-config/pom.xml b/ext/microprofile/mp-config/pom.xml
index dba9f6c..151dbb5 100644
--- a/ext/microprofile/mp-config/pom.xml
+++ b/ext/microprofile/mp-config/pom.xml
@@ -70,8 +70,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
 
diff --git a/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ConfigurationProviderTest.java b/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ConfigurationProviderTest.java
index 6b2aecd..f269cff 100644
--- a/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ConfigurationProviderTest.java
+++ b/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ConfigurationProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,9 +16,9 @@
 
 package org.glassfish.jersey.microprofile.config;
 
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.util.Map;
 
@@ -26,7 +26,7 @@
 
     private static final String EMPTY_PROPERTY_NAME = "EMPTY_PROPERTY";
 
-    @Before
+    @BeforeEach
     public void before() {
         System.setProperty(EMPTY_PROPERTY_NAME, "");
     }
@@ -36,7 +36,7 @@
         final ConfigurationProvider provider = new ConfigurationProvider();
         final Map<String, Object> properties = provider.getProperties();
 
-        Assert.assertNull(properties.get(EMPTY_PROPERTY_NAME));
+        Assertions.assertNull(properties.get(EMPTY_PROPERTY_NAME));
     }
 
 }
\ No newline at end of file
diff --git a/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ExternalPropertiesConfigurationFactoryTest.java b/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ExternalPropertiesConfigurationFactoryTest.java
index 2c4e70b..8662d2d 100644
--- a/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ExternalPropertiesConfigurationFactoryTest.java
+++ b/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ExternalPropertiesConfigurationFactoryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 import org.glassfish.jersey.test.jetty.JettyTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.inject.Singleton;
 import javax.ws.rs.GET;
@@ -84,7 +84,7 @@
 
         final Boolean responce = target("getPropertyValue/{key}")
                 .resolveTemplate("key", "jersey.config.disableMetainfServicesLookup").request().get(Boolean.class);
-        Assert.assertEquals(Boolean.TRUE, responce);
+        Assertions.assertEquals(Boolean.TRUE, responce);
     }
 
     @Test
@@ -92,13 +92,13 @@
 
         final String responce = target("readProperty/{key}")
                 .resolveTemplate("key", "jersey.config.disableAutoDiscovery").request().get(String.class);
-        Assert.assertEquals("1", responce);
+        Assertions.assertEquals("1", responce);
     }
 
     @Test
     public void defaultHeaderValueTest() {
         final String responce = target("readProperty/{key}")
                 .resolveTemplate("key", "jersey.config.disableJsonProcessing").request().get(String.class);
-        Assert.assertEquals("true", responce);
+        Assertions.assertEquals("true", responce);
     }
 }
\ No newline at end of file
diff --git a/ext/microprofile/mp-rest-client/src/test/java/org/glassfish/jersey/microprofile/restclient/RestClientBuilderImplTest.java b/ext/microprofile/mp-rest-client/src/test/java/org/glassfish/jersey/microprofile/restclient/RestClientBuilderImplTest.java
index 685e53a..bd4bf9c 100644
--- a/ext/microprofile/mp-rest-client/src/test/java/org/glassfish/jersey/microprofile/restclient/RestClientBuilderImplTest.java
+++ b/ext/microprofile/mp-rest-client/src/test/java/org/glassfish/jersey/microprofile/restclient/RestClientBuilderImplTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Payara Foundation and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Payara Foundation and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey.microprofile.restclient;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import static org.glassfish.jersey.microprofile.restclient.RestClientBuilderImpl.createProxyString;
 
@@ -25,9 +25,9 @@
 
     @Test
     public void createProxyStringTest() {
-        Assert.assertTrue(createProxyString("localhost", 8765).equals("http://localhost:8765"));
-        Assert.assertTrue(createProxyString("http://localhost", 8765).equals("http://localhost:8765"));
-        Assert.assertTrue(createProxyString("127.0.0.1", 8765).equals("http://127.0.0.1:8765"));
-        Assert.assertTrue(createProxyString("http://192.168.1.1", 8765).equals("http://192.168.1.1:8765"));
+        Assertions.assertTrue(createProxyString("localhost", 8765).equals("http://localhost:8765"));
+        Assertions.assertTrue(createProxyString("http://localhost", 8765).equals("http://localhost:8765"));
+        Assertions.assertTrue(createProxyString("127.0.0.1", 8765).equals("http://127.0.0.1:8765"));
+        Assertions.assertTrue(createProxyString("http://192.168.1.1", 8765).equals("http://192.168.1.1:8765"));
     }
 }
diff --git a/ext/pom.xml b/ext/pom.xml
index f4109a6..1043525 100644
--- a/ext/pom.xml
+++ b/ext/pom.xml
@@ -65,8 +65,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
 
diff --git a/ext/proxy-client/src/test/java/org/glassfish/jersey/client/proxy/WebResourceFactoryTest.java b/ext/proxy-client/src/test/java/org/glassfish/jersey/client/proxy/WebResourceFactoryTest.java
index 1f51f17..3a05b8e 100644
--- a/ext/proxy-client/src/test/java/org/glassfish/jersey/client/proxy/WebResourceFactoryTest.java
+++ b/ext/proxy-client/src/test/java/org/glassfish/jersey/client/proxy/WebResourceFactoryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,13 +34,13 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-
-import org.junit.Ignore;
-import org.junit.Test;
-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 org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Martin Matula
@@ -62,6 +62,7 @@
         return new ResourceConfig(MyResource.class);
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         super.setUp();
@@ -161,7 +162,7 @@
     }
 
     @Test
-    @Ignore("See issue JERSEY-2441")
+    @Disabled("See issue JERSEY-2441")
     public void testHeaderCookieAsList() {
         final List<String> list = new ArrayList<>();
         list.add("a");
@@ -172,7 +173,7 @@
     }
 
     @Test
-    @Ignore("See issue JERSEY-2441")
+    @Disabled("See issue JERSEY-2441")
     public void testHeaderCookieAsSet() {
         final Set<String> set = new HashSet<>();
         set.add("a");
@@ -184,7 +185,7 @@
     }
 
     @Test
-    @Ignore("See issue JERSEY-2441")
+    @Disabled("See issue JERSEY-2441")
     public void testHeaderCookieAsSortedSet() {
         final SortedSet<String> set = new TreeSet<>();
         set.add("a");
@@ -200,7 +201,7 @@
      * lines in the request. Jersey has currently no possibility to do so. See JERSEY-2263.
      */
     @Test
-    @Ignore("See issue JERSEY-2263")
+    @Disabled("See issue JERSEY-2263")
     public void testHeaderParamsAsList() {
         final List<String> list = new ArrayList<>();
         list.add("a");
@@ -211,7 +212,7 @@
     }
 
     @Test
-    @Ignore("See issue JERSEY-2263")
+    @Disabled("See issue JERSEY-2263")
     public void testHeaderParamsAsSet() {
         final Set<String> set = new HashSet<>();
         set.add("a");
@@ -223,7 +224,7 @@
     }
 
     @Test
-    @Ignore("See issue JERSEY-2263")
+    @Disabled("See issue JERSEY-2263")
     public void testHeaderParamsAsSortedSet() {
         final SortedSet<String> set = new TreeSet<>();
         set.add("a");
@@ -267,10 +268,10 @@
     }
 
     private void checkSet(final String result) {
-        assertTrue("Set does not contain 3 items.", result.startsWith("3:["));
-        assertTrue("Set does not contain 'a' item.", result.contains("a"));
-        assertTrue("Set does not contain 'bb' item.", result.contains("bb"));
-        assertTrue("Set does not contain 'ccc' item.", result.contains("ccc"));
+        assertTrue(result.startsWith("3:["), "Set does not contain 3 items.");
+        assertTrue(result.contains("a"), "Set does not contain 'a' item.");
+        assertTrue(result.contains("bb"), "Set does not contain 'bb' item.");
+        assertTrue(result.contains("ccc"), "Set does not contain 'ccc' item.");
     }
 
     @Test
@@ -307,13 +308,13 @@
 
     @Test
     public void testAcceptHeader() {
-        assertTrue("Accept HTTP header does not match @Produces annotation", resource.isAcceptHeaderValid(null));
+        assertTrue(resource.isAcceptHeaderValid(null), "Accept HTTP header does not match @Produces annotation");
     }
 
     @Test
     public void testPutWithExplicitContentType() {
-        assertEquals("Content-Type HTTP header does not match explicitly provided type", resourceWithXML.putIt(new MyBean()),
-                MediaType.APPLICATION_XML);
+        assertEquals(resourceWithXML.putIt(new MyBean()), MediaType.APPLICATION_XML,
+                "Content-Type HTTP header does not match explicitly provided type");
     }
 
     @Test
@@ -328,11 +329,11 @@
     public void testHashCode() throws Exception {
         int h1 = resource.hashCode();
         int h2 = resource2.hashCode();
-        assertNotEquals("The hash codes should not match", h1, h2);
+        assertNotEquals(h1, h2, "The hash codes should not match");
     }
 
     @Test
     public void testEquals() {
-        assertFalse("The two resource instances should not be considered equals as they are unique", resource.equals(resource2));
+        assertFalse(resource.equals(resource2), "The two resource instances should not be considered equals as they are unique");
     }
 }
diff --git a/ext/rx/pom.xml b/ext/rx/pom.xml
index 83f755b..b17d741 100644
--- a/ext/rx/pom.xml
+++ b/ext/rx/pom.xml
@@ -44,8 +44,8 @@
 
     <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/ext/rx/rx-client-guava/src/test/java/org/glassfish/jersey/client/rx/guava/RxListenableFutureTest.java b/ext/rx/rx-client-guava/src/test/java/org/glassfish/jersey/client/rx/guava/RxListenableFutureTest.java
index 43a97cf..9b27487 100644
--- a/ext/rx/rx-client-guava/src/test/java/org/glassfish/jersey/client/rx/guava/RxListenableFutureTest.java
+++ b/ext/rx/rx-client-guava/src/test/java/org/glassfish/jersey/client/rx/guava/RxListenableFutureTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,13 +29,14 @@
 import org.glassfish.jersey.process.JerseyProcessingUncaughtExceptionHandler;
 
 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 static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.not;
 import static org.hamcrest.core.Is.is;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * @author Michal Gajdos
@@ -45,7 +46,7 @@
     private Client client;
     private ExecutorService executor;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         client = ClientBuilder.newClient().register(TerminalClientRequestFilter.class);
         executor = new ScheduledThreadPoolExecutor(1, new ThreadFactoryBuilder()
@@ -54,7 +55,7 @@
                 .build());
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         executor.shutdown();
         client = null;
@@ -72,47 +73,51 @@
         testInvoker(invoker, 404, false);
     }
 
-    @Test(expected = NotFoundException.class)
+    @Test
     public void testNotFoundReadEntityViaClass() throws Throwable {
-        client.register(RxListenableFutureInvokerProvider.class);
+        assertThrows(NotFoundException.class, () -> {
+            client.register(RxListenableFutureInvokerProvider.class);
 
-        try {
-            client.target("http://jersey.java.net")
-                  .request()
-                  .header("Response-Status", 404)
-                  .rx(RxListenableFutureInvoker.class)
-                  .get(String.class)
-                  .get();
-        } catch (final Exception expected) {
+            try {
+                client.target("http://jersey.java.net")
+                      .request()
+                      .header("Response-Status", 404)
+                      .rx(RxListenableFutureInvoker.class)
+                      .get(String.class)
+                      .get();
+            } catch (final Exception expected) {
 
-            // java.util.concurrent.ExecutionException
-            throw expected
-                    // javax.ws.rs.NotFoundException
-                    .getCause();
-        }
+                // java.util.concurrent.ExecutionException
+                throw expected
+                        // javax.ws.rs.NotFoundException
+                        .getCause();
+            }
+        });
     }
 
-    @Test(expected = NotFoundException.class)
+    @Test
     public void testNotFoundReadEntityViaGenericType() throws Throwable {
-        client.register(RxListenableFutureInvokerProvider.class);
+        assertThrows(NotFoundException.class, () -> {
+            client.register(RxListenableFutureInvokerProvider.class);
 
-        try {
-            client.target("http://jersey.java.net")
-                  .request()
-                  .header("Response-Status", 404)
-                  .rx(RxListenableFutureInvoker.class)
-                  .get(new GenericType<String>() {
-                  })
-                  .get();
-        } catch (final Exception expected) {
+            try {
+                client.target("http://jersey.java.net")
+                      .request()
+                      .header("Response-Status", 404)
+                      .rx(RxListenableFutureInvoker.class)
+                      .get(new GenericType<String>() {
+                      })
+                      .get();
+            } catch (final Exception expected) {
 
-            expected.printStackTrace();
+                expected.printStackTrace();
 
-            // java.util.concurrent.ExecutionException
-            throw expected
-                    // javax.ws.rs.NotFoundException
-                    .getCause();
-        }
+                // java.util.concurrent.ExecutionException
+                throw expected
+                        // javax.ws.rs.NotFoundException
+                        .getCause();
+            }
+        });
     }
 
     @Test
diff --git a/ext/rx/rx-client-rxjava/src/test/java/org/glassfish/jersey/client/rx/rxjava/RxObservableTest.java b/ext/rx/rx-client-rxjava/src/test/java/org/glassfish/jersey/client/rx/rxjava/RxObservableTest.java
index 0a6644b..29fb0e5 100644
--- a/ext/rx/rx-client-rxjava/src/test/java/org/glassfish/jersey/client/rx/rxjava/RxObservableTest.java
+++ b/ext/rx/rx-client-rxjava/src/test/java/org/glassfish/jersey/client/rx/rxjava/RxObservableTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,12 +30,13 @@
 import org.glassfish.jersey.internal.guava.ThreadFactoryBuilder;
 import org.glassfish.jersey.process.JerseyProcessingUncaughtExceptionHandler;
 
-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 static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.core.Is.is;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import rx.Subscriber;
 
@@ -49,7 +50,7 @@
     private Client clientWithExecutor;
     private ExecutorService executor;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         client = ClientBuilder.newClient().register(TerminalClientRequestFilter.class);
         client.register(RxObservableInvokerProvider.class);
@@ -63,7 +64,7 @@
         clientWithExecutor.register(RxObservableInvokerProvider.class);
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         executor.shutdown();
 
@@ -91,47 +92,51 @@
         testInvoker(invoker, 404, true);
     }
 
-    @Test(expected = NotFoundException.class)
+    @Test
     public void testNotFoundReadEntityViaClass() throws Throwable {
-        try {
-            client.target("http://jersey.java.net")
-                  .request()
-                  .header("Response-Status", 404)
-                  .rx(RxObservableInvoker.class)
-                  .get(String.class)
-                  .toBlocking()
-                  .toFuture()
-                  .get();
-        } catch (final Exception expected) {
-            // java.util.concurrent.ExecutionException
-            throw expected
-                    // javax.ws.rs.ProcessingException
-                    // .getCause()
-                    // javax.ws.rs.NotFoundException
-                    .getCause();
-        }
+        assertThrows(NotFoundException.class, () -> {
+            try {
+                client.target("http://jersey.java.net")
+                      .request()
+                      .header("Response-Status", 404)
+                      .rx(RxObservableInvoker.class)
+                      .get(String.class)
+                      .toBlocking()
+                      .toFuture()
+                      .get();
+            } catch (final Exception expected) {
+                // java.util.concurrent.ExecutionException
+                throw expected
+                        // javax.ws.rs.ProcessingException
+                        // .getCause()
+                        // javax.ws.rs.NotFoundException
+                        .getCause();
+            }
+        });
     }
 
-    @Test(expected = NotFoundException.class)
+    @Test
     public void testNotFoundReadEntityViaGenericType() throws Throwable {
-        try {
-            client.target("http://jersey.java.net")
-                  .request()
-                  .header("Response-Status", 404)
-                  .rx(RxObservableInvoker.class)
-                  .get(new GenericType<String>() { })
-                  .toBlocking()
-                  .toFuture()
-                  .get();
-        } catch (final Exception expected) {
+        assertThrows(NotFoundException.class, () -> {
+            try {
+                client.target("http://jersey.java.net")
+                      .request()
+                      .header("Response-Status", 404)
+                      .rx(RxObservableInvoker.class)
+                      .get(new GenericType<String>() { })
+                      .toBlocking()
+                      .toFuture()
+                      .get();
+            } catch (final Exception expected) {
 
-            expected.printStackTrace();
+                expected.printStackTrace();
 
-            // java.util.concurrent.ExecutionException
-            throw expected
-                    // javax.ws.rs.NotFoundException
-                    .getCause();
-        }
+                // java.util.concurrent.ExecutionException
+                throw expected
+                        // javax.ws.rs.NotFoundException
+                        .getCause();
+            }
+        });
     }
 
     @Test
diff --git a/ext/rx/rx-client-rxjava2/src/test/java/org/glassfish/jersey/client/rx/rxjava2/RxFlowableTest.java b/ext/rx/rx-client-rxjava2/src/test/java/org/glassfish/jersey/client/rx/rxjava2/RxFlowableTest.java
index 9151f0f..1a75324 100644
--- a/ext/rx/rx-client-rxjava2/src/test/java/org/glassfish/jersey/client/rx/rxjava2/RxFlowableTest.java
+++ b/ext/rx/rx-client-rxjava2/src/test/java/org/glassfish/jersey/client/rx/rxjava2/RxFlowableTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,14 +30,15 @@
 import org.glassfish.jersey.internal.guava.ThreadFactoryBuilder;
 import org.glassfish.jersey.process.JerseyProcessingUncaughtExceptionHandler;
 
-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.reactivestreams.Subscriber;
 import org.reactivestreams.Subscription;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.core.Is.is;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * @author Pavel Bucek
@@ -48,7 +49,7 @@
     private Client clientWithExecutor;
     private ExecutorService executor;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         client = ClientBuilder.newClient().register(TerminalClientRequestFilter.class);
         client.register(RxFlowableInvokerProvider.class);
@@ -62,7 +63,7 @@
         clientWithExecutor.register(RxFlowableInvokerProvider.class);
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         executor.shutdown();
 
@@ -90,33 +91,37 @@
         testInvoker(invoker, 404, true);
     }
 
-    @Test(expected = NotFoundException.class)
+    @Test
     public void testNotFoundReadEntityViaClass() throws Throwable {
-        try {
-            client.target("http://jersey.java.net")
-                  .request()
-                  .header("Response-Status", 404)
-                  .rx(RxFlowableInvoker.class)
-                  .get(String.class)
-                  .blockingFirst();
-        } catch (final Exception expected) {
-            throw expected;
-        }
+        assertThrows(NotFoundException.class, () -> {
+            try {
+                client.target("http://jersey.java.net")
+                      .request()
+                      .header("Response-Status", 404)
+                      .rx(RxFlowableInvoker.class)
+                      .get(String.class)
+                      .blockingFirst();
+            } catch (final Exception expected) {
+                throw expected;
+            }
+        });
     }
 
-    @Test(expected = NotFoundException.class)
+    @Test
     public void testNotFoundReadEntityViaGenericType() throws Throwable {
-        try {
-            client.target("http://jersey.java.net")
-                  .request()
-                  .header("Response-Status", 404)
-                  .rx(RxFlowableInvoker.class)
-                  .get(new GenericType<String>() {
-                  })
-                  .blockingFirst();
-        } catch (final Exception expected) {
-            throw expected;
-        }
+        assertThrows(NotFoundException.class, () -> {
+            try {
+                client.target("http://jersey.java.net")
+                      .request()
+                      .header("Response-Status", 404)
+                      .rx(RxFlowableInvoker.class)
+                      .get(new GenericType<String>() {
+                      })
+                      .blockingFirst();
+            } catch (final Exception expected) {
+                throw expected;
+            }
+        });
     }
 
     @Test
diff --git a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/aspect4j/Aspect4JTest.java b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/aspect4j/Aspect4JTest.java
index 6b64034..246763d 100644
--- a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/aspect4j/Aspect4JTest.java
+++ b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/aspect4j/Aspect4JTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,11 +19,11 @@
 import javax.ws.rs.core.Application;
 
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class Aspect4JTest extends JerseyTest {
 
@@ -31,7 +31,7 @@
 
     private TestAspect testAspect;
 
-    @Before
+    @BeforeEach
     public void before() {
         testAspect.reset();
     }
diff --git a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/fieldinjection/SpringFieldInjectionTest.java b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/fieldinjection/SpringFieldInjectionTest.java
index 9ec3a54..4b34936 100644
--- a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/fieldinjection/SpringFieldInjectionTest.java
+++ b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/fieldinjection/SpringFieldInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,11 +20,11 @@
 
 import org.glassfish.jersey.server.spring.SpringTestConfiguration;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class SpringFieldInjectionTest extends JerseyTest {
 
diff --git a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/filter/FilterTest.java b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/filter/FilterTest.java
index 539b633..1a30131 100644
--- a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/filter/FilterTest.java
+++ b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/filter/FilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,11 +20,11 @@
 
 import org.glassfish.jersey.server.spring.SpringTestConfiguration;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class FilterTest extends JerseyTest {
 
diff --git a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/methodinjection/SpringMethodInjectionTest.java b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/methodinjection/SpringMethodInjectionTest.java
index 5ce4fec..6bf586c 100644
--- a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/methodinjection/SpringMethodInjectionTest.java
+++ b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/methodinjection/SpringMethodInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,10 +16,10 @@
 
 package org.glassfish.jersey.server.spring.methodinjection;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 import org.glassfish.jersey.server.spring.SpringTestConfiguration;
diff --git a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/parameterinjection/SpringParameterInjectionTest.java b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/parameterinjection/SpringParameterInjectionTest.java
index 35caa98..451de46 100644
--- a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/parameterinjection/SpringParameterInjectionTest.java
+++ b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/parameterinjection/SpringParameterInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,13 +19,13 @@
 import org.glassfish.jersey.server.spring.SpringTestConfiguration;
 import org.glassfish.jersey.server.spring.fieldinjection.SpringFieldInjectionJerseyTestConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
 import javax.ws.rs.core.Application;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class SpringParameterInjectionTest extends JerseyTest {
     @Override
diff --git a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDefaultProfileResourceTest.java b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDefaultProfileResourceTest.java
index f390c5c..fc90449 100644
--- a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDefaultProfileResourceTest.java
+++ b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDefaultProfileResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
@@ -44,6 +44,6 @@
     @Test
     public void shouldUseDefaultComponent() {
         final String result = target("spring-resource").request().get(String.class);
-        Assert.assertEquals("default", result);
+        Assertions.assertEquals("default", result);
     }
 }
diff --git a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDevProfileResourceTest.java b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDevProfileResourceTest.java
index 6c8450c..0a84fa8 100644
--- a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDevProfileResourceTest.java
+++ b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDevProfileResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
 public class SpringDevProfileResourceTest extends JerseyTest {
@@ -44,6 +44,6 @@
     @Test
     public void shouldUseDevProfileBean() {
         final String result = target("spring-resource").request().get(String.class);
-        Assert.assertEquals("dev", result);
+        Assertions.assertEquals("dev", result);
     }
 }
diff --git a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringProfilesTest.java b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringProfilesTest.java
index 8bccbe3..e871afb 100644
--- a/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringProfilesTest.java
+++ b/ext/spring4/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringProfilesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,9 +16,9 @@
 
 package org.glassfish.jersey.server.spring.profiles;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class SpringProfilesTest {
 
diff --git a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/aspect4j/Aspect4JTest.java b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/aspect4j/Aspect4JTest.java
index 0831c1e..246763d 100644
--- a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/aspect4j/Aspect4JTest.java
+++ b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/aspect4j/Aspect4JTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,11 +19,11 @@
 import javax.ws.rs.core.Application;
 
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class Aspect4JTest extends JerseyTest {
 
@@ -31,7 +31,7 @@
 
     private TestAspect testAspect;
 
-    @Before
+    @BeforeEach
     public void before() {
         testAspect.reset();
     }
diff --git a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/fieldinjection/SpringFieldInjectionTest.java b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/fieldinjection/SpringFieldInjectionTest.java
index ccdd34b..4b34936 100644
--- a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/fieldinjection/SpringFieldInjectionTest.java
+++ b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/fieldinjection/SpringFieldInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,11 +20,11 @@
 
 import org.glassfish.jersey.server.spring.SpringTestConfiguration;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class SpringFieldInjectionTest extends JerseyTest {
 
diff --git a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/filter/FilterTest.java b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/filter/FilterTest.java
index 026a0a6..1a30131 100644
--- a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/filter/FilterTest.java
+++ b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/filter/FilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,11 +20,11 @@
 
 import org.glassfish.jersey.server.spring.SpringTestConfiguration;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class FilterTest extends JerseyTest {
 
diff --git a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/methodinjection/SpringMethodInjectionTest.java b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/methodinjection/SpringMethodInjectionTest.java
index cf79272..6bf586c 100644
--- a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/methodinjection/SpringMethodInjectionTest.java
+++ b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/methodinjection/SpringMethodInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,10 +16,10 @@
 
 package org.glassfish.jersey.server.spring.methodinjection;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 import org.glassfish.jersey.server.spring.SpringTestConfiguration;
diff --git a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/parameterinjection/SpringParameterInjectionTest.java b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/parameterinjection/SpringParameterInjectionTest.java
index 9af9049..451de46 100644
--- a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/parameterinjection/SpringParameterInjectionTest.java
+++ b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/parameterinjection/SpringParameterInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,13 +19,13 @@
 import org.glassfish.jersey.server.spring.SpringTestConfiguration;
 import org.glassfish.jersey.server.spring.fieldinjection.SpringFieldInjectionJerseyTestConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
 import javax.ws.rs.core.Application;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class SpringParameterInjectionTest extends JerseyTest {
     @Override
diff --git a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDefaultProfileResourceTest.java b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDefaultProfileResourceTest.java
index e95257f..fc90449 100644
--- a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDefaultProfileResourceTest.java
+++ b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDefaultProfileResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
@@ -44,6 +44,6 @@
     @Test
     public void shouldUseDefaultComponent() {
         final String result = target("spring-resource").request().get(String.class);
-        Assert.assertEquals("default", result);
+        Assertions.assertEquals("default", result);
     }
 }
diff --git a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDevProfileResourceTest.java b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDevProfileResourceTest.java
index 4ccb36a..0a84fa8 100644
--- a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDevProfileResourceTest.java
+++ b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringDevProfileResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
 public class SpringDevProfileResourceTest extends JerseyTest {
@@ -44,6 +44,6 @@
     @Test
     public void shouldUseDevProfileBean() {
         final String result = target("spring-resource").request().get(String.class);
-        Assert.assertEquals("dev", result);
+        Assertions.assertEquals("dev", result);
     }
 }
diff --git a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringProfilesTest.java b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringProfilesTest.java
index be0ac47..e871afb 100644
--- a/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringProfilesTest.java
+++ b/ext/spring5/src/test/java/org/glassfish/jersey/server/spring/profiles/SpringProfilesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,9 +16,9 @@
 
 package org.glassfish.jersey.server.spring.profiles;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class SpringProfilesTest {
 
diff --git a/incubator/cdi-inject-weld/pom.xml b/incubator/cdi-inject-weld/pom.xml
index 599099f..36cf910 100644
--- a/incubator/cdi-inject-weld/pom.xml
+++ b/incubator/cdi-inject-weld/pom.xml
@@ -81,8 +81,13 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/injector/CachedConstructorAnalyzerTest.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/injector/CachedConstructorAnalyzerTest.java
index eebc20d..10e10ae 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/injector/CachedConstructorAnalyzerTest.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/injector/CachedConstructorAnalyzerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,11 +23,13 @@
 
 import javax.enterprise.inject.InjectionException;
 import javax.ws.rs.MatrixParam;
+import javax.ws.rs.NotFoundException;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.core.Context;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Tests {@link CachedConstructorAnalyzer}.
@@ -127,14 +129,16 @@
         assertEquals(2, analyzer.getConstructor().getParameterCount());
     }
 
-    @Test(expected = InjectionException.class)
+    @Test
     public void testUnknownAnnotatedConstructor() {
-        new CachedConstructorAnalyzer<>(UnknownAnnotatedConstructor.class, ANNOTATIONS).getConstructor();
+        assertThrows(InjectionException.class,
+                () -> new CachedConstructorAnalyzer<>(UnknownAnnotatedConstructor.class, ANNOTATIONS).getConstructor());
     }
 
-    @Test(expected = InjectionException.class)
+    @Test
     public void testSingleNonAnnotatedConstructor() {
-        new CachedConstructorAnalyzer<>(SingleNonAnnotatedConstructor.class, ANNOTATIONS).getConstructor();
+        assertThrows(InjectionException.class,
+                () -> new CachedConstructorAnalyzer<>(SingleNonAnnotatedConstructor.class, ANNOTATIONS).getConstructor());
     }
 
     public static class DefaultConstructor {
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/injector/JerseyProxyResolverTest.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/injector/JerseyProxyResolverTest.java
index 76fcd88..521b805 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/injector/JerseyProxyResolverTest.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/injector/JerseyProxyResolverTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,11 +32,11 @@
 import org.glassfish.jersey.internal.inject.InjecteeImpl;
 import org.glassfish.jersey.internal.inject.InjectionResolver;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * Tests Jersey Proxy Resolver.
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ClientInstanceInjectionTest.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ClientInstanceInjectionTest.java
index 37ec79f..7a7b9dc 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ClientInstanceInjectionTest.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ClientInstanceInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 
 import org.glassfish.jersey.inject.weld.managed.CdiInjectionManagerFactory;
 import org.glassfish.jersey.internal.inject.InjectionManager;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Supplier;
@@ -49,16 +49,16 @@
         });
 
         InjectedBean bean = injectionManager.getInstance(InjectedBean.class);
-        Assert.assertNotNull(bean);
-        Assert.assertEquals("6", bean.get());
+        Assertions.assertNotNull(bean);
+        Assertions.assertEquals("6", bean.get());
 
         InjectedBean bean1 = clientInjectionManager1.getInstance(InjectedBean.class);
-        Assert.assertNotNull(bean1);
-        Assert.assertEquals("11", bean1.get());
+        Assertions.assertNotNull(bean1);
+        Assertions.assertEquals("11", bean1.get());
 
         InjectedBean bean2 = clientInjectionManager2.getInstance(InjectedBean.class);
-        Assert.assertNotNull(bean2);
-        Assert.assertEquals("16", bean2.get());
+        Assertions.assertNotNull(bean2);
+        Assertions.assertEquals("16", bean2.get());
 
         injectionManager.shutdown();
         clientInjectionManager1.shutdown();
@@ -104,16 +104,16 @@
         });
 
         InjectedSupplierBean bean = injectionManager.getInstance(InjectedSupplierBean.class);
-        Assert.assertNotNull(bean);
-        Assert.assertEquals("6", bean.get());
+        Assertions.assertNotNull(bean);
+        Assertions.assertEquals("6", bean.get());
 
         InjectedSupplierBean bean1 = clientInjectionManager1.getInstance(InjectedSupplierBean.class);
-        Assert.assertNotNull(bean1);
-        Assert.assertEquals("11", bean1.get());
+        Assertions.assertNotNull(bean1);
+        Assertions.assertEquals("11", bean1.get());
 
         InjectedSupplierBean bean2 = clientInjectionManager2.getInstance(InjectedSupplierBean.class);
-        Assert.assertNotNull(bean2);
-        Assert.assertEquals("16", bean2.get());
+        Assertions.assertNotNull(bean2);
+        Assertions.assertEquals("16", bean2.get());
     }
 
     @Dependent
@@ -173,12 +173,12 @@
         });
 
         InjectedClientServerSupplierBean beanServer = injectionManager.getInstance(InjectedClientServerSupplierBean.class);
-        Assert.assertNotNull(beanServer);
-        Assert.assertEquals("SERVER", beanServer.get());
+        Assertions.assertNotNull(beanServer);
+        Assertions.assertEquals("SERVER", beanServer.get());
 
         InjectedClientServerSupplierBean beanClient = clientInjectionManager.getInstance(InjectedClientServerSupplierBean.class);
-        Assert.assertNotNull(beanClient);
-        Assert.assertEquals("CLIENT", beanClient.get());
+        Assertions.assertNotNull(beanClient);
+        Assertions.assertEquals("CLIENT", beanClient.get());
     }
 
     @Dependent
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/DisposableSupplierTest.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/DisposableSupplierTest.java
index 4ba137b..478d493 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/DisposableSupplierTest.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/DisposableSupplierTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,13 +31,13 @@
 import org.glassfish.jersey.internal.inject.DisposableSupplier;
 import org.glassfish.jersey.process.internal.RequestScope;
 
-import org.junit.Before;
-import org.junit.Test;
-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.assertSame;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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.assertSame;
 
 /**
  * Tests that {@link DisposableSupplier} is properly processed by {@link BeanHelper}.
@@ -58,7 +58,7 @@
 
     private static AtomicBoolean onlyOnceGuard = new AtomicBoolean(false);
 
-    @Before
+    @BeforeEach
     public void bindInit() {
         if (!onlyOnceGuard.getAndSet(true)) {
             BindingTestHelper.bind(injectionManager, binder -> binder.bindFactory(new DisposableSupplierImpl())
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/InjectionManagerTest.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/InjectionManagerTest.java
index 6cf1053..db3390c 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/InjectionManagerTest.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/InjectionManagerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import org.glassfish.jersey.inject.weld.managed.CdiInjectionManagerFactory;
 import org.glassfish.jersey.internal.inject.InjectionManager;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class InjectionManagerTest extends TestParent {
 
@@ -31,16 +31,16 @@
     public void injectionManagerTest() {
         injectionManager.completeRegistration();
         final InjectionManagerInjectedBean bean = injectionManager.getInstance(InjectionManagerInjectedBean.class);
-        Assert.assertNotNull(bean);
+        Assertions.assertNotNull(bean);
         InjectionManager got = bean.getInjectionManager();
-        Assert.assertEquals(injectionManager, got);
+        Assertions.assertEquals(injectionManager, got);
 
         final InjectionManager clientInjectionManager = new CdiInjectionManagerFactory().create(null, RuntimeType.CLIENT);
         clientInjectionManager.completeRegistration();
         final InjectionManagerInjectedBean clientBean = clientInjectionManager.getInstance(InjectionManagerInjectedBean.class);
-        Assert.assertNotNull(clientBean);
+        Assertions.assertNotNull(clientBean);
         InjectionManager gotClient = clientBean.getInjectionManager();
-        Assert.assertEquals(clientInjectionManager, gotClient);
+        Assertions.assertEquals(clientInjectionManager, gotClient);
     }
 
     @Dependent
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ProviderInjectionTest.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ProviderInjectionTest.java
index 3fe20cf..74da492 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ProviderInjectionTest.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ProviderInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,17 +29,17 @@
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 
 import org.hamcrest.core.StringStartsWith;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 import java.util.function.Supplier;
 
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 public class ProviderInjectionTest extends TestParent {
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         SeContainerInitializer containerInitializer = SeContainerInitializer.newInstance();
         containerInitializer.addExtensions(new ProviderInjectionTestExtension());
@@ -55,7 +55,7 @@
 //        });
 
         Greeting greeting = injectionManager.getInstance(Greeting.class);
-        Assert.assertNotNull(greeting);
+        Assertions.assertNotNull(greeting);
 
         ProviderInject instance = injectionManager.getInstance(ProviderInject.class);
         assertThat(instance.greeting.get().getGreeting(), StringStartsWith.startsWith(CzechGreeting.GREETING));
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierClassBindingTest.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierClassBindingTest.java
index bf10029..3ab0571 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierClassBindingTest.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierClassBindingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,11 +30,11 @@
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 
 import org.hamcrest.core.StringStartsWith;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Tests that {@link Supplier} can be registered as a class-factory.
@@ -44,7 +44,7 @@
 
     public static final String GREET = "Hi";
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         SeContainerInitializer containerInitializer = SeContainerInitializer.newInstance();
         containerInitializer.addExtensions(new SupplierClassBindingTestExtension());
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierContractsTest.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierContractsTest.java
index 8f576e1..9c399bd 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierContractsTest.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierContractsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,14 +30,15 @@
 
 import org.glassfish.jersey.internal.inject.Injections;
 import org.jboss.weld.exceptions.DeploymentException;
-import org.junit.After;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
 
 import java.util.function.Consumer;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
+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;
 
 /**
  * Tests that {@link java.util.function.Supplier} can contain multiple contracts.
@@ -69,7 +70,7 @@
         injectionManager = Injections.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         if (container != null && container.isRunning()) {
             container.close();
@@ -275,48 +276,54 @@
         assertSame(conversation.greetingSupplier, conversation.printableSupplier);
     }
 
-    @Test(expected = DeploymentException.class)
+    @Test
     public void testClassFactoryFailedWrongImplementation() {
-//        BindingTestHelper.bind(injectionManager, binder -> {
-//            binder.bindFactory(SupplierGreeting.class).to(EnglishGreeting.class);
-//            binder.bindAsContract(Conversation.class);
-//        });
+        assertThrows(DeploymentException.class, () -> {
+//            BindingTestHelper.bind(injectionManager, binder -> {
+//                binder.bindFactory(SupplierGreeting.class).to(EnglishGreeting.class);
+//                binder.bindAsContract(Conversation.class);
+//            });
 
-        setup((binder) -> {
-            binder.bindFactory(SupplierGreeting.class).to(EnglishGreeting.class);
-            binder.bindAsContract(Conversation.class);
+            setup((binder) -> {
+                binder.bindFactory(SupplierGreeting.class).to(EnglishGreeting.class);
+                binder.bindAsContract(Conversation.class);
+            });
+
+            injectionManager.getInstance(Conversation.class);
         });
-
-        injectionManager.getInstance(Conversation.class);
     }
 
-    @Test(expected = DeploymentException.class)
+    @Test
     public void testInstanceFactoryFailsWrongImplementation() {
-        setup((binder) -> {
-            binder.bindFactory(new SupplierGreeting()).to(EnglishGreeting.class);
-            binder.bindAsContract(Conversation.class);
-        });
+        assertThrows(DeploymentException.class, () -> {
+            setup((binder) -> {
+                binder.bindFactory(new SupplierGreeting()).to(EnglishGreeting.class);
+                binder.bindAsContract(Conversation.class);
+            });
 
-        BindingTestHelper.bind(injectionManager, binder -> {
-            binder.bindFactory(new SupplierGreeting()).to(EnglishGreeting.class);
-//            binder.bindAsContract(Conversation.class);
-        });
+            BindingTestHelper.bind(injectionManager, binder -> {
+                binder.bindFactory(new SupplierGreeting()).to(EnglishGreeting.class);
+//                binder.bindAsContract(Conversation.class);
+            });
 
-        injectionManager.getInstance(Conversation.class);
+            injectionManager.getInstance(Conversation.class);
+        });
     }
 
-    @Test(expected = DeploymentException.class)
+    @Test
     public void testFailsImplementationButInterfaceExpected() {
-        setup((binder) -> {
-            binder.bindFactory(new SupplierGreeting()).to(CzechGreeting.class);
-            binder.bindAsContract(Conversation.class);
-        });
+        assertThrows(DeploymentException.class, () -> {
+            setup((binder) -> {
+                binder.bindFactory(new SupplierGreeting()).to(CzechGreeting.class);
+                binder.bindAsContract(Conversation.class);
+            });
 
-        BindingTestHelper.bind(injectionManager, binder -> {
-            binder.bindFactory(new SupplierGreeting()).to(CzechGreeting.class);
-//            binder.bindAsContract(Conversation.class);
-        });
+            BindingTestHelper.bind(injectionManager, binder -> {
+                binder.bindFactory(new SupplierGreeting()).to(CzechGreeting.class);
+//                binder.bindAsContract(Conversation.class);
+            });
 
-        injectionManager.getInstance(Conversation.class);
+            injectionManager.getInstance(Conversation.class);
+        });
     }
 }
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierInstanceBindingTest.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierInstanceBindingTest.java
index eb90843..2e1f260 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierInstanceBindingTest.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/SupplierInstanceBindingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,14 +31,14 @@
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 
 import org.hamcrest.core.StringStartsWith;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Tests that {@link Supplier} can be registered as a instance-factory.
@@ -51,14 +51,14 @@
     private static long supplierHit = 2;
     private static AtomicBoolean runOnlyOnceGuard = new AtomicBoolean(false);
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         SeContainerInitializer containerInitializer = SeContainerInitializer.newInstance();
         containerInitializer.addExtensions(new SupplierInstanceBindingTestExtension());
         container = containerInitializer.initialize();
     }
 
-    @Before
+    @BeforeEach
     public void initBinding() {
         if (!runOnlyOnceGuard.getAndSet(true)) {
             MyVetoedLongSupplier supplier = new MyVetoedLongSupplier();
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/TestParent.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/TestParent.java
index 0938dd2..0dfc70d 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/TestParent.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/TestParent.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,27 +20,27 @@
 import javax.enterprise.inject.se.SeContainerInitializer;
 import org.glassfish.jersey.internal.inject.InjectionManager;
 import org.glassfish.jersey.internal.inject.Injections;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.BeforeAll;
 
 public class TestParent {
     protected static SeContainer container;
     protected InjectionManager injectionManager;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         SeContainerInitializer containerInitializer = SeContainerInitializer.newInstance();
         container = containerInitializer.initialize();
     }
 
-    @Before
+    @BeforeEach
     public void init() {
         injectionManager = Injections.createInjectionManager();
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() throws Exception {
         container.close();
     }
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ThreadScopeTest.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ThreadScopeTest.java
index e3fc4d2..a87f8f9 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ThreadScopeTest.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/internal/managed/ThreadScopeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,13 +29,13 @@
 import org.glassfish.jersey.process.internal.RequestScope;
 
 import org.hamcrest.core.StringStartsWith;
-import org.junit.Before;
-import org.junit.Test;
-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.assertThat;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Testing thread scope integration.
@@ -46,7 +46,7 @@
 
     private static AtomicBoolean runOnlyOnceGuard = new AtomicBoolean(false);
 
-    @Before
+    @BeforeEach
     public void initOnce() {
         if (!runOnlyOnceGuard.getAndSet(true)) {
             BindingTestHelper.bind(injectionManager, binder -> {
diff --git a/incubator/declarative-linking/pom.xml b/incubator/declarative-linking/pom.xml
index 56d2208..f0ea764 100644
--- a/incubator/declarative-linking/pom.xml
+++ b/incubator/declarative-linking/pom.xml
@@ -63,8 +63,8 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
 
diff --git a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/EntityDescriptorTest.java b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/EntityDescriptorTest.java
index 5ed63fd..2cecb55 100644
--- a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/EntityDescriptorTest.java
+++ b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/EntityDescriptorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 
 import org.glassfish.jersey.linking.mapping.ResourceMappingContext;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/FieldProcessorTest.java b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/FieldProcessorTest.java
index e0afeba..17d4243 100644
--- a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/FieldProcessorTest.java
+++ b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/FieldProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -49,9 +49,9 @@
 import org.glassfish.jersey.server.model.RuntimeResource;
 import org.glassfish.jersey.uri.UriTemplate;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Mark Hadley
diff --git a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/HeaderProcessorTest.java b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/HeaderProcessorTest.java
index cf360ab..ef08c17 100644
--- a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/HeaderProcessorTest.java
+++ b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/HeaderProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,9 +34,9 @@
 import org.glassfish.jersey.server.model.RuntimeResource;
 import org.glassfish.jersey.uri.UriTemplate;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *
diff --git a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/LinkELContextTest.java b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/LinkELContextTest.java
index 89bf3f4..03d3aac 100644
--- a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/LinkELContextTest.java
+++ b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/LinkELContextTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,9 +19,9 @@
 import javax.el.ExpressionFactory;
 import javax.el.ValueExpression;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  *
diff --git a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/integration/LinkingManualTest.java b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/integration/LinkingManualTest.java
index 6375042..cf75afe 100644
--- a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/integration/LinkingManualTest.java
+++ b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/integration/LinkingManualTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,7 +25,7 @@
 import org.glassfish.jersey.linking.integration.app.LinkingManualApplication;
 import org.glassfish.jersey.linking.integration.representations.OrderRequest;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.skyscreamer.jsonassert.JSONAssert;
 
 public class LinkingManualTest extends JerseyTest {
diff --git a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/integration/LinkingTest.java b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/integration/LinkingTest.java
index 4c0e958..d299603 100644
--- a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/integration/LinkingTest.java
+++ b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/integration/LinkingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,7 +25,7 @@
 import org.glassfish.jersey.linking.integration.app.LinkingApplication;
 import org.glassfish.jersey.linking.integration.representations.OrderRequest;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.skyscreamer.jsonassert.JSONAssert;
 
 public class LinkingTest extends JerseyTest {
diff --git a/incubator/html-json/pom.xml b/incubator/html-json/pom.xml
index 1714b34..af73db3 100644
--- a/incubator/html-json/pom.xml
+++ b/incubator/html-json/pom.xml
@@ -70,8 +70,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/AbstractTypeTester.java b/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/AbstractTypeTester.java
index 4e5c771..764ac2b 100644
--- a/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/AbstractTypeTester.java
+++ b/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/AbstractTypeTester.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -41,7 +41,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Abstract entity type tester base class.
@@ -145,7 +145,7 @@
         assertEquals(in.length, out.length);
         for (int i = 0; i < in.length; i++) {
             if (in[i] != out[i]) {
-                assertEquals("Index: " + i, in[i], out[i]);
+                assertEquals(in[i], out[i], "Index: " + i);
             }
         }
     }
diff --git a/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ComputedPropertyTest.java b/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ComputedPropertyTest.java
index eb5a839..1302387 100644
--- a/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ComputedPropertyTest.java
+++ b/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ComputedPropertyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import net.java.html.json.ComputedProperty;
 import net.java.html.json.Model;
diff --git a/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityOnArrayTest.java b/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityOnArrayTest.java
index a1e01c7..8a548fe 100644
--- a/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityOnArrayTest.java
+++ b/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityOnArrayTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,9 +31,9 @@
 
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import net.java.html.json.Model;
 
@@ -113,9 +113,9 @@
         final Class c = arr.getClass();
         Object ret = new HtmlJsonProvider().readFrom(c, null, null, MediaType.APPLICATION_JSON_TYPE, null, is);
 
-        assertTrue("It is array: " + ret, ret instanceof MyBean[]);
+        assertTrue(ret instanceof MyBean[], "It is array: " + ret);
         MyBean[] res = (MyBean[]) ret;
-        assertEquals("Two items: ", 2, res.length);
+        assertEquals(2, res.length, "Two items: ");
         assertEquals(arr[0], res[0]);
         assertEquals(arr[1], res[1]);
     }
@@ -127,6 +127,6 @@
         assertEquals(200, response.getStatus());
         final MyBean[] teb = response.readEntity(MyBean[].class);
 
-        assertEquals("value", "hello", teb[0].getValue());
+        assertEquals("hello", teb[0].getValue(), "value");
     }
 }
diff --git a/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityOnListTest.java b/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityOnListTest.java
index 2dffdb7..e742ade 100644
--- a/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityOnListTest.java
+++ b/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityOnListTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import net.java.html.json.Model;
 
@@ -104,7 +104,7 @@
         GenericType<List<MyBean>> ge = new GenericType<List<MyBean>>() {};
         List<MyBean> teb = response.readEntity(ge);
 
-        assertEquals("one element in list: " + teb, 1, teb.size());
-        assertEquals("value", "hello", teb.get(0).getValue());
+        assertEquals(1, teb.size(), "one element in list: " + teb);
+        assertEquals("hello", teb.get(0).getValue(), "value");
     }
 }
diff --git a/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityTest.java b/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityTest.java
index dfc996f..af23c64 100644
--- a/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityTest.java
+++ b/incubator/html-json/src/test/java/org/glassfish/jersey/media/htmljson/ModelEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import net.java.html.json.Model;
 import net.java.html.json.Property;
@@ -88,6 +88,6 @@
         assertEquals(200, response.getStatus());
         final MyBean teb = response.readEntity(MyBean.class);
 
-        assertEquals("value", "hello", teb.getValue());
+        assertEquals("hello", teb.getValue(), "value");
     }
 }
diff --git a/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceBaseTest.java b/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceBaseTest.java
index 2bbedf8..76ad72a 100644
--- a/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceBaseTest.java
+++ b/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceBaseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,12 +17,12 @@
 package org.glassfish.jersey.kryo;
 
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.core.Response;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public abstract class PersonResourceBaseTest extends JerseyTest {
 
diff --git a/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceTest.java b/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceTest.java
index dbbcbd6..39b4247 100644
--- a/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceTest.java
+++ b/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test for kryo resource.
diff --git a/incubator/open-tracing/pom.xml b/incubator/open-tracing/pom.xml
index 6e74502..1178cbc 100644
--- a/incubator/open-tracing/pom.xml
+++ b/incubator/open-tracing/pom.xml
@@ -60,8 +60,8 @@
 
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
 
diff --git a/inject/cdi2-se/pom.xml b/inject/cdi2-se/pom.xml
index da9dcdc..a9e0e25 100644
--- a/inject/cdi2-se/pom.xml
+++ b/inject/cdi2-se/pom.xml
@@ -50,8 +50,13 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/DisposableSupplierTest.java b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/DisposableSupplierTest.java
index ed82158..69d68eb 100644
--- a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/DisposableSupplierTest.java
+++ b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/DisposableSupplierTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,14 +33,14 @@
 import org.glassfish.jersey.process.internal.RequestScope;
 import org.glassfish.jersey.process.internal.RequestScoped;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-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.assertSame;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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.assertSame;
 
 /**
  * Tests that {@link DisposableSupplier} is properly processed by {@link BeanHelper}.
@@ -58,12 +58,12 @@
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = BindingTestHelper.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         injectionManager.shutdown();
     }
diff --git a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/ProviderInjectionTest.java b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/ProviderInjectionTest.java
index 60cd4b2..d8315d4 100644
--- a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/ProviderInjectionTest.java
+++ b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/ProviderInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,21 +24,21 @@
 import org.glassfish.jersey.internal.inject.InjectionManager;
 
 import org.hamcrest.core.StringStartsWith;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 public class ProviderInjectionTest {
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = BindingTestHelper.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         injectionManager.shutdown();
     }
diff --git a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierClassBindingTest.java b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierClassBindingTest.java
index e85a558..f20c20e 100644
--- a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierClassBindingTest.java
+++ b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierClassBindingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,12 +24,12 @@
 import org.glassfish.jersey.internal.inject.InjectionManager;
 
 import org.hamcrest.core.StringStartsWith;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Tests that {@link Supplier} can be registered as a class-factory.
@@ -41,12 +41,12 @@
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = BindingTestHelper.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         injectionManager.shutdown();
     }
diff --git a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierContractsTest.java b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierContractsTest.java
index 3831e86..0e5cde9 100644
--- a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierContractsTest.java
+++ b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierContractsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,12 +22,13 @@
 import org.glassfish.jersey.internal.inject.InjectionManager;
 
 import org.jboss.weld.exceptions.DeploymentException;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * Tests that {@link java.util.function.Supplier} can contain multiple contracts.
@@ -39,12 +40,12 @@
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = BindingTestHelper.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         injectionManager.shutdown();
     }
@@ -195,33 +196,39 @@
         assertSame(conversation.greetingSupplier, conversation.printableSupplier);
     }
 
-    @Test(expected = DeploymentException.class)
+    @Test
     public void testClassFactoryFailedWrongImplementation() {
-        BindingTestHelper.bind(injectionManager, binder -> {
-            binder.bindFactory(SupplierGreeting.class).to(EnglishGreeting.class);
-            binder.bindAsContract(Conversation.class);
-        });
+        assertThrows(DeploymentException.class, () -> {
+            BindingTestHelper.bind(injectionManager, binder -> {
+                binder.bindFactory(SupplierGreeting.class).to(EnglishGreeting.class);
+                binder.bindAsContract(Conversation.class);
+            });
 
-        injectionManager.getInstance(Conversation.class);
+            injectionManager.getInstance(Conversation.class);
+        });
     }
 
-    @Test(expected = DeploymentException.class)
+    @Test
     public void testInstanceFactoryFailsWrongImplementation() {
-        BindingTestHelper.bind(injectionManager, binder -> {
-            binder.bindFactory(new SupplierGreeting()).to(EnglishGreeting.class);
-            binder.bindAsContract(Conversation.class);
-        });
+        assertThrows(DeploymentException.class, () -> {
+            BindingTestHelper.bind(injectionManager, binder -> {
+                binder.bindFactory(new SupplierGreeting()).to(EnglishGreeting.class);
+                binder.bindAsContract(Conversation.class);
+            });
 
-        injectionManager.getInstance(Conversation.class);
+            injectionManager.getInstance(Conversation.class);
+        });
     }
 
-    @Test(expected = DeploymentException.class)
+    @Test
     public void testFailsImplementationButInterfaceExpected() {
-        BindingTestHelper.bind(injectionManager, binder -> {
-            binder.bindFactory(new SupplierGreeting()).to(CzechGreeting.class);
-            binder.bindAsContract(Conversation.class);
-        });
+        assertThrows(DeploymentException.class, () -> {
+            BindingTestHelper.bind(injectionManager, binder -> {
+                binder.bindFactory(new SupplierGreeting()).to(CzechGreeting.class);
+                binder.bindAsContract(Conversation.class);
+            });
 
-        injectionManager.getInstance(Conversation.class);
+            injectionManager.getInstance(Conversation.class);
+        });
     }
 }
diff --git a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierInstanceBindingTest.java b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierInstanceBindingTest.java
index 9c2575d..9a01514 100644
--- a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierInstanceBindingTest.java
+++ b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/SupplierInstanceBindingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,13 +25,13 @@
 import org.glassfish.jersey.internal.inject.InjectionManager;
 
 import org.hamcrest.core.StringStartsWith;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Tests that {@link Supplier} can be registered as a instance-factory.
@@ -43,12 +43,12 @@
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = BindingTestHelper.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         injectionManager.shutdown();
     }
diff --git a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/ThreadScopeTest.java b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/ThreadScopeTest.java
index 0a667bb..1c3ded4 100644
--- a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/ThreadScopeTest.java
+++ b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/ThreadScopeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,12 +29,12 @@
 import org.glassfish.jersey.process.internal.RequestScope;
 
 import org.hamcrest.core.StringStartsWith;
-import org.junit.Test;
-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.assertThat;
+import org.junit.jupiter.api.Test;
+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.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Testing thread scope integration.
diff --git a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/injector/CachedConstructorAnalyzerTest.java b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/injector/CachedConstructorAnalyzerTest.java
index 6f5e863..8fa714b 100644
--- a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/injector/CachedConstructorAnalyzerTest.java
+++ b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/injector/CachedConstructorAnalyzerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,9 @@
 
 import javax.enterprise.inject.InjectionException;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Tests {@link CachedConstructorAnalyzer}.
@@ -128,14 +129,16 @@
         assertEquals(2, analyzer.getConstructor().getParameterCount());
     }
 
-    @Test(expected = InjectionException.class)
+    @Test
     public void testUnknownAnnotatedConstructor() {
-        new CachedConstructorAnalyzer<>(UnknownAnnotatedConstructor.class, ANNOTATIONS).getConstructor();
+        assertThrows(InjectionException.class,
+                () -> new CachedConstructorAnalyzer<>(UnknownAnnotatedConstructor.class, ANNOTATIONS).getConstructor());
     }
 
-    @Test(expected = InjectionException.class)
+    @Test
     public void testSingleNonAnnotatedConstructor() {
-        new CachedConstructorAnalyzer<>(SingleNonAnnotatedConstructor.class, ANNOTATIONS).getConstructor();
+        assertThrows(InjectionException.class,
+                () -> new CachedConstructorAnalyzer<>(SingleNonAnnotatedConstructor.class, ANNOTATIONS).getConstructor());
     }
 
     public static class DefaultConstructor {
diff --git a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/injector/JerseyProxyResolverTest.java b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/injector/JerseyProxyResolverTest.java
index 6726c8a..5f071b1 100644
--- a/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/injector/JerseyProxyResolverTest.java
+++ b/inject/cdi2-se/src/test/java/org/glassfish/jersey/inject/cdi/se/injector/JerseyProxyResolverTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,11 +33,11 @@
 import org.glassfish.jersey.internal.inject.InjecteeImpl;
 import org.glassfish.jersey.internal.inject.InjectionResolver;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * Tests Jersey Proxy Resolver.
diff --git a/inject/hk2/pom.xml b/inject/hk2/pom.xml
index 195b4ec..f33f72d 100644
--- a/inject/hk2/pom.xml
+++ b/inject/hk2/pom.xml
@@ -61,8 +61,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/DisposableSupplierTest.java b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/DisposableSupplierTest.java
index c3bb507..9eefe48 100644
--- a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/DisposableSupplierTest.java
+++ b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/DisposableSupplierTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,14 +31,14 @@
 import org.glassfish.jersey.process.internal.RequestScope;
 import org.glassfish.jersey.process.internal.RequestScoped;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-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.assertSame;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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.assertSame;
 
 /**
  * Tests that {@link org.glassfish.jersey.internal.inject.DisposableSupplier} is properly processed by {@link Hk2Helper}.
@@ -52,12 +52,12 @@
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = BindingTestHelper.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         injectionManager.shutdown();
     }
diff --git a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/InjectionManagerTest.java b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/InjectionManagerTest.java
index 02be49f..57a5d49 100644
--- a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/InjectionManagerTest.java
+++ b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/InjectionManagerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,10 +26,11 @@
 import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
 import org.glassfish.hk2.utilities.binding.AbstractBinder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Petr Bouda
@@ -63,9 +64,11 @@
         assertNotNull(injectionManager.getInstance(EnglishGreeting.class));
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testUnknownParent() {
-        Injections.createInjectionManager(new Object());
+        assertThrows(IllegalArgumentException.class, () -> {
+            Injections.createInjectionManager(new Object());
+        });
     }
 
     @Test
@@ -92,9 +95,11 @@
         assertNotNull(injectionManager.getInstance(EnglishGreeting.class));
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testRegisterUnknownProvider() {
-        InjectionManager injectionManager = Injections.createInjectionManager();
-        injectionManager.register(new Object());
+        assertThrows(IllegalArgumentException.class, () -> {
+            InjectionManager injectionManager = Injections.createInjectionManager();
+            injectionManager.register(new Object());
+        });
     }
 }
diff --git a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierClassBindingTest.java b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierClassBindingTest.java
index 02a7938..0c538ac 100644
--- a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierClassBindingTest.java
+++ b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierClassBindingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,12 +22,12 @@
 
 import org.glassfish.jersey.internal.inject.InjectionManager;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 /**
  * Tests that {@link java.util.function.Supplier} can be registered as a class-factory.
@@ -38,12 +38,12 @@
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = BindingTestHelper.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         injectionManager.shutdown();
     }
diff --git a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierContractsTest.java b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierContractsTest.java
index a43c04e..15101ad 100644
--- a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierContractsTest.java
+++ b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierContractsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,12 +22,13 @@
 
 import org.glassfish.hk2.api.MultiException;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * Tests that {@link java.util.function.Supplier} can contain multiple contracts.
@@ -38,12 +39,12 @@
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = BindingTestHelper.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         injectionManager.shutdown();
     }
@@ -194,33 +195,39 @@
         assertSame(conversation.greetingSupplier, conversation.printableSupplier);
     }
 
-    @Test(expected = MultiException.class)
+    @Test
     public void testClassFactoryFailedWrongImplementation() {
-        BindingTestHelper.bind(injectionManager, binder -> {
-            binder.bindFactory(SupplierGreeting.class).to(EnglishGreeting.class);
-            binder.bindAsContract(Conversation.class);
-        });
+        assertThrows(MultiException.class, () -> {
+            BindingTestHelper.bind(injectionManager, binder -> {
+                binder.bindFactory(SupplierGreeting.class).to(EnglishGreeting.class);
+                binder.bindAsContract(Conversation.class);
+            });
 
-        injectionManager.getInstance(Conversation.class);
+            injectionManager.getInstance(Conversation.class);
+        });
     }
 
-    @Test(expected = MultiException.class)
+    @Test
     public void testInstanceFactoryFailsWrongImplementation() {
-        BindingTestHelper.bind(injectionManager, binder -> {
-            binder.bindFactory(new SupplierGreeting()).to(EnglishGreeting.class);
-            binder.bindAsContract(Conversation.class);
-        });
+        assertThrows(MultiException.class, () -> {
+            BindingTestHelper.bind(injectionManager, binder -> {
+                binder.bindFactory(new SupplierGreeting()).to(EnglishGreeting.class);
+                binder.bindAsContract(Conversation.class);
+            });
 
-        injectionManager.getInstance(Conversation.class);
+            injectionManager.getInstance(Conversation.class);
+        });
     }
 
-    @Test(expected = MultiException.class)
+    @Test
     public void testFailsImplementationButInterfaceExpected() {
-        BindingTestHelper.bind(injectionManager, binder -> {
-            binder.bindFactory(new SupplierGreeting()).to(CzechGreeting.class);
-            binder.bindAsContract(Conversation.class);
-        });
+        assertThrows(MultiException.class, () -> {
+            BindingTestHelper.bind(injectionManager, binder -> {
+                binder.bindFactory(new SupplierGreeting()).to(CzechGreeting.class);
+                binder.bindAsContract(Conversation.class);
+            });
 
-        injectionManager.getInstance(Conversation.class);
+            injectionManager.getInstance(Conversation.class);
+        });
     }
 }
diff --git a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierInstanceBindingTest.java b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierInstanceBindingTest.java
index 93ccc10..5fdf2a0 100644
--- a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierInstanceBindingTest.java
+++ b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierInstanceBindingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,12 +23,12 @@
 
 import org.glassfish.jersey.internal.inject.InjectionManager;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 /**
  * Tests that {@link java.util.function.Supplier} can be registered as a instance-factory.
@@ -49,12 +49,12 @@
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = BindingTestHelper.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         injectionManager.shutdown();
     }
diff --git a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierProxyTest.java b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierProxyTest.java
index 2604d27..79e9c9f 100644
--- a/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierProxyTest.java
+++ b/inject/hk2/src/test/java/org/glassfish/jersey/inject/hk2/SupplierProxyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,11 +18,11 @@
 
 import org.glassfish.jersey.internal.inject.InjectionManager;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests that {@link java.util.function.Supplier} can contain proxies.
@@ -33,12 +33,12 @@
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = BindingTestHelper.createInjectionManager();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         injectionManager.shutdown();
     }
diff --git a/media/jaxb/pom.xml b/media/jaxb/pom.xml
index 61fae82..b2d691d 100644
--- a/media/jaxb/pom.xml
+++ b/media/jaxb/pom.xml
@@ -144,8 +144,13 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/AbstractJaxbProviderTest.java b/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/AbstractJaxbProviderTest.java
index 232c9d7..8be1403 100644
--- a/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/AbstractJaxbProviderTest.java
+++ b/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/AbstractJaxbProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,13 +30,13 @@
 
 import org.glassfish.jersey.internal.inject.InjectionManager;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 public class AbstractJaxbProviderTest {
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         injectionManager = SaxParserFactoryInjectionProviderTest.createInjectionManager();
     }
diff --git a/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/FeatureAndPropertySupplierTest.java b/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/FeatureAndPropertySupplierTest.java
index bc28e3a..74148fe 100644
--- a/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/FeatureAndPropertySupplierTest.java
+++ b/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/FeatureAndPropertySupplierTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,10 +23,11 @@
 import org.glassfish.jersey.jaxb.PropertySupplier;
 import org.glassfish.jersey.message.MessageProperties;
 import org.hamcrest.CoreMatchers;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
@@ -44,7 +45,6 @@
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.Collections;
 import java.util.Map;
@@ -56,13 +56,13 @@
     private static PrintStream systemErrorStream;
     private static ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() {
         systemErrorStream = System.err;
         System.setErr(new PrintStream(errorStream));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         System.setErr(systemErrorStream);
     }
@@ -85,7 +85,7 @@
         try {
             injectionManager.getInstance(SAXParserFactory.class).newSAXParser().getXMLReader()
                     .parse(new InputSource(new ByteArrayInputStream(content.getBytes("us-ascii"))));
-            Assert.fail("DOCTYPE is NOT disallowed when the feature \"disallow-doctype-decl\" is true");
+            Assertions.fail("DOCTYPE is NOT disallowed when the feature \"disallow-doctype-decl\" is true");
         } catch (SAXParseException saxe) {
             //expected
         }
@@ -105,7 +105,7 @@
         injectionManager.getInstance(SAXParserFactory.class).newSAXParser();
         String warning = new String(errorStream.toByteArray());
         errorStream.reset();
-        Assert.assertThat(warning, CoreMatchers.containsString("Cannot set property \"Unknown-Property\""));
+        MatcherAssert.assertThat(warning, CoreMatchers.containsString("Cannot set property \"Unknown-Property\""));
     }
 
     @Test
@@ -132,7 +132,7 @@
         injectionManager.getInstance(SAXParserFactory.class).newSAXParser();
         String warning = new String(errorStream.toByteArray());
         errorStream.reset();
-        Assert.assertThat(warning, CoreMatchers.containsString("Cannot set property \"Unknown-Property\""));
+        MatcherAssert.assertThat(warning, CoreMatchers.containsString("Cannot set property \"Unknown-Property\""));
     }
 
     @Test
@@ -151,7 +151,7 @@
         LogManager.getLogManager().reset();
         String warning = new String(errorStream.toByteArray());
         errorStream.reset();
-        Assert.assertThat(warning, CoreMatchers.containsString("Cannot set property \"Unknown-Property\""));
+        MatcherAssert.assertThat(warning, CoreMatchers.containsString("Cannot set property \"Unknown-Property\""));
     }
 
     @Test
@@ -169,7 +169,7 @@
         injectionManager.getInstance(TransformerFactory.class);
         String warning = new String(errorStream.toByteArray());
         errorStream.reset();
-        Assert.assertThat(warning, CoreMatchers.containsString("Cannot set feature \"Unknown-Feature\""));
+        MatcherAssert.assertThat(warning, CoreMatchers.containsString("Cannot set feature \"Unknown-Feature\""));
     }
 
     @Test
@@ -187,7 +187,7 @@
         injectionManager.getInstance(XMLInputFactory.class);
         String warning = new String(errorStream.toByteArray());
         errorStream.reset();
-        Assert.assertThat(warning, CoreMatchers.containsString("Cannot set property \"Unknown-Property\""));
+        MatcherAssert.assertThat(warning, CoreMatchers.containsString("Cannot set property \"Unknown-Property\""));
     }
 
     @Test
@@ -205,7 +205,7 @@
         injectionManager.getInstance(DocumentBuilderFactory.class);
         String warning = new String(errorStream.toByteArray());
         errorStream.reset();
-        Assert.assertThat(warning, CoreMatchers.containsString("Cannot set property \"Unknown-Property\""));
+        MatcherAssert.assertThat(warning, CoreMatchers.containsString("Cannot set property \"Unknown-Property\""));
 
     }
 
diff --git a/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/JaxbStringReaderProviderTest.java b/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/JaxbStringReaderProviderTest.java
index d906232..38793d8 100644
--- a/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/JaxbStringReaderProviderTest.java
+++ b/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/JaxbStringReaderProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,7 +40,7 @@
 import org.glassfish.jersey.model.internal.CommonConfig;
 import org.glassfish.jersey.model.internal.ComponentBag;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class JaxbStringReaderProviderTest {
 
diff --git a/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/SaxParserFactoryInjectionProviderTest.java b/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/SaxParserFactoryInjectionProviderTest.java
index 5a79737..67e6e55 100644
--- a/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/SaxParserFactoryInjectionProviderTest.java
+++ b/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/SaxParserFactoryInjectionProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,13 +43,13 @@
 import org.glassfish.jersey.internal.inject.PerThread;
 import org.glassfish.jersey.jaxb.FeatureSupplier;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.xml.sax.InputSource;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 /**
  * @author Martin Matula
@@ -61,7 +61,7 @@
     private SAXParserFactory ff1;
     private SAXParserFactory ff2;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         injectionManager = createInjectionManager();
     }
diff --git a/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/SourceProviderTest.java b/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/SourceProviderTest.java
index 81e9cfe..9f4fa5b 100644
--- a/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/SourceProviderTest.java
+++ b/media/jaxb/src/test/java/org/glassfish/jersey/jaxb/internal/SourceProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,14 +32,14 @@
 import org.glassfish.jersey.internal.inject.InjectionManager;
 import org.glassfish.jersey.message.internal.SourceProvider;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 public class SourceProviderTest {
 
     private InjectionManager injectionManager;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         injectionManager = SaxParserFactoryInjectionProviderTest.createInjectionManager(new AbstractBinder() {
             @Override
diff --git a/media/json-binding/pom.xml b/media/json-binding/pom.xml
index 899e682..b83373c 100644
--- a/media/json-binding/pom.xml
+++ b/media/json-binding/pom.xml
@@ -113,8 +113,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/media/json-binding/src/test/java/org/glassfish/jersey/jsonb/internal/JsonBindingProviderTest.java b/media/json-binding/src/test/java/org/glassfish/jersey/jsonb/internal/JsonBindingProviderTest.java
index 1a8cf00..b373b2e 100644
--- a/media/json-binding/src/test/java/org/glassfish/jersey/jsonb/internal/JsonBindingProviderTest.java
+++ b/media/json-binding/src/test/java/org/glassfish/jersey/jsonb/internal/JsonBindingProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Markus KARG
+ * Copyright (c) 2020, 2022 Markus KARG
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,7 +38,8 @@
 import javax.ws.rs.ext.MessageBodyWriter;
 import javax.ws.rs.ext.Providers;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Unit Test for {@link JsonBindingProvider}.
@@ -47,18 +48,20 @@
  */
 public final class JsonBindingProviderTest {
 
-    @Test(expected = NoContentException.class)
+    @Test
     public final void shouldThrowNoContentException() throws IOException {
-        // given
-        final Providers providers = new EmptyProviders();
-        final MessageBodyReader<Foo> mbr = (MessageBodyReader) new JsonBindingProvider(providers);
+        assertThrows(NoContentException.class, () -> {
+            // given
+            final Providers providers = new EmptyProviders();
+            final MessageBodyReader<Foo> mbr = (MessageBodyReader) new JsonBindingProvider(providers);
 
-        // when
-        mbr.readFrom(Foo.class, Foo.class, new Annotation[0], APPLICATION_JSON_TYPE,
-                new MultivaluedHashMap<>(), new ByteArrayInputStream(new byte[0]));
+            // when
+            mbr.readFrom(Foo.class, Foo.class, new Annotation[0], APPLICATION_JSON_TYPE,
+                    new MultivaluedHashMap<>(), new ByteArrayInputStream(new byte[0]));
 
-        // then
-        // should throw NoContentException
+            // then
+            // should throw NoContentException
+        });
     }
 
     private static final class Foo {
diff --git a/media/json-gson/pom.xml b/media/json-gson/pom.xml
index 157e84f..374f13d 100644
--- a/media/json-gson/pom.xml
+++ b/media/json-gson/pom.xml
@@ -73,8 +73,8 @@
             <artifactId>gson</artifactId>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/media/json-gson/src/test/java/org/glassfish/jersey/gson/internal/JsonGsonProviderTest.java b/media/json-gson/src/test/java/org/glassfish/jersey/gson/internal/JsonGsonProviderTest.java
index c7884d6..db765f2 100644
--- a/media/json-gson/src/test/java/org/glassfish/jersey/gson/internal/JsonGsonProviderTest.java
+++ b/media/json-gson/src/test/java/org/glassfish/jersey/gson/internal/JsonGsonProviderTest.java
@@ -32,16 +32,19 @@
 import javax.ws.rs.ext.MessageBodyWriter;
 import javax.ws.rs.ext.Providers;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class JsonGsonProviderTest {
 
-    @Test(expected = NoContentException.class)
+    @Test
     public void shouldThrowNoContentException() throws IOException {
-        Providers providers = new EmptyProviders();
-        MessageBodyReader<Foo> mbr = (MessageBodyReader) new JsonGsonProvider(providers);
-        mbr.readFrom(Foo.class, Foo.class, new Annotation[0], APPLICATION_JSON_TYPE,
-                new MultivaluedHashMap<>(), new ByteArrayInputStream(new byte[0]));
+        assertThrows(NoContentException.class, () -> {
+            Providers providers = new EmptyProviders();
+            MessageBodyReader<Foo> mbr = (MessageBodyReader) new JsonGsonProvider(providers);
+            mbr.readFrom(Foo.class, Foo.class, new Annotation[0], APPLICATION_JSON_TYPE,
+                    new MultivaluedHashMap<>(), new ByteArrayInputStream(new byte[0]));
+        });
     }
 
     private static final class Foo {
diff --git a/media/json-jackson/pom.xml b/media/json-jackson/pom.xml
index d99b900..d51aa86 100644
--- a/media/json-jackson/pom.xml
+++ b/media/json-jackson/pom.xml
@@ -135,8 +135,8 @@
             </exclusions>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProviderTest.java b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProviderTest.java
index 281d4c4..388ca2a 100644
--- a/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProviderTest.java
+++ b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,11 +19,11 @@
 import org.glassfish.jersey.jackson.internal.model.ServiceTest;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 
-import static junit.framework.TestCase.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public final class DefaultJacksonJaxbJsonProviderTest extends JerseyTest {
 
diff --git a/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForBothModulesTest.java b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForBothModulesTest.java
index d8d43c0..9d86b84 100644
--- a/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForBothModulesTest.java
+++ b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForBothModulesTest.java
@@ -19,11 +19,11 @@
 import org.glassfish.jersey.jackson.internal.model.ServiceTest;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class DefaultJsonJacksonProviderForBothModulesTest extends JerseyTest {
     @Override
diff --git a/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForDisabledModulesTest.java b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForDisabledModulesTest.java
index 3a1bbe6..8d8075c 100644
--- a/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForDisabledModulesTest.java
+++ b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForDisabledModulesTest.java
@@ -23,7 +23,7 @@
 import org.glassfish.jersey.jackson.internal.model.ServiceTest;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
@@ -31,8 +31,8 @@
 import javax.ws.rs.core.Configuration;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
 public class DefaultJsonJacksonProviderForDisabledModulesTest extends JerseyTest {
     @Override
diff --git a/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForEnabledModulesTest.java b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForEnabledModulesTest.java
index 76b7dd9..77092f6 100644
--- a/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForEnabledModulesTest.java
+++ b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJsonJacksonProviderForEnabledModulesTest.java
@@ -19,11 +19,11 @@
 import org.glassfish.jersey.jackson.internal.model.ServiceTest;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 
-import static org.junit.Assert.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
 public class DefaultJsonJacksonProviderForEnabledModulesTest extends JerseyTest {
     @Override
diff --git a/media/json-jackson1/pom.xml b/media/json-jackson1/pom.xml
index ada3eae..571a162 100644
--- a/media/json-jackson1/pom.xml
+++ b/media/json-jackson1/pom.xml
@@ -86,8 +86,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/media/json-jettison/pom.xml b/media/json-jettison/pom.xml
index 2436a5e..c475ffd 100644
--- a/media/json-jettison/pom.xml
+++ b/media/json-jettison/pom.xml
@@ -83,8 +83,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/media/json-processing/pom.xml b/media/json-processing/pom.xml
index f98abe3..3e62429 100644
--- a/media/json-processing/pom.xml
+++ b/media/json-processing/pom.xml
@@ -86,8 +86,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableClientTest.java b/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableClientTest.java
index ffcde89..e309e5a 100644
--- a/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableClientTest.java
+++ b/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableServerTest.java b/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableServerTest.java
index 58da0e1..5806b6b 100644
--- a/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableServerTest.java
+++ b/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/media/moxy/pom.xml b/media/moxy/pom.xml
index 64ee029..9f6599e 100644
--- a/media/moxy/pom.xml
+++ b/media/moxy/pom.xml
@@ -120,8 +120,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/media/multipart/pom.xml b/media/multipart/pom.xml
index 9d6113c..d101439 100644
--- a/media/multipart/pom.xml
+++ b/media/multipart/pom.xml
@@ -100,8 +100,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/BodyPartTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/BodyPartTest.java
index 509d297..f5e721a 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/BodyPartTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/BodyPartTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,13 +22,13 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-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 org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * Test case for {@link BodyPart}.
@@ -40,12 +40,12 @@
  */
 public class BodyPartTest {
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         bodyPart = new BodyPart();
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         bodyPart = null;
     }
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/FormDataBodyPartTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/FormDataBodyPartTest.java
index 40932f9..79a222c 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/FormDataBodyPartTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/FormDataBodyPartTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,14 +18,14 @@
 
 import javax.ws.rs.core.MediaType;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-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 org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * Test case for {@link FormDataBodyPart}.
@@ -38,14 +38,14 @@
 public class FormDataBodyPartTest extends BodyPartTest {
 
     @Override
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         super.setUp();
         bodyPart = new FormDataBodyPart();
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         bodyPart = null;
         super.tearDown();
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/FormDataMultiPartTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/FormDataMultiPartTest.java
index 7cf196a..1c48a39 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/FormDataMultiPartTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/FormDataMultiPartTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,11 +16,11 @@
 
 package org.glassfish.jersey.media.multipart;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Test case for {@link FormDataMultiPart}.
@@ -31,14 +31,14 @@
 public class FormDataMultiPartTest extends MultiPartTest {
 
     @Override
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         super.setUp();
         multiPart = new FormDataMultiPart();
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         multiPart = null;
         super.tearDown();
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultiPartMediaTypesTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultiPartMediaTypesTest.java
index 7b5d3a9..41b759c 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultiPartMediaTypesTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultiPartMediaTypesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,9 +18,9 @@
 
 import javax.ws.rs.core.MediaType;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test case for {@link MultiPartMediaTypes}.
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultiPartTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultiPartTest.java
index 91cf08d..fbfa600 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultiPartTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultiPartTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,11 +18,11 @@
 
 import javax.ws.rs.core.MediaType;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test case for {@link MultiPart}.
@@ -34,12 +34,12 @@
 
     protected MultiPart multiPart = null;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         multiPart = new MultiPart();
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         multiPart = null;
     }
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultipartMixedWithApacheClientTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultipartMixedWithApacheClientTest.java
index 5867494..30748b8 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultipartMixedWithApacheClientTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/MultipartMixedWithApacheClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/ParameterizedHeadersMapTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/ParameterizedHeadersMapTest.java
index dee6da0..647100c 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/ParameterizedHeadersMapTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/ParameterizedHeadersMapTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,14 +26,14 @@
 
 import org.glassfish.jersey.message.internal.ParameterizedHeader;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-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 org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * Unit tests for {@link ParameterizedHeadersMap}.
@@ -45,12 +45,12 @@
 
     private ParameterizedHeadersMap map;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         map = new ParameterizedHeadersMap();
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         map = null;
     }
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/StringKeyIgnoreCaseMultivaluedMapAsHeadersMapTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/StringKeyIgnoreCaseMultivaluedMapAsHeadersMapTest.java
index 40eaeef..3968368 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/StringKeyIgnoreCaseMultivaluedMapAsHeadersMapTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/StringKeyIgnoreCaseMultivaluedMapAsHeadersMapTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,14 +26,14 @@
 
 import org.glassfish.jersey.internal.util.collection.StringKeyIgnoreCaseMultivaluedMap;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-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 org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * Unit tests for {@link StringKeyIgnoreCaseMultivaluedMap}.
@@ -43,12 +43,12 @@
  */
 public class StringKeyIgnoreCaseMultivaluedMapAsHeadersMapTest {
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         map = new StringKeyIgnoreCaseMultivaluedMap();
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         map = null;
     }
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/file/FileDataBodyPartTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/file/FileDataBodyPartTest.java
index 9d55e7d..3721193 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/file/FileDataBodyPartTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/file/FileDataBodyPartTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,12 +22,12 @@
 
 import org.glassfish.jersey.media.multipart.BodyPartTest;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test case for {@link FileDataBodyPart}.
@@ -39,14 +39,14 @@
 public class FileDataBodyPartTest extends BodyPartTest {
 
     @Override
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         super.setUp();
         bodyPart = new FileDataBodyPart();
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         bodyPart = null;
         super.tearDown();
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/file/StreamDataBodyPartTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/file/StreamDataBodyPartTest.java
index 7da702b..2b0d72b 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/file/StreamDataBodyPartTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/file/StreamDataBodyPartTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,13 +24,13 @@
 import org.glassfish.jersey.media.multipart.BodyPartTest;
 import org.glassfish.jersey.media.multipart.ContentDisposition;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-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 org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+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;
 
 /**
  * Tests for the {@link StreamDataBodyPart} class which checks the class' main
@@ -50,7 +50,7 @@
     private StreamDataBodyPart cut;
 
     @Override
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         super.setUp();
         cut = new StreamDataBodyPart();
@@ -60,7 +60,7 @@
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         bodyPart = null;
         super.tearDown();
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/FormDataMultiPartBufferTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/FormDataMultiPartBufferTest.java
index 2eb6b14..7222690 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/FormDataMultiPartBufferTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/FormDataMultiPartBufferTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,10 +37,10 @@
 import org.glassfish.jersey.server.ContainerRequest;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test cases for inspecting an {@code FormDataMultiPart} entity in a {@code RequestFilter} and following injection of this
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/FormDataMultiPartReaderWriterTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/FormDataMultiPartReaderWriterTest.java
index 693007e..9dcddf1 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/FormDataMultiPartReaderWriterTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/FormDataMultiPartReaderWriterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -57,17 +57,15 @@
 import org.glassfish.jersey.media.multipart.FormDataParam;
 import org.glassfish.jersey.media.multipart.MultiPart;
 
-import org.junit.Test;
-import org.jvnet.mimepull.MIMEMessage;
-import org.jvnet.mimepull.MIMEParsingException;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-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.assertThat;
-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.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Tests for multipart {@code MessageBodyReader} and {@code MessageBodyWriter} as well as {@code FormDataMultiPart} and {@code
@@ -754,7 +752,7 @@
     }
 
     private void checkMediaType(final MediaType expected, final MediaType actual) {
-        assertEquals("Expected MediaType=" + expected, expected.getType(), actual.getType());
-        assertEquals("Expected MediaType=" + expected, expected.getSubtype(), actual.getSubtype());
+        assertEquals(expected.getType(), actual.getType(), "Expected MediaType=" + expected);
+        assertEquals(expected.getSubtype(), actual.getSubtype(), "Expected MediaType=" + expected);
     }
 }
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartHeaderModificationTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartHeaderModificationTest.java
index e8cb04a..c37065b 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartHeaderModificationTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartHeaderModificationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,7 +16,9 @@
 
 package org.glassfish.jersey.media.multipart.internal;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -37,16 +39,17 @@
 import org.glassfish.jersey.jetty.connector.JettyConnectorProvider;
 import org.glassfish.jersey.media.multipart.MultiPart;
 import org.glassfish.jersey.test.TestProperties;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-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.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * JERSEY-2123 reproducer.
@@ -55,81 +58,88 @@
  *
  * @author Libor Kramolis
  */
-@RunWith(Parameterized.class)
-public class MultiPartHeaderModificationTest extends MultiPartJerseyTest {
+public class MultiPartHeaderModificationTest {
 
-    private final ConnectorProvider connectorProvider;
-    private final boolean messageLogged;
-
-    public MultiPartHeaderModificationTest(Class<? extends ConnectorProvider> connectorProviderClass,
-                                           boolean messageLogged)
-            throws InstantiationException, IllegalAccessException {
-        this.connectorProvider = connectorProviderClass.newInstance();
-        this.messageLogged = messageLogged;
-    }
-
-    @Parameterized.Parameters(name = "{index}: {0} / {1}")
     public static List<Object[]> testData() {
         return Arrays.asList(new Object[][] {
-                {HttpUrlConnectorProvider.class, false},
-                {GrizzlyConnectorProvider.class, true},
-                {JettyConnectorProvider.class, true},
-                {ApacheConnectorProvider.class, true},
+                {new HttpUrlConnectorProvider(), false},
+                {new GrizzlyConnectorProvider(), true},
+                {new JettyConnectorProvider(), true},
+                {new ApacheConnectorProvider(), true},
         });
     }
 
-    @Override
-    protected Set<Class<?>> getResourceClasses() {
-        final HashSet<Class<?>> classes = new HashSet<Class<?>>();
-        classes.add(MultiPartResource.class);
-        return classes;
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        testData().forEach(arr -> {
+            MultiPartJerseyTemplateTest test = new MultiPartJerseyTemplateTest((ConnectorProvider) arr[0], (boolean) arr[1]) {};
+            tests.add(TestHelper.toTestContainer(test, arr[0].getClass().getSimpleName() + ", " + arr[1]));
+        });
+        return tests;
     }
 
-    @Override
-    protected Application configure() {
-        set(TestProperties.RECORD_LOG_LEVEL, Level.WARNING.intValue());
-        return super.configure();
-    }
+    public abstract static class MultiPartJerseyTemplateTest extends MultiPartJerseyTest {
 
-    @Override
-    protected void configureClient(ClientConfig clientConfig) {
-        super.configureClient(clientConfig);
-        clientConfig.connectorProvider(connectorProvider);
-    }
+        private final ConnectorProvider connectorProvider;
+        private final boolean messageLogged;
 
-    @Test
-    public void testLogMessage() {
-        final WebTarget target = target().path("multipart/ten");
-
-        MultiPartBean bean = new MultiPartBean("myname", "myvalue");
-        MultiPart entity = new MultiPart()
-                .bodyPart(bean, new MediaType("x-application", "x-format"))
-                .bodyPart("", MediaType.APPLICATION_OCTET_STREAM_TYPE);
-
-        final String UNSENT_HEADER_CHANGES = "Unsent header changes";
-        try {
-            target.request("text/plain").put(Entity.entity(entity, "multipart/mixed"), String.class);
-            assertFalse("BadRequestException can not be thrown just in case JERSEY-2341 is not fixed.",
-                    messageLogged);
-            LogRecord logRecord = findLogRecord(UNSENT_HEADER_CHANGES);
-            assertNull(logRecord);
-        } catch (BadRequestException brex) {
-            assertTrue("BadRequestException can be thrown just in case JERSEY-2341 is not fixed.",
-                    messageLogged);
-            LogRecord logRecord = findLogRecord(UNSENT_HEADER_CHANGES);
-            assertNotNull("Missing LogRecord for message '" + UNSENT_HEADER_CHANGES + "'.", logRecord);
-            assertThat(logRecord.getMessage(), containsString("MIME-Version"));
-            assertThat(logRecord.getMessage(), containsString("Content-Type"));
+        public MultiPartJerseyTemplateTest(ConnectorProvider connectorProvider, boolean messageLogged) {
+            this.connectorProvider = connectorProvider;
+            this.messageLogged = messageLogged;
         }
-    }
 
-    private LogRecord findLogRecord(String messageContains) {
-        for (final LogRecord record : getLoggedRecords()) {
-            if (record.getMessage().contains(messageContains)) {
-                return record;
+        @Override
+        protected Set<Class<?>> getResourceClasses() {
+            final HashSet<Class<?>> classes = new HashSet<Class<?>>();
+            classes.add(MultiPartResource.class);
+            return classes;
+        }
+
+        @Override
+        protected Application configure() {
+            set(TestProperties.RECORD_LOG_LEVEL, Level.WARNING.intValue());
+            return super.configure();
+        }
+
+        @Override
+        protected void configureClient(ClientConfig clientConfig) {
+            super.configureClient(clientConfig);
+            clientConfig.connectorProvider(connectorProvider);
+        }
+
+        @Test
+        public void testLogMessage() {
+            final WebTarget target = target().path("multipart/ten");
+
+            MultiPartBean bean = new MultiPartBean("myname", "myvalue");
+            MultiPart entity = new MultiPart()
+                    .bodyPart(bean, new MediaType("x-application", "x-format"))
+                    .bodyPart("", MediaType.APPLICATION_OCTET_STREAM_TYPE);
+
+            final String UNSENT_HEADER_CHANGES = "Unsent header changes";
+            try {
+                target.request("text/plain").put(Entity.entity(entity, "multipart/mixed"), String.class);
+                assertFalse(messageLogged, "BadRequestException can not be thrown just in case JERSEY-2341 is not fixed.");
+                LogRecord logRecord = findLogRecord(UNSENT_HEADER_CHANGES);
+                assertNull(logRecord);
+            } catch (BadRequestException brex) {
+                assertTrue(messageLogged,
+                        "BadRequestException can be thrown just in case JERSEY-2341 is not fixed.");
+                LogRecord logRecord = findLogRecord(UNSENT_HEADER_CHANGES);
+                assertNotNull(logRecord, "Missing LogRecord for message '" + UNSENT_HEADER_CHANGES + "'.");
+                assertThat(logRecord.getMessage(), containsString("MIME-Version"));
+                assertThat(logRecord.getMessage(), containsString("Content-Type"));
             }
         }
-        return null;
-    }
 
+        private LogRecord findLogRecord(String messageContains) {
+            for (final LogRecord record : getLoggedRecords()) {
+                if (record.getMessage().contains(messageContains)) {
+                    return record;
+                }
+            }
+            return null;
+        }
+    }
 }
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartReaderWriterTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartReaderWriterTest.java
index 32b02f3..a718780 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartReaderWriterTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartReaderWriterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,11 +34,12 @@
 import org.glassfish.jersey.media.multipart.BodyPartEntity;
 import org.glassfish.jersey.media.multipart.MultiPart;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Unit tests for {@link org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide} (in the client) and
@@ -49,7 +50,7 @@
     private static Path TMP_DIRECTORY;
     private static String ORIGINAL_TMP_DIRECTORY;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         super.setUp();
 
@@ -59,7 +60,7 @@
         System.setProperty("java.io.tmpdir", TMP_DIRECTORY.toString());
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         super.tearDown();
 
@@ -201,14 +202,15 @@
     /**
      * Test sending a completely empty MultiPart.
      */
-    @Test(expected = ProcessingException.class)
+    @Test
     public void testSix() {
-        target()
-                .path("multipart/six")
-                .request("text/plain")
-                .post(Entity.entity(new MultiPart(), "multipart/mixed"), String.class);
-
-        fail("Should have thrown an exception about zero body parts");
+        assertThrows(ProcessingException.class, () -> {
+            target()
+                    .path("multipart/six")
+                    .request("text/plain")
+                    .post(Entity.entity(new MultiPart(), "multipart/mixed"), String.class);
+            fail("Should have thrown an exception about zero body parts");
+        });
     }
 
     /**
@@ -312,14 +314,14 @@
         final MultiPart response = target.request("multipart/mixed")
                 .put(Entity.entity(entity, "multipart/mixed"), MultiPart.class);
         final String actual = response.getBodyParts().get(0).getEntityAs(String.class);
-        assertEquals("Length for multiplier " + multiplier, expected.length(), actual.length());
-        assertEquals("Content for multiplier " + multiplier, expected, actual);
+        assertEquals(expected.length(), actual.length(), "Length for multiplier " + multiplier);
+        assertEquals(expected, actual, "Content for multiplier " + multiplier);
         response.cleanup();
     }
 
     private void checkMediaType(final MediaType expected, final MediaType actual) {
-        assertEquals("Expected MediaType=" + expected, expected.getType(), actual.getType());
-        assertEquals("Expected MediaType=" + expected, expected.getSubtype(), actual.getSubtype());
+        assertEquals(expected.getType(), actual.getType(), "Expected MediaType=" + expected);
+        assertEquals(expected.getSubtype(), actual.getSubtype(), "Expected MediaType=" + expected);
     }
 
 }
diff --git a/media/sse/pom.xml b/media/sse/pom.xml
index ce434af..57f6b62 100644
--- a/media/sse/pom.xml
+++ b/media/sse/pom.xml
@@ -45,8 +45,8 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/media/sse/src/test/java/org/glassfish/jersey/media/sse/ClientCloseTest.java b/media/sse/src/test/java/org/glassfish/jersey/media/sse/ClientCloseTest.java
index 996d32e..ebd0792 100644
--- a/media/sse/src/test/java/org/glassfish/jersey/media/sse/ClientCloseTest.java
+++ b/media/sse/src/test/java/org/glassfish/jersey/media/sse/ClientCloseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,10 +33,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.TestCase.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Petr Janouch
diff --git a/media/sse/src/test/java/org/glassfish/jersey/media/sse/EmptyEventsTest.java b/media/sse/src/test/java/org/glassfish/jersey/media/sse/EmptyEventsTest.java
index c405777..2c99079 100644
--- a/media/sse/src/test/java/org/glassfish/jersey/media/sse/EmptyEventsTest.java
+++ b/media/sse/src/test/java/org/glassfish/jersey/media/sse/EmptyEventsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests handling of empty SSE events.
diff --git a/media/sse/src/test/java/org/glassfish/jersey/media/sse/EventSourceTest.java b/media/sse/src/test/java/org/glassfish/jersey/media/sse/EventSourceTest.java
index 842ae17..d544746 100644
--- a/media/sse/src/test/java/org/glassfish/jersey/media/sse/EventSourceTest.java
+++ b/media/sse/src/test/java/org/glassfish/jersey/media/sse/EventSourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,10 +34,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.TestCase.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/media/sse/src/test/java/org/glassfish/jersey/media/sse/InboundEventReaderTest.java b/media/sse/src/test/java/org/glassfish/jersey/media/sse/InboundEventReaderTest.java
index ae522ae..bc9f057 100644
--- a/media/sse/src/test/java/org/glassfish/jersey/media/sse/InboundEventReaderTest.java
+++ b/media/sse/src/test/java/org/glassfish/jersey/media/sse/InboundEventReaderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,9 +37,9 @@
 import org.glassfish.jersey.model.internal.CommonConfig;
 import org.glassfish.jersey.model.internal.ComponentBag;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Petr Bouda
@@ -56,7 +56,7 @@
         HEADERS.put("Content-Type", Collections.singletonList("text/event-stream"));
     }
 
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = Injections.createInjectionManager();
         injectionManager.register(new TestBinder());
diff --git a/media/sse/src/test/java/org/glassfish/jersey/media/sse/OutboundEventTest.java b/media/sse/src/test/java/org/glassfish/jersey/media/sse/OutboundEventTest.java
index c5af425..001d123 100644
--- a/media/sse/src/test/java/org/glassfish/jersey/media/sse/OutboundEventTest.java
+++ b/media/sse/src/test/java/org/glassfish/jersey/media/sse/OutboundEventTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,11 +24,11 @@
 
 import org.glassfish.jersey.internal.util.ReflectionHelper;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * Basic set of unit tests for OutboundEvent creation.
diff --git a/media/sse/src/test/java/org/glassfish/jersey/media/sse/SseEventSinkCloseTest.java b/media/sse/src/test/java/org/glassfish/jersey/media/sse/SseEventSinkCloseTest.java
index f6afa45..5706eb5 100644
--- a/media/sse/src/test/java/org/glassfish/jersey/media/sse/SseEventSinkCloseTest.java
+++ b/media/sse/src/test/java/org/glassfish/jersey/media/sse/SseEventSinkCloseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,9 +39,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test, that {@code SseEventSink} and the connection is closed eventually after closing {@code SseEventSource} on client side.
@@ -99,9 +99,9 @@
         }
 
         // ... and wait for the events to be processed by the client side, then close the eventSource
-        assertTrue("EventLatch timed out.", eventLatch.await(5, TimeUnit.SECONDS));
+        assertTrue(eventLatch.await(5, TimeUnit.SECONDS), "EventLatch timed out.");
         eventSource.close();
-        assertEquals("SseEventSource should have been already closed", false, eventSource.isOpen());
+        assertEquals(false, eventSource.isOpen(), "SseEventSource should have been already closed");
 
         ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
 
@@ -121,7 +121,7 @@
 
         assertTrue(closeLatch.await(10000, TimeUnit.MILLISECONDS));
         executor.shutdown();
-        assertTrue("SseEventOutput should have been already closed.", output.isClosed());
+        assertTrue(output.isClosed(), "SseEventOutput should have been already closed.");
     }
 
     @Override
diff --git a/media/sse/src/test/java/org/glassfish/jersey/media/sse/SseEventSinkTest.java b/media/sse/src/test/java/org/glassfish/jersey/media/sse/SseEventSinkTest.java
index b6059ff..7721105 100644
--- a/media/sse/src/test/java/org/glassfish/jersey/media/sse/SseEventSinkTest.java
+++ b/media/sse/src/test/java/org/glassfish/jersey/media/sse/SseEventSinkTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseyEventSinkTest.java b/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseyEventSinkTest.java
index 6b7da0d..98fbfff 100644
--- a/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseyEventSinkTest.java
+++ b/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseyEventSinkTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,24 +17,21 @@
 package org.glassfish.jersey.media.sse.internal;
 
 import org.glassfish.jersey.media.sse.OutboundEvent;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Pavel Bucek
  */
 public class JerseyEventSinkTest {
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
     @Test
     public void test() throws Exception {
-        JerseyEventSink eventSink = new JerseyEventSink(null);
+        Assertions.assertThrows(IllegalStateException.class, () -> {
+            JerseyEventSink eventSink = new JerseyEventSink(null);
 
-        eventSink.close();
-        thrown.expect(IllegalStateException.class);
-        eventSink.send(null);
+            eventSink.close();
+            eventSink.send(null);
+        });
     }
 }
diff --git a/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseySseBroadcasterTest.java b/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseySseBroadcasterTest.java
index 0e5c635..5fdeac2 100644
--- a/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseySseBroadcasterTest.java
+++ b/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseySseBroadcasterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,10 +23,8 @@
 import javax.ws.rs.sse.OutboundSseEvent;
 import javax.ws.rs.sse.SseEventSink;
 
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * {@link javax.ws.rs.sse.SseBroadcaster} test.
@@ -35,27 +33,26 @@
  */
 public class JerseySseBroadcasterTest {
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
     private static final String TEST_EXCEPTION_MSG = "testException";
 
     @Test
     public void testOnErrorNull() {
-        try (JerseySseBroadcaster broadcaster = new JerseySseBroadcaster()) {
+        Assertions.assertThrows(IllegalArgumentException.class, () -> {
+            try (JerseySseBroadcaster broadcaster = new JerseySseBroadcaster()) {
 
-            thrown.expect(IllegalArgumentException.class);
-            broadcaster.onError(null);
-        }
+                broadcaster.onError(null);
+            }
+        });
     }
 
     @Test
     public void testOnCloseNull() {
-        try (JerseySseBroadcaster jerseySseBroadcaster = new JerseySseBroadcaster()) {
+        Assertions.assertThrows(IllegalArgumentException.class, () -> {
+            try (JerseySseBroadcaster jerseySseBroadcaster = new JerseySseBroadcaster()) {
 
-            thrown.expect(IllegalArgumentException.class);
-            jerseySseBroadcaster.onClose(null);
-        }
+                jerseySseBroadcaster.onClose(null);
+            }
+        });
     }
 
     @Test
@@ -89,7 +86,7 @@
             });
 
             broadcaster.broadcast(new JerseySse().newEvent("ping"));
-            Assert.assertTrue(latch.await(2000, TimeUnit.MILLISECONDS));
+            Assertions.assertTrue(latch.await(2000, TimeUnit.MILLISECONDS));
         }
     }
 
@@ -124,7 +121,7 @@
             });
 
             broadcaster.close();
-            Assert.assertTrue(latch.await(2000, TimeUnit.MILLISECONDS));
+            Assertions.assertTrue(latch.await(2000, TimeUnit.MILLISECONDS));
         }
     }
 
diff --git a/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseySseEventSourceTest.java b/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseySseEventSourceTest.java
index 238ba82..5509d7e 100644
--- a/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseySseEventSourceTest.java
+++ b/media/sse/src/test/java/org/glassfish/jersey/media/sse/internal/JerseySseEventSourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,20 +16,15 @@
 
 package org.glassfish.jersey.media.sse.internal;
 
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.sse.SseEventSource;
 
 public class JerseySseEventSourceTest {
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
     @Test
     public void testNPEOnNull() {
-        thrown.expect(NullPointerException.class);
-        SseEventSource.target(null);
+        Assertions.assertThrows(NullPointerException.class, () -> SseEventSource.target(null));
     }
 }
diff --git a/pom.xml b/pom.xml
index 2ed2d53..bf6aca5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -421,6 +421,14 @@
                             -Xmx${surefire.maxmem.argline}m -Dfile.encoding=UTF8 ${surefire.security.argline} ${surefire.coverage.argline}
                         </argLine>
                         <skipTests>${skip.tests}</skipTests>
+                        <properties>
+                            <configurationParameters>
+                                junit.jupiter.execution.parallel.enabled=true
+                                junit.jupiter.execution.parallel.mode.classes.default=same_thread
+                                junit.jupiter.execution.parallel.mode.default=same_thread
+                            </configurationParameters>
+                        </properties>
+                        <threadCount>124</threadCount>
                     </configuration>
                     <dependencies>
                         <dependency>
@@ -2015,12 +2023,6 @@
             </dependency>
 
             <dependency>
-                <groupId>junit</groupId>
-                <artifactId>junit</artifactId>
-                <version>4.13.1</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
                 <groupId>org.junit.jupiter</groupId>
                 <artifactId>junit-jupiter</artifactId>
                 <version>${junit5.version}</version>
@@ -2035,7 +2037,7 @@
             <dependency>
                 <groupId>org.testng</groupId>
                 <artifactId>testng</artifactId>
-                <version>6.9.6</version>
+                <version>6.9.13.6</version>
                 <scope>test</scope>
             </dependency>
 
@@ -2058,8 +2060,8 @@
                 <scope>test</scope>
             </dependency>
             <dependency>
-                <groupId>xmlunit</groupId>
-                <artifactId>xmlunit</artifactId>
+                <groupId>org.xmlunit</groupId>
+                <artifactId>xmlunit-core</artifactId>
                 <version>${xmlunit.version}</version>
                 <scope>test</scope>
             </dependency>
@@ -2164,7 +2166,7 @@
         <guava.version>31.1-jre</guava.version>
         <hamcrest.version>2.2</hamcrest.version>
         <helidon.version>1.0.3</helidon.version>
-        <xmlunit.version>1.6</xmlunit.version>
+        <xmlunit.version>2.9.0</xmlunit.version>
         <httpclient.version>4.5.13</httpclient.version>
         <httpclient5.version>5.1.2</httpclient5.version>
         <jackson.version>2.13.3</jackson.version>
@@ -2175,10 +2177,12 @@
         <jersey1.last.final.version>${jersey1.version}</jersey1.last.final.version>
         <jettison.version>1.3.7</jettison.version> <!-- TODO: 1.3.8 doesn't work; AbstractJsonTest complexBeanWithAttributes -->
         <jmh.version>1.10.2</jmh.version>
-        <jmockit.version>1.44</jmockit.version>
-        <junit5.version>5.6.0</junit5.version>
+        <jmockit.version>1.49</jmockit.version>
+        <junit5.version>5.9.1</junit5.version>
+        <junit-platform-suite.version>1.9.1</junit-platform-suite.version>
+        <junit4.version>4.13.2</junit4.version>
         <kryo.version>4.0.1</kryo.version>
-        <mockito.version>3.9.0</mockito.version> <!-- CQ 17673 -->
+        <mockito.version>3.12.4</mockito.version> <!-- CQ 17673 -->
         <mustache.version>0.8.17</mustache.version>
         <netty.version>4.1.75.Final</netty.version>
         <nexus-staging.mvn.plugin.version>1.6.7</nexus-staging.mvn.plugin.version>
@@ -2186,7 +2190,7 @@
         <osgi.version>6.0.0</osgi.version>
         <osgi.framework.version>1.10.0</osgi.framework.version>
         <osgi.compendium.version>5.0.0</osgi.compendium.version>
-        <pax.exam.version>4.13.4</pax.exam.version>
+        <pax.exam.version>4.13.4</pax.exam.version> <!-- with 4.13.5 tests not working -->
         <pax.web.version>0.7.4</pax.web.version><!-- TODO: UPGRADE! -->
         <paxexam.mvn.plugin.version>1.2.4</paxexam.mvn.plugin.version>
         <rxjava.version>1.2.5</rxjava.version>
@@ -2196,7 +2200,7 @@
         <slf4j.version>2.0.3</slf4j.version>
         <spring4.version>4.3.20.RELEASE</spring4.version>
         <spring5.version>5.3.18</spring5.version>
-        <surefire.version>3.0.0-M5</surefire.version>
+        <surefire.version>3.0.0-M7</surefire.version>
         <validation.impl.version>6.2.0.Final</validation.impl.version>
         <weld.version>2.2.14.Final</weld.version> <!-- 2.4.1 doesn't work - bv tests -->
         <weld3.version>3.1.7.SP1</weld3.version>
diff --git a/security/oauth1-client/pom.xml b/security/oauth1-client/pom.xml
index 8da420c..e091108 100644
--- a/security/oauth1-client/pom.xml
+++ b/security/oauth1-client/pom.xml
@@ -67,8 +67,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
 
diff --git a/security/oauth1-server/pom.xml b/security/oauth1-server/pom.xml
index 777d8aa..ca56a0b 100644
--- a/security/oauth1-server/pom.xml
+++ b/security/oauth1-server/pom.xml
@@ -46,8 +46,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/security/oauth1-server/src/test/java/org/glassfish/jersey/server/oauth1/NonceManagerTest.java b/security/oauth1-server/src/test/java/org/glassfish/jersey/server/oauth1/NonceManagerTest.java
index 25069ea..7d40786 100644
--- a/security/oauth1-server/src/test/java/org/glassfish/jersey/server/oauth1/NonceManagerTest.java
+++ b/security/oauth1-server/src/test/java/org/glassfish/jersey/server/oauth1/NonceManagerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,11 +19,11 @@
 
 import java.util.concurrent.TimeUnit;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Thomas Meire
diff --git a/security/oauth1-server/src/test/java/org/glassfish/jersey/server/oauth1/OAuth1ExceptionTest.java b/security/oauth1-server/src/test/java/org/glassfish/jersey/server/oauth1/OAuth1ExceptionTest.java
index aee7db5..591e572 100644
--- a/security/oauth1-server/src/test/java/org/glassfish/jersey/server/oauth1/OAuth1ExceptionTest.java
+++ b/security/oauth1-server/src/test/java/org/glassfish/jersey/server/oauth1/OAuth1ExceptionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,9 +19,9 @@
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * {@link OAuth1Exception} unit tests.
diff --git a/security/oauth1-signature/pom.xml b/security/oauth1-signature/pom.xml
index 3a3d7a1..845c180 100644
--- a/security/oauth1-signature/pom.xml
+++ b/security/oauth1-signature/pom.xml
@@ -53,8 +53,8 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuth1SignatureTest.java b/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuth1SignatureTest.java
index 3540eb4..2714c99 100644
--- a/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuth1SignatureTest.java
+++ b/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuth1SignatureTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.MultivaluedMap;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuthBase64Test.java b/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuthBase64Test.java
index f72b023..3f0cb79 100644
--- a/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuthBase64Test.java
+++ b/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuthBase64Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,8 +18,8 @@
 
 import java.io.IOException;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -35,17 +35,17 @@
         final String encodedUtilStr = java.util.Base64.getEncoder().encodeToString(str.getBytes());
 
         System.out.println(encoded);
-        Assert.assertEquals(encoded, encodedUtil);
-        Assert.assertEquals(encoded, encodedUtilStr);
+        Assertions.assertEquals(encoded, encodedUtil);
+        Assertions.assertEquals(encoded, encodedUtilStr);
 
         final String decoded = new String(Base64.decode(encoded));
         final String decodedUtil = new String(java.util.Base64.getDecoder().decode(encoded.getBytes()));
         final String decodedUtilStr = new String(java.util.Base64.getDecoder().decode(encoded.getBytes()));
         final String decodedUtilStr2 = new String(java.util.Base64.getDecoder().decode(encoded));
 
-        Assert.assertEquals(decoded, decodedUtil);
-        Assert.assertEquals(decoded, decodedUtilStr);
-        Assert.assertEquals(decoded, decodedUtilStr2);
-        Assert.assertEquals(decoded, str);
+        Assertions.assertEquals(decoded, decodedUtil);
+        Assertions.assertEquals(decoded, decodedUtilStr);
+        Assertions.assertEquals(decoded, decodedUtilStr2);
+        Assertions.assertEquals(decoded, str);
     }
 }
diff --git a/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/SignatureTest.java b/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/SignatureTest.java
index a433015..058975a 100644
--- a/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/SignatureTest.java
+++ b/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/SignatureTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,10 +20,10 @@
 import org.glassfish.jersey.internal.inject.Injections;
 import org.glassfish.jersey.uri.UriComponent;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Paul C. Bryan <pbryan@sun.com>
diff --git a/test-framework/core/pom.xml b/test-framework/core/pom.xml
index fe07d92..1c9a2e4 100644
--- a/test-framework/core/pom.xml
+++ b/test-framework/core/pom.xml
@@ -70,8 +70,9 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter</artifactId>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit4.version}</version>
             <scope>provided</scope>
         </dependency>
     </dependencies>
diff --git a/test-framework/core/src/main/java/org/glassfish/jersey/test/JerseyTest.java b/test-framework/core/src/main/java/org/glassfish/jersey/test/JerseyTest.java
index de3ce0c..b1d8268 100644
--- a/test-framework/core/src/main/java/org/glassfish/jersey/test/JerseyTest.java
+++ b/test-framework/core/src/main/java/org/glassfish/jersey/test/JerseyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,6 +16,7 @@
 
 package org.glassfish.jersey.test;
 
+import java.lang.annotation.Annotation;
 import java.net.URI;
 import java.security.AccessController;
 import java.util.ArrayList;
@@ -28,6 +29,7 @@
 import java.util.Optional;
 import java.util.Properties;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.logging.Handler;
 import java.util.logging.Level;
@@ -52,11 +54,11 @@
 import org.glassfish.jersey.test.spi.TestContainer;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-
 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.TestInstance;
 
 /**
  * Parent class for testing JAX-RS and Jersey-based applications using Jersey test framework.
@@ -122,7 +124,6 @@
  * @author Michal Gajdos
  * @author Marek Potociar
  */
-@SuppressWarnings("UnusedDeclaration")
 public abstract class JerseyTest {
 
     private static final Logger LOGGER = Logger.getLogger(JerseyTest.class.getName());
@@ -169,6 +170,7 @@
 
     private JerseyTestLogHandler logHandler;
     private final Map<Logger, Level> logLevelMap = new IdentityHashMap<>();
+    private final AtomicInteger activeThreadCount = new AtomicInteger(0);
 
     /**
      * Initialize JerseyTest instance.
@@ -187,7 +189,6 @@
         // not be set soon enough
         this.context = configureDeployment();
         this.testContainerFactory = getTestContainerFactory();
-        registerLogHandlerIfEnabled();
     }
 
     /**
@@ -209,7 +210,6 @@
         // not be set soon enough
         this.context = configureDeployment();
         this.testContainerFactory = testContainerFactory;
-        registerLogHandlerIfEnabled();
     }
 
     /**
@@ -234,7 +234,6 @@
     public JerseyTest(final Application jaxrsApplication) {
         this.context = DeploymentContext.newInstance(jaxrsApplication);
         this.testContainerFactory = getTestContainerFactory();
-        registerLogHandlerIfEnabled();
     }
 
     /**
@@ -618,14 +617,37 @@
     @Before
     @BeforeEach
     public void setUp() throws Exception {
-        final TestContainer testContainer = createTestContainer(context);
+        synchronized (this) {
+            if (!isConcurrent() || activeThreadCount.getAndIncrement() == 0) {
+                registerLogHandlerIfEnabled();
+                final TestContainer testContainer = createTestContainer(context);
 
-        // Set current instance of test container and start it.
-        setTestContainer(testContainer);
-        testContainer.start();
+                // Set current instance of test container and start it.
+                setTestContainer(testContainer);
+                testContainer.start();
 
-        // Create an set new client.
-        setClient(getClient(testContainer.getClientConfig()));
+                // Create an set new client.
+                setClient(getClient(testContainer.getClientConfig()));
+            }
+        }
+    }
+
+    /**
+     * Do not setup multiple containers for concurrent junit 5 environment not to hit Address already in use exception
+     * @return true when TestInstance.Lifecycle.PER_CLASS annotation is used and the test run in concurrent
+     */
+    private boolean isConcurrent() {
+        Annotation[] annotations = this.getClass().getAnnotations();
+        for (Annotation annotation : annotations) {
+            // check the name first for JUnit 4 only environment
+            if (annotation.annotationType().getName().equals("org.junit.jupiter.api.TestInstance")) {
+                TestInstance testInstance = (TestInstance) annotation;
+                if (testInstance != null && testInstance.value() == TestInstance.Lifecycle.PER_CLASS) {
+                    return true;
+                }
+            }
+        }
+        return false;
     }
 
     /**
@@ -639,17 +661,21 @@
     @After
     @AfterEach
     public void tearDown() throws Exception {
-        if (isLogRecordingEnabled()) {
-            unregisterLogHandler();
-        }
+        synchronized (this) {
+            if (!isConcurrent() || activeThreadCount.decrementAndGet() == 0) {
+                if (isLogRecordingEnabled()) {
+                    unregisterLogHandler();
+                }
 
-        try {
-            TestContainer oldContainer = setTestContainer(null);
-            if (oldContainer != null) {
-                oldContainer.stop();
+                try {
+                    TestContainer oldContainer = setTestContainer(null);
+                    if (oldContainer != null) {
+                        oldContainer.stop();
+                    }
+                } finally {
+                    closeIfNotNull(setClient(null));
+                }
             }
-        } finally {
-            closeIfNotNull(setClient(null));
         }
     }
 
diff --git a/test-framework/core/src/main/java/org/glassfish/jersey/test/package-info.java b/test-framework/core/src/main/java/org/glassfish/jersey/test/package-info.java
index 60b8105..1d2457d 100644
--- a/test-framework/core/src/main/java/org/glassfish/jersey/test/package-info.java
+++ b/test-framework/core/src/main/java/org/glassfish/jersey/test/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -51,7 +51,7 @@
  *     WebTarget t = target("root");
  *
  *     String s = t.request().get(String.class);
- *     Assert.assertEquals("GET", s);
+ *     Assertions.assertEquals("GET", s);
  *   }
  * }
  * </pre>
@@ -86,7 +86,7 @@
  *     WebTarget t = target("root");
  *
  *     String s = t.request().get(String.class);
- *     Assert.assertEquals("GET", s);
+ *     Assertions.assertEquals("GET", s);
  *   }
  * }
  * </pre>
diff --git a/test-framework/core/src/main/java/org/glassfish/jersey/test/spi/TestHelper.java b/test-framework/core/src/main/java/org/glassfish/jersey/test/spi/TestHelper.java
index 23809f6..0aabca5 100644
--- a/test-framework/core/src/main/java/org/glassfish/jersey/test/spi/TestHelper.java
+++ b/test-framework/core/src/main/java/org/glassfish/jersey/test/spi/TestHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,7 +16,15 @@
 
 package org.glassfish.jersey.test.spi;
 
+import java.lang.reflect.Method;
 import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.platform.commons.util.ReflectionUtils;
 
 /**
  * Helper class for Jersey Test Framework.
@@ -43,4 +51,31 @@
      */
     private TestHelper() {
     }
+
+    public static DynamicContainer toTestContainer(Object test, String displayName) {
+        Class<?> klass = test.getClass();
+        List<Method> testMethods = ReflectionUtils.findMethods(klass,
+                method -> method.isAnnotationPresent(org.junit.jupiter.api.Test.class)
+                && !method.isAnnotationPresent(org.junit.jupiter.api.Disabled.class));
+        List<Method> beforeEachMethods = ReflectionUtils.findMethods(klass,
+                method -> method.isAnnotationPresent(org.junit.jupiter.api.BeforeEach.class));
+        List<Method> afterEachMethods = ReflectionUtils.findMethods(klass,
+                method -> method.isAnnotationPresent(org.junit.jupiter.api.AfterEach.class));
+        Collection<DynamicTest> children = new ArrayList<>();
+        for (Method method : testMethods) {
+            children.add(DynamicTest.dynamicTest(method.getName(), () -> {
+                try {
+                    for (Method beforeEachMethod : beforeEachMethods) {
+                        beforeEachMethod.invoke(test);
+                    }
+                    method.invoke(test);
+                } finally {
+                    for (Method afterEachMethod : afterEachMethods) {
+                        afterEachMethod.invoke(test);
+                    }
+                }
+            }));
+        }
+        return DynamicContainer.dynamicContainer(displayName, children);
+    }
 }
diff --git a/test-framework/core/src/test/java/org/glassfish/jersey/test/JerseyTestTest.java b/test-framework/core/src/test/java/org/glassfish/jersey/test/JerseyTestTest.java
index 08e873e..ecbdf25 100644
--- a/test-framework/core/src/test/java/org/glassfish/jersey/test/JerseyTestTest.java
+++ b/test-framework/core/src/test/java/org/glassfish/jersey/test/JerseyTestTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * {@link org.glassfish.jersey.test.JerseyTest} unit tests.
diff --git a/test-framework/maven/container-runner-maven-plugin/pom.xml b/test-framework/maven/container-runner-maven-plugin/pom.xml
index c7571c3..efa0af1 100644
--- a/test-framework/maven/container-runner-maven-plugin/pom.xml
+++ b/test-framework/maven/container-runner-maven-plugin/pom.xml
@@ -160,6 +160,8 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
+            <version>${junit4.version}</version>
+            <scope>test</scope>
         </dependency>
 
         <dependency>
diff --git a/test-framework/maven/custom-enforcer-rules/pom.xml b/test-framework/maven/custom-enforcer-rules/pom.xml
index 46b9a43..e42e347 100644
--- a/test-framework/maven/custom-enforcer-rules/pom.xml
+++ b/test-framework/maven/custom-enforcer-rules/pom.xml
@@ -70,8 +70,8 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>compile</scope>
         </dependency>
 
diff --git a/test-framework/maven/custom-enforcer-rules/src/test/java/org/glassfish/jersey/test/maven/rule/FilePatternDoesNotExistRuleTest.java b/test-framework/maven/custom-enforcer-rules/src/test/java/org/glassfish/jersey/test/maven/rule/FilePatternDoesNotExistRuleTest.java
index 301369a..0c2d91a 100644
--- a/test-framework/maven/custom-enforcer-rules/src/test/java/org/glassfish/jersey/test/maven/rule/FilePatternDoesNotExistRuleTest.java
+++ b/test-framework/maven/custom-enforcer-rules/src/test/java/org/glassfish/jersey/test/maven/rule/FilePatternDoesNotExistRuleTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,7 +21,8 @@
 import java.net.URISyntaxException;
 
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Basic sanity test of {@link FilePatternDoesNotExistRule} enforcer rule.
@@ -30,17 +31,19 @@
  */
 public class FilePatternDoesNotExistRuleTest {
 
-    @Test(expected = EnforcerRuleException.class)
+    @Test
     public void testMatchedPath() throws URISyntaxException, EnforcerRuleException {
-        final FilePatternDoesNotExistRule filePatternDoesNotExistRule = new FilePatternDoesNotExistRule();
+        assertThrows(EnforcerRuleException.class, () -> {
+            final FilePatternDoesNotExistRule filePatternDoesNotExistRule = new FilePatternDoesNotExistRule();
 
-        final URI uri = getClass()
-                .getResource("/org/glassfish/jersey/test/maven/rule/FilePatternDoesNotExistRule.class").toURI();
-        final File file = new File(uri);
-        final String pattern = file.getAbsolutePath().replace("PatternDoes", "*");
-        filePatternDoesNotExistRule.files = new File[] {new File(pattern)};
+            final URI uri = getClass()
+                    .getResource("/org/glassfish/jersey/test/maven/rule/FilePatternDoesNotExistRule.class").toURI();
+            final File file = new File(uri);
+            final String pattern = file.getAbsolutePath().replace("PatternDoes", "*");
+            filePatternDoesNotExistRule.files = new File[] {new File(pattern)};
 
-        filePatternDoesNotExistRule.execute(null);
+            filePatternDoesNotExistRule.execute(null);
+        });
     }
 
     @Test
diff --git a/test-framework/maven/custom-enforcer-rules/src/test/java/org/glassfish/jersey/test/maven/rule/PatternNotMatchedInFileRuleTest.java b/test-framework/maven/custom-enforcer-rules/src/test/java/org/glassfish/jersey/test/maven/rule/PatternNotMatchedInFileRuleTest.java
index 1897a2b..681106a 100644
--- a/test-framework/maven/custom-enforcer-rules/src/test/java/org/glassfish/jersey/test/maven/rule/PatternNotMatchedInFileRuleTest.java
+++ b/test-framework/maven/custom-enforcer-rules/src/test/java/org/glassfish/jersey/test/maven/rule/PatternNotMatchedInFileRuleTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,7 +20,8 @@
 import java.net.URISyntaxException;
 
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Basic sanity test of {@link PatternNotMatchedInFileRule} enforcer rule.
@@ -29,9 +30,9 @@
  */
 public class PatternNotMatchedInFileRuleTest {
 
-    @Test(expected = EnforcerRuleException.class)
+    @Test
     public void testMatchedPath() throws URISyntaxException, EnforcerRuleException {
-        testFilePatternLineMatcher("/out_of_memory.dat");
+        assertThrows(EnforcerRuleException.class, () -> testFilePatternLineMatcher("/out_of_memory.dat"));
     }
 
     @Test
diff --git a/test-framework/memleak-test-common/pom.xml b/test-framework/memleak-test-common/pom.xml
index c51ef21..f63a583 100644
--- a/test-framework/memleak-test-common/pom.xml
+++ b/test-framework/memleak-test-common/pom.xml
@@ -37,8 +37,13 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
             <scope>compile</scope>
         </dependency>
     </dependencies>
diff --git a/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/AbstractMemoryLeakSimpleTest.java b/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/AbstractMemoryLeakSimpleTest.java
index 149405f..0388c39 100644
--- a/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/AbstractMemoryLeakSimpleTest.java
+++ b/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/AbstractMemoryLeakSimpleTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,7 +19,7 @@
 import java.io.File;
 import java.lang.management.ManagementFactory;
 
-import org.junit.Before;
+import org.junit.jupiter.api.BeforeEach;
 
 /**
  * An abstract test class that adds support for dump heap at the beginning of the test execution.
@@ -28,7 +28,7 @@
  */
 public class AbstractMemoryLeakSimpleTest {
 
-    @Before
+    @BeforeEach
     public void dumpTheHeap() throws Exception {
         final String heapDumpPath = System.getProperty(MemoryLeakUtils.JERSEY_CONFIG_TEST_MEMLEAK_HEAP_DUMP_PATH);
         String heapDumpFile = "java_start_pid" + guessPid() + ".hprof";
diff --git a/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/AbstractMemoryLeakWebAppTest.java b/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/AbstractMemoryLeakWebAppTest.java
index faede81..d1879ba 100644
--- a/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/AbstractMemoryLeakWebAppTest.java
+++ b/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/AbstractMemoryLeakWebAppTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,7 +23,7 @@
 import org.glassfish.jersey.test.DeploymentContext;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.After;
+import org.junit.jupiter.api.AfterEach;
 
 /**
  * Adds support for web application testing and memory leak detection in target JVM.
@@ -42,7 +42,7 @@
      *
      * @throws IOException
      */
-    @After
+    @AfterEach
     public void verifyNoOutOfMemoryOccurred() throws IOException {
         MemoryLeakUtils.verifyNoOutOfMemoryOccurred();
     }
diff --git a/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/MemoryLeakSucceedingTimeout.java b/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/MemoryLeakSucceedingTimeout.java
index 200b10a..3398707 100644
--- a/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/MemoryLeakSucceedingTimeout.java
+++ b/test-framework/memleak-test-common/src/main/java/org/glassfish/jersey/test/memleak/common/MemoryLeakSucceedingTimeout.java
@@ -1,60 +1,57 @@
-/*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.glassfish.jersey.test.memleak.common;
-
-import org.junit.internal.runners.statements.FailOnTimeout;
-import org.junit.rules.Timeout;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-
-/**
- * @author Stepan Vavra
- */
-public class MemoryLeakSucceedingTimeout extends Timeout {
-
-    private static final int DEFAULT_TIMEOUT_MILLIS = 300_000;
-    private int millis;
-
-    public MemoryLeakSucceedingTimeout() {
-        this(DEFAULT_TIMEOUT_MILLIS);
-    }
-
-    public MemoryLeakSucceedingTimeout(final int defaultMillisTimeout) {
-        super(defaultMillisTimeout);
-
-        this.millis = Integer.getInteger(MemoryLeakUtils.JERSEY_CONFIG_TEST_MEMLEAK_TIMEOUT, defaultMillisTimeout);
-    }
-
-    @Override
-    public Statement apply(final Statement base, final Description description) {
-        return new FailOnTimeout(base, millis) {
-            @Override
-            public void evaluate() throws Throwable {
-                try {
-                    super.evaluate();
-                } catch (Throwable throwable) {
-                    if (throwable.getMessage().startsWith("test timed out after")) {
-                        MemoryLeakUtils.verifyNoOutOfMemoryOccurred();
-                        System.out.println("Test timed out after " + millis + " ms. Successfully ending.");
-                    } else {
-                        throw throwable;
-                    }
-                }
-            }
-        };
-    }
-}
+/*
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package org.glassfish.jersey.test.memleak.common;
+
+import java.lang.reflect.Method;
+import java.time.Duration;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.InvocationInterceptor;
+import org.junit.jupiter.api.extension.ReflectiveInvocationContext;
+
+/**
+ * @author Stepan Vavra
+ */
+public class MemoryLeakSucceedingTimeout implements InvocationInterceptor {
+
+    private static final int DEFAULT_TIMEOUT_MILLIS = 300_000;
+    private int millis;
+
+    public MemoryLeakSucceedingTimeout() {
+        this(DEFAULT_TIMEOUT_MILLIS);
+    }
+
+    public MemoryLeakSucceedingTimeout(final int defaultMillisTimeout) {
+        this.millis = Integer.getInteger(MemoryLeakUtils.JERSEY_CONFIG_TEST_MEMLEAK_TIMEOUT, defaultMillisTimeout);
+    }
+
+    @Override
+    public void interceptTestMethod(Invocation<Void> invocation, ReflectiveInvocationContext<Method> invocationContext,
+            ExtensionContext extensionContext) throws Throwable {
+        try {
+            Assertions.assertTimeoutPreemptively(Duration.ofMillis(millis), invocation::proceed);
+        } catch (Throwable throwable) {
+            if (throwable.getMessage().startsWith("execution timed out after")) {
+                MemoryLeakUtils.verifyNoOutOfMemoryOccurred();
+                System.out.println("Test timed out after " + millis + " ms. Successfully ending.");
+            } else {
+                throw throwable;
+            }
+        }
+    }
+}
diff --git a/test-framework/pom.xml b/test-framework/pom.xml
index 638b3c1..6cb762a 100644
--- a/test-framework/pom.xml
+++ b/test-framework/pom.xml
@@ -42,8 +42,13 @@
 
     <dependencies>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
             <scope>compile</scope>
         </dependency>
         <dependency>
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/AvailablePortGrizzlyTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/AvailablePortGrizzlyTest.java
index 264dc86..af8163f 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/AvailablePortGrizzlyTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/AvailablePortGrizzlyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/BaseUriTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/BaseUriTest.java
index e08821d..4ba7aea 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/BaseUriTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/BaseUriTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Grizzly test container base URI tests.
@@ -67,7 +67,7 @@
         final WebTarget target = target("root");
 
         final String s = target.request().get(String.class);
-        Assert.assertEquals("GET", s);
+        Assertions.assertEquals("GET", s);
     }
 
     @Test
@@ -75,7 +75,7 @@
         final WebTarget target = target("root/sub");
 
         final String s = target.request().get(String.class);
-        Assert.assertEquals("sub", s);
+        Assertions.assertEquals("sub", s);
     }
 
 }
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/pckg/GrizzlyPackageTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/pckg/GrizzlyPackageTest.java
index cd2e4c7..9c10b96 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/pckg/GrizzlyPackageTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/pckg/GrizzlyPackageTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 
 /**
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/AvailablePortGrizzlyWebTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/AvailablePortGrizzlyWebTest.java
index c84db7e..5bbf0df 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/AvailablePortGrizzlyWebTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/AvailablePortGrizzlyWebTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,7 +28,7 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyRequestDispatchFilterTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyRequestDispatchFilterTest.java
index 603dccf..51518c8 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyRequestDispatchFilterTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyRequestDispatchFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,8 +42,8 @@
 
 import org.glassfish.grizzly.servlet.HttpServletRequestImpl;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Reproducer for JERSEY-1893.
@@ -214,22 +214,22 @@
 
         // check that the regular filter gets involved
         s = target.path("direct").request().get(String.class);
-        Assert.assertEquals("[DIRECT]", s);
+        Assertions.assertEquals("[DIRECT]", s);
 
         // the regular filter should work for directly requested forward resource as well.
         s = target.path("forward").request().get(String.class);
-        Assert.assertEquals("[FORWARD]", s);
+        Assertions.assertEquals("[FORWARD]", s);
 
         // forward action should enforce forward filter to be invoked
         s = target.queryParam("action", "forward").request().get(String.class);
-        Assert.assertEquals(">>FORWARD", s);
+        Assertions.assertEquals(">>FORWARD", s);
 
         // direct call to the include resource
         s = target.path("included").request().get(String.class);
-        Assert.assertEquals("[INCLUDED]", s);
+        Assertions.assertEquals("[INCLUDED]", s);
 
         // include call should involve both regular and include filter
         s = target.path("included").queryParam("action", "include").request().get(String.class);
-        Assert.assertEquals("[SOMETHING INCLUDED]", s);
+        Assertions.assertEquals("[SOMETHING INCLUDED]", s);
     }
 }
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebFixedRequestSizeTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebFixedRequestSizeTest.java
index e786dce..05f3d2c 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebFixedRequestSizeTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebFixedRequestSizeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,9 +31,9 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Marek Potociar
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebInjectionTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebInjectionTest.java
index 74f18a4..351e005 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebInjectionTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,9 +34,9 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test injection support in the {@link org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory}.
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebServletAndFilterTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebServletAndFilterTest.java
index 2bfca38..eeccea3 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebServletAndFilterTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebServletAndFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,8 +39,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test {@link org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory} support for
@@ -130,10 +130,10 @@
         WebTarget target = target("GrizzlyWebServletAndFilterTest");
 
         String s = target.request().get(String.class);
-        Assert.assertEquals("GET", s);
+        Assertions.assertEquals("GET", s);
 
-        Assert.assertTrue(MyServlet.visited);
-        Assert.assertTrue(MyFilter1.visited);
-        Assert.assertTrue(MyFilter2.visited);
+        Assertions.assertTrue(MyServlet.visited);
+        Assertions.assertTrue(MyFilter1.visited);
+        Assertions.assertTrue(MyFilter2.visited);
     }
 }
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebTest.java
index 66199d8..f082489 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Basic GrizzlyWebTestContainerFactory unit tests.
@@ -69,7 +69,7 @@
         WebTarget target = target("root");
 
         String s = target.request().get(String.class);
-        Assert.assertEquals("GET", s);
+        Assertions.assertEquals("GET", s);
     }
 
     @Test
@@ -77,6 +77,6 @@
         WebTarget target = target("root/sub");
 
         String s = target.request().get(String.class);
-        Assert.assertEquals("sub", s);
+        Assertions.assertEquals("sub", s);
     }
 }
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/context/GrizzlyWebContextPathTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/context/GrizzlyWebContextPathTest.java
index 3caf4a1..0d107c6 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/context/GrizzlyWebContextPathTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/context/GrizzlyWebContextPathTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test support for context path in {@link org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory}.
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/ssl/GrizzlyOneWaySslWebTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/ssl/GrizzlyOneWaySslWebTest.java
index cad2b1d..af0c2e3 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/ssl/GrizzlyOneWaySslWebTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/ssl/GrizzlyOneWaySslWebTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,10 +20,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLParameters;
@@ -53,9 +51,6 @@
     private SSLContext serverSslContext;
     private SSLParameters serverSslParameters;
 
-    @Rule
-    public final ExpectedException exception = ExpectedException.none();
-
     @Override
     protected TestContainerFactory getTestContainerFactory() {
         return new GrizzlyTestContainerFactory();
@@ -112,33 +107,33 @@
         WebTarget target = client.target(getBaseUri()).path("secure");
 
         String s = target.request().get(String.class);
-        Assert.assertEquals("GET", s);
+        Assertions.assertEquals("GET", s);
     }
 
     @Test
     public void testGetFailsWhenClientDoesNotTrustsServer() {
-        SSLContext clientSslContext = SslUtils.createClientSslContext(false, false);
+        Assertions.assertThrows(ProcessingException.class, () -> {
+            SSLContext clientSslContext = SslUtils.createClientSslContext(false, false);
 
-        Client client = ClientBuilder.newBuilder()
-                .sslContext(clientSslContext)
-                .build();
+            Client client = ClientBuilder.newBuilder()
+                    .sslContext(clientSslContext)
+                    .build();
 
-        WebTarget target = client.target(getBaseUri()).path("secure");
+            WebTarget target = client.target(getBaseUri()).path("secure");
 
-        exception.expect(ProcessingException.class);
-
-        target.request().get(String.class);
+            target.request().get(String.class);
+        });
     }
 
     @Test
     public void testGetFailsWhenClientExecutesRequestWithoutHavingSslConfigured() {
-        Client client = ClientBuilder.newClient();
+        Assertions.assertThrows(ProcessingException.class, () -> {
+            Client client = ClientBuilder.newClient();
 
-        WebTarget target = client.target(getBaseUri()).path("secure");
+            WebTarget target = client.target(getBaseUri()).path("secure");
 
-        exception.expect(ProcessingException.class);
-
-        target.request().get(String.class);
+            target.request().get(String.class);
+        });
     }
 
 }
diff --git a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/ssl/GrizzlyTwoWaySslWebTest.java b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/ssl/GrizzlyTwoWaySslWebTest.java
index a085095..2b0992e 100644
--- a/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/ssl/GrizzlyTwoWaySslWebTest.java
+++ b/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/ssl/GrizzlyTwoWaySslWebTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,10 +20,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLParameters;
@@ -54,9 +52,6 @@
     private SSLContext serverSslContext;
     private SSLParameters serverSslParameters;
 
-    @Rule
-    public final ExpectedException exception = ExpectedException.none();
-
     @Override
     protected TestContainerFactory getTestContainerFactory() {
         return new GrizzlyTestContainerFactory();
@@ -113,48 +108,48 @@
         WebTarget target = client.target(getBaseUri()).path("more-secure");
 
         String s = target.request().get(String.class);
-        Assert.assertEquals("GET", s);
+        Assertions.assertEquals("GET", s);
     }
 
     @Test
     public void testGetFailsWhenClientDoesNotTrustsServer() {
-        SSLContext clientSslContext = SslUtils.createClientSslContext(true, false);
+        Assertions.assertThrows(ProcessingException.class, () -> {
+            SSLContext clientSslContext = SslUtils.createClientSslContext(true, false);
 
-        Client client = ClientBuilder.newBuilder()
-                .sslContext(clientSslContext)
-                .build();
+            Client client = ClientBuilder.newBuilder()
+                    .sslContext(clientSslContext)
+                    .build();
 
-        WebTarget target = client.target(getBaseUri()).path("more-secure");
+            WebTarget target = client.target(getBaseUri()).path("more-secure");
 
-        exception.expect(ProcessingException.class);
-
-        target.request().get(String.class);
+            target.request().get(String.class);
+        });
     }
 
     @Test
     public void testGetFailsWhenClientCanNotIdentifyItselfToTheServer() {
-        SSLContext clientSslContext = SslUtils.createClientSslContext(false, true);
+        Assertions.assertThrows(ProcessingException.class, () -> {
+            SSLContext clientSslContext = SslUtils.createClientSslContext(false, true);
 
-        Client client = ClientBuilder.newBuilder()
-                .sslContext(clientSslContext)
-                .build();
+            Client client = ClientBuilder.newBuilder()
+                    .sslContext(clientSslContext)
+                    .build();
 
-        WebTarget target = client.target(getBaseUri()).path("more-secure");
+            WebTarget target = client.target(getBaseUri()).path("more-secure");
 
-        exception.expect(ProcessingException.class);
-
-        target.request().get(String.class);
+            target.request().get(String.class);
+        });
     }
 
     @Test
     public void testGetFailsWhenClientExecutesRequestWithoutHavingSslConfigured() {
-        Client client = ClientBuilder.newClient();
+        Assertions.assertThrows(ProcessingException.class, () -> {
+            Client client = ClientBuilder.newClient();
 
-        WebTarget target = client.target(getBaseUri()).path("more-secure");
+            WebTarget target = client.target(getBaseUri()).path("more-secure");
 
-        exception.expect(ProcessingException.class);
-
-        target.request().get(String.class);
+            target.request().get(String.class);
+        });
     }
 
 }
diff --git a/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/InMemoryContainerPackageTest.java b/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/InMemoryContainerPackageTest.java
index bcbd308..247545b 100644
--- a/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/InMemoryContainerPackageTest.java
+++ b/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/InMemoryContainerPackageTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,10 +22,10 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Package scanning test for {@link org.glassfish.jersey.test.inmemory.InMemoryConnector}.
diff --git a/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/InMemoryContainerTest.java b/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/InMemoryContainerTest.java
index 59ecfad..1072e8d 100644
--- a/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/InMemoryContainerTest.java
+++ b/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/InMemoryContainerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,12 +32,12 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test class for {@link InMemoryConnector}.
diff --git a/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/internal/FollowRedirectsTest.java b/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/internal/FollowRedirectsTest.java
index 511cd42..5049dc4 100644
--- a/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/internal/FollowRedirectsTest.java
+++ b/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/internal/FollowRedirectsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * In-memory connector follow redirect tests.
diff --git a/test-framework/providers/jdk-http/src/test/java/org/glassfish/jersey/test/jdkhttp/AvailablePortJdkHttpServerTest.java b/test-framework/providers/jdk-http/src/test/java/org/glassfish/jersey/test/jdkhttp/AvailablePortJdkHttpServerTest.java
index 70fc98d..dea8e95 100644
--- a/test-framework/providers/jdk-http/src/test/java/org/glassfish/jersey/test/jdkhttp/AvailablePortJdkHttpServerTest.java
+++ b/test-framework/providers/jdk-http/src/test/java/org/glassfish/jersey/test/jdkhttp/AvailablePortJdkHttpServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,7 +25,7 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/test-framework/providers/jdk-http/src/test/java/org/glassfish/jersey/test/jdkhttp/JdkHttpServerContainerTest.java b/test-framework/providers/jdk-http/src/test/java/org/glassfish/jersey/test/jdkhttp/JdkHttpServerContainerTest.java
index b79dde9..ed5e3be 100644
--- a/test-framework/providers/jdk-http/src/test/java/org/glassfish/jersey/test/jdkhttp/JdkHttpServerContainerTest.java
+++ b/test-framework/providers/jdk-http/src/test/java/org/glassfish/jersey/test/jdkhttp/JdkHttpServerContainerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test class for {@link JdkHttpHandlerContainer}.
@@ -70,7 +70,7 @@
     public void testJdkHttpServerContainerTarget() {
         final Response response = target().path("one").request().get();
 
-        assertEquals("Response status unexpected.", 200, response.getStatus());
-        assertEquals("Response entity unexpected.", "get", response.readEntity(String.class));
+        assertEquals(200, response.getStatus(), "Response status unexpected.");
+        assertEquals("get", response.readEntity(String.class), "Response entity unexpected.");
     }
 }
diff --git a/test-framework/providers/jetty/src/test/java/org/glassfish/jersey/test/jetty/AvailablePortJettyTest.java b/test-framework/providers/jetty/src/test/java/org/glassfish/jersey/test/jetty/AvailablePortJettyTest.java
index 7ff587d..ff13cd0 100644
--- a/test-framework/providers/jetty/src/test/java/org/glassfish/jersey/test/jetty/AvailablePortJettyTest.java
+++ b/test-framework/providers/jetty/src/test/java/org/glassfish/jersey/test/jetty/AvailablePortJettyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,7 +25,7 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/test-framework/providers/jetty/src/test/java/org/glassfish/jersey/test/jetty/JettyContainerTest.java b/test-framework/providers/jetty/src/test/java/org/glassfish/jersey/test/jetty/JettyContainerTest.java
index 4c1a951..2e427ca 100644
--- a/test-framework/providers/jetty/src/test/java/org/glassfish/jersey/test/jetty/JettyContainerTest.java
+++ b/test-framework/providers/jetty/src/test/java/org/glassfish/jersey/test/jetty/JettyContainerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,9 +35,9 @@
 import org.jvnet.hk2.internal.ServiceLocatorImpl;
 
 import org.eclipse.jetty.server.Server;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test class for {@link JettyHttpContainer}.
@@ -83,8 +83,8 @@
     public void testJettyContainerTarget() {
         final Response response = target().path("one").request().get();
 
-        assertEquals("Response status unexpected.", 200, response.getStatus());
-        assertEquals("Response entity unexpected.", "get", response.readEntity(String.class));
+        assertEquals(200, response.getStatus(), "Response status unexpected.");
+        assertEquals("get", response.readEntity(String.class), "Response entity unexpected.");
     }
 
     /**
@@ -106,7 +106,7 @@
         } else {
             throw new RuntimeException("Invalid Hk2 InjectionManager");
         }
-        assertTrue("Application injection manager was expected to have defined parent locator",
-                   serviceLocator.getParent() == locator);
+        assertTrue(serviceLocator.getParent() == locator,
+                   "Application injection manager was expected to have defined parent locator");
     }
 }
diff --git a/test-framework/providers/simple/src/test/java/org/glassfish/jersey/test/simple/AvailablePortSimpleTest.java b/test-framework/providers/simple/src/test/java/org/glassfish/jersey/test/simple/AvailablePortSimpleTest.java
index 09d2bb8..1e58dd4 100644
--- a/test-framework/providers/simple/src/test/java/org/glassfish/jersey/test/simple/AvailablePortSimpleTest.java
+++ b/test-framework/providers/simple/src/test/java/org/glassfish/jersey/test/simple/AvailablePortSimpleTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,7 +25,7 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/test-framework/providers/simple/src/test/java/org/glassfish/jersey/test/simple/SimpleContainerTest.java b/test-framework/providers/simple/src/test/java/org/glassfish/jersey/test/simple/SimpleContainerTest.java
index e396257..4a32a60 100644
--- a/test-framework/providers/simple/src/test/java/org/glassfish/jersey/test/simple/SimpleContainerTest.java
+++ b/test-framework/providers/simple/src/test/java/org/glassfish/jersey/test/simple/SimpleContainerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.simple.SimpleContainer;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test class for {@link SimpleContainer}.
@@ -71,7 +71,7 @@
     public void testSimpleContainerTarget() {
         final Response response = target().path("one").request().get();
 
-        assertEquals("Response status unexpected.", 200, response.getStatus());
-        assertEquals("Response entity unexpected.", "get", response.readEntity(String.class));
+        assertEquals(200, response.getStatus(), "Response status unexpected.");
+        assertEquals("get", response.readEntity(String.class), "Response entity unexpected.");
     }
 }
diff --git a/test-framework/util/pom.xml b/test-framework/util/pom.xml
index 2118bbd..6c174f7 100644
--- a/test-framework/util/pom.xml
+++ b/test-framework/util/pom.xml
@@ -43,5 +43,32 @@
             <artifactId>jersey-client</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit4.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <dependencies>
+                    <!-- JUnit vintage engine to run JUnit 4 tests -->
+                    <dependency>
+                        <groupId>org.junit.vintage</groupId>
+                        <artifactId>junit-vintage-engine</artifactId>
+                        <version>${junit5.version}</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/ConcurrentParameterizedRunner.java b/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/ConcurrentParameterizedRunner.java
index a62a586..3813380 100644
--- a/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/ConcurrentParameterizedRunner.java
+++ b/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/ConcurrentParameterizedRunner.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,8 +44,13 @@
  * be merged into {@link ConcurrentRunner} in the future.
  *
  * @author Jakub Podlesak
+ *
+ * @deprecated in connection with transition to JUnit 5 usage of this class is obsolete. Alternatively can be used
+ * specific junit 5
+ * <a href="https://junit.org/junit5/docs/current/user-guide/#writing-tests-parallel-execution">executions tools</a>.
  */
 @Beta
+@Deprecated
 public class ConcurrentParameterizedRunner extends BlockJUnit4ClassRunner {
 
     public final int FINISH_WAIT_CYCLE_MS = 2000;
diff --git a/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/ConcurrentRunner.java b/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/ConcurrentRunner.java
index f4f4d5f..9540560 100644
--- a/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/ConcurrentRunner.java
+++ b/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/ConcurrentRunner.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -55,9 +55,14 @@
  * as if no special concurrent runner was involved.
  *
  * @author Jakub Podlesak
+ *
+ * @deprecated in connection with transition to JUnit 5 usage of this class is obsolete. Alternatively can be used
+ * specific junit 5
+ * <a href="https://junit.org/junit5/docs/current/user-guide/#writing-tests-parallel-execution">executions tools</a>.
  */
 
 @Beta
+@Deprecated
 public class ConcurrentRunner extends BlockJUnit4ClassRunner {
 
     public final int FINISH_WAIT_CYCLE_MS = 2000;
diff --git a/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/RunSeparately.java b/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/RunSeparately.java
index 9dee038..49a474f 100644
--- a/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/RunSeparately.java
+++ b/test-framework/util/src/main/java/org/glassfish/jersey/test/util/runner/RunSeparately.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,13 @@
  * by any of Jersey provided parallel test runner {@link ConcurrentRunner}.
  *
  * @author Jakub Podlesak
+ *
+ * @deprecated in connection with transition to JUnit 5 usage of this class is obsolete. Alternatively can be used
+ * specific junit 5
+ * <a href="https://junit.org/junit5/docs/current/user-guide/#writing-tests-parallel-execution">executions tools</a>.
  */
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.METHOD)
+@Deprecated
 public @interface RunSeparately {
 }
diff --git a/test-framework/util/src/test/java/org/glassfish/jersey/test/util/client/LoopBackConnectorTest.java b/test-framework/util/src/test/java/org/glassfish/jersey/test/util/client/LoopBackConnectorTest.java
index 98b40ed..040112c 100644
--- a/test-framework/util/src/test/java/org/glassfish/jersey/test/util/client/LoopBackConnectorTest.java
+++ b/test-framework/util/src/test/java/org/glassfish/jersey/test/util/client/LoopBackConnectorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,12 +28,13 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Basic {@link org.glassfish.jersey.test.util.client.LoopBackConnector} unit tests.
@@ -44,12 +45,12 @@
 
     private Client client;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         client = ClientBuilder.newClient(LoopBackConnectorProvider.getClientConfig());
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         if (client != null) {
             client.close();
@@ -83,10 +84,12 @@
         assertThat("Invalid content-type received", response.getMediaType(), is(new MediaType("foo", "bar")));
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testClose() throws Exception {
-        client.close();
-        client.target("baz").request().get();
+        Assertions.assertThrows(IllegalStateException.class, () -> {
+            client.close();
+            client.target("baz").request().get();
+        });
     }
 
     @Test
@@ -112,8 +115,9 @@
         assertThat("Async request failed", throwable.get(), nullValue());
     }
 
-    @Test(expected = ProcessingException.class)
+    @Test
     public void testInvalidEntity() throws Exception {
-        client.target("baz").request().post(Entity.json(Arrays.asList("foo", "bar")));
+        Assertions.assertThrows(ProcessingException.class,
+                () -> client.target("baz").request().post(Entity.json(Arrays.asList("foo", "bar"))));
     }
 }
diff --git a/test-framework/util/src/test/java/org/glassfish/jersey/test/util/runner/ConcurrentRunnerTest.java b/test-framework/util/src/test/java/org/glassfish/jersey/test/util/runner/ConcurrentRunnerTest.java
index 41f0ac5..391ab4f 100644
--- a/test-framework/util/src/test/java/org/glassfish/jersey/test/util/runner/ConcurrentRunnerTest.java
+++ b/test-framework/util/src/test/java/org/glassfish/jersey/test/util/runner/ConcurrentRunnerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,6 +30,7 @@
  *
  * @author Jakub Podlesak
  */
+@SuppressWarnings({"unchecked", "deprecation"})
 @RunWith(ConcurrentRunner.class)
 public class ConcurrentRunnerTest extends TestCase {
 
diff --git a/tests/e2e-client/pom.xml b/tests/e2e-client/pom.xml
index 4395a8c..106955c 100644
--- a/tests/e2e-client/pom.xml
+++ b/tests/e2e-client/pom.xml
@@ -189,10 +189,10 @@
             <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
-
         <dependency>
-            <groupId>xmlunit</groupId>
-            <artifactId>xmlunit</artifactId>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-suite</artifactId>
+            <version>${junit-platform-suite.version}</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/AbortResponseClientTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/AbortResponseClientTest.java
index b3e1863..1be8789 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/AbortResponseClientTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/AbortResponseClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,11 +42,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Tests aborting the request on the client side.
@@ -106,7 +106,7 @@
         assertEquals("123465", r.getEntityTag().getValue());
         assertEquals("language", r.getLanguage().toString());
         assertEquals(date.getTime(), r.getLastModified().getTime());
-        // Assert.assertEquals("uri", r.getLink("link")); TODO: not supported yet
+        // Assertions.assertEquals("uri", r.getLink("link")); TODO: not supported yet
         assertEquals("www.oracle.com", r.getLocation().toString());
         assertEquals(MediaType.TEXT_HTML_TYPE, r.getMediaType());
         assertEquals(99, r.getLength());
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/BasicClientTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/BasicClientTest.java
index 4726707..8d141a4 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/BasicClientTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/BasicClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -53,11 +53,11 @@
 import org.glassfish.jersey.spi.ThreadPoolExecutorProvider;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+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 static org.junit.jupiter.api.Assertions.fail;
 
 import static javax.ws.rs.client.Entity.text;
 
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/BufferingTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/BufferingTest.java
index 3688755..6963634 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/BufferingTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/BufferingTest.java
@@ -38,8 +38,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests chunk encoding and possibility of buffering the entity.
@@ -135,8 +135,8 @@
         WebTarget target = client.target(UriBuilder.fromUri(getBaseUri()).path("resource").build());
 
         Response response = target.request().post(Entity.entity(entity, MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(expected, response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(expected, response.readEntity(String.class));
     }
 
     private void testWithChunkEncodingWithPropertyDefinition(ClientConfig cc) {
@@ -168,13 +168,13 @@
 
         String entity = getVeryLongString();
         Response response = target.request().post(Entity.entity(entity, MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("chunked", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("chunked", response.readEntity(String.class));
 
         response = target.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.BUFFERED)
                 .request().post(Entity.entity(entity, MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(String.valueOf(entity.length()), response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(String.valueOf(entity.length()), response.readEntity(String.class));
     }
 
     public String getVeryLongString() {
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/CancelFutureClientTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/CancelFutureClientTest.java
index bd9990f..652e834 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/CancelFutureClientTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/CancelFutureClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,9 +31,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Tests the behaviour of the Async client when the {@link java.util.concurrent.Future} is cancelled.
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ChunkedInputStreamClosedPrematurelyTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ChunkedInputStreamClosedPrematurelyTest.java
index 5c74b8d..0e15ff0 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ChunkedInputStreamClosedPrematurelyTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ChunkedInputStreamClosedPrematurelyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -50,12 +50,12 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+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 com.google.common.util.concurrent.SettableFuture;
 
@@ -161,15 +161,14 @@
 
         Response testResponse = target("test").queryParam(REQ_ID_PARAM_NAME, testReqId)
                 .request().post(Entity.entity("0123456789ABCDEF", MediaType.APPLICATION_OCTET_STREAM));
-        assertEquals("Unexpected response status code.", 200, testResponse.getStatus());
-        assertEquals("Unexpected response entity.", "16", testResponse.readEntity(String.class));
+        assertEquals(200, testResponse.getStatus(), "Unexpected response status code.");
+        assertEquals("16", testResponse.readEntity(String.class), "Unexpected response entity.");
 
-        assertTrue("POST request " + testReqId + " has not reached the server.",
-                target("test").path("requestWasMade").queryParam(REQ_ID_PARAM_NAME, testReqId)
-                        .request().get(Boolean.class));
-        assertFalse("POST request " + testReqId + " has caused an unexpected exception on the server.",
-                target("test").path("requestCausedException").queryParam(REQ_ID_PARAM_NAME, testReqId)
-                        .request().get(Boolean.class));
+        assertTrue(target("test").path("requestWasMade").queryParam(REQ_ID_PARAM_NAME, testReqId).request().get(Boolean.class),
+                "POST request " + testReqId + " has not reached the server.");
+        assertFalse(target("test").path("requestCausedException").queryParam(REQ_ID_PARAM_NAME, testReqId)
+                .request().get(Boolean.class), "POST request " + testReqId
+                + " has caused an unexpected exception on the server.");
     }
 
     /**
@@ -192,24 +191,23 @@
             connection.setChunkedStreamingMode(1024);
             OutputStream entityStream = connection.getOutputStream();
             ReaderWriter.writeTo(new ExceptionThrowingInputStream(BYTES_TO_SEND), entityStream);
-            Assert.fail("Expected ProcessingException has not been thrown.");
+            Assertions.fail("Expected ProcessingException has not been thrown.");
         } catch (IOException expected) {
             // so far so good
         } finally {
             connection.disconnect();
         }
         // we should make it to the server, but there the exceptional behaviour should get noticed
-        assertTrue("POST request " + testReqId + " has not reached the server.",
-                target("test").path("requestWasMade").queryParam(REQ_ID_PARAM_NAME, testReqId).request().get(Boolean.class));
-        assertTrue("POST request " + testReqId + " did not cause an expected exception on the server.",
-                target("test").path("requestCausedException").queryParam(REQ_ID_PARAM_NAME, testReqId)
-                        .request().get(Boolean.class));
+        assertTrue(target("test").path("requestWasMade").queryParam(REQ_ID_PARAM_NAME, testReqId).request().get(Boolean.class),
+                "POST request " + testReqId + " has not reached the server.");
+        assertTrue(target("test").path("requestCausedException").queryParam(REQ_ID_PARAM_NAME, testReqId).request()
+                .get(Boolean.class), "POST request " + testReqId + " did not cause an expected exception on the server.");
     }
 
     /**
      * This test reproduces the Jersey Client behavior reported in JERSEY-2705.
      */
-    @Ignore
+    @Disabled
     @Test
     public void testInterruptedJerseyClient() {
         final String testReqId = nextRequestId("testInterruptedJerseyClient");
@@ -217,16 +215,15 @@
         try {
             target("test").queryParam(REQ_ID_PARAM_NAME, testReqId).request()
                     .post(Entity.entity(new ExceptionThrowingInputStream(BYTES_TO_SEND), MediaType.APPLICATION_OCTET_STREAM));
-            Assert.fail("Expected ProcessingException has not been thrown.");
+            Assertions.fail("Expected ProcessingException has not been thrown.");
         } catch (ProcessingException expected) {
             // so far so good
         }
         // we should make it to the server, but there the exceptional behaviour should get noticed
-        assertTrue("POST request " + testReqId + " has not reached the server.",
-                target("test").path("requestWasMade").queryParam(REQ_ID_PARAM_NAME, testReqId).request().get(Boolean.class));
-        assertTrue("POST request " + testReqId + " did not cause an expected exception on the server.",
-                target("test").path("requestCausedException").queryParam(REQ_ID_PARAM_NAME, testReqId)
-                        .request().get(Boolean.class));
+        assertTrue(target("test").path("requestWasMade").queryParam(REQ_ID_PARAM_NAME, testReqId).request().get(Boolean.class),
+                "POST request " + testReqId + " has not reached the server.");
+        assertTrue(target("test").path("requestCausedException").queryParam(REQ_ID_PARAM_NAME, testReqId)
+            .request().get(Boolean.class), "POST request " + testReqId + " did not cause an expected exception on the server.");
     }
 
     private static String nextRequestId(String testMethodName) {
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientBufferingDisabledTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientBufferingDisabledTest.java
index f9c6adf..97676a3 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientBufferingDisabledTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientBufferingDisabledTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,12 +36,12 @@
 import org.glassfish.jersey.client.HttpUrlConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
-
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests possibility of disabling buffering of outgoing entity in
@@ -50,7 +50,7 @@
  * @author Miroslav Fuksa
  * @author Marek Potociar
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class ClientBufferingDisabledTest extends JerseyTest {
 
     private static final long LENGTH = 200000000L;
@@ -92,6 +92,7 @@
      * fix length streaming on {@code HttpURLConnection}.
      */
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDisableBufferingWithFixedLengthViaProperty() {
         postLatch = new CountDownLatch(1);
 
@@ -107,9 +108,9 @@
                 = client.target(getBaseUri()).path("resource")
                 .request().header(HttpHeaders.CONTENT_LENGTH, LENGTH).post(
                         Entity.entity(is, MediaType.APPLICATION_OCTET_STREAM));
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
         final long count = response.readEntity(long.class);
-        Assert.assertEquals("Unexpected content length received.", LENGTH, count);
+        Assertions.assertEquals(LENGTH, count, "Unexpected content length received.");
     }
 
     /**
@@ -121,6 +122,7 @@
      * fix length streaming on {@code HttpURLConnection}.
      */
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDisableBufferingWithFixedLengthViaMethod() {
         postLatch = new CountDownLatch(1);
 
@@ -136,9 +138,9 @@
                 = client.target(getBaseUri()).path("resource")
                 .request().header(HttpHeaders.CONTENT_LENGTH, LENGTH).post(
                         Entity.entity(is, MediaType.APPLICATION_OCTET_STREAM));
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
         final long count = response.readEntity(long.class);
-        Assert.assertEquals("Unexpected content length received.", LENGTH, count);
+        Assertions.assertEquals(LENGTH, count, "Unexpected content length received.");
     }
 
     /**
@@ -152,7 +154,8 @@
      * </p>
      */
     @Test
-    @Ignore("fails unpredictable (see javadoc)")
+    @Execution(ExecutionMode.CONCURRENT)
+    @Disabled("fails unpredictable (see javadoc)")
     public void testDisableBufferingWithChunkEncoding() {
         postLatch = new CountDownLatch(1);
 
@@ -168,9 +171,9 @@
         final Response response
                 = client.target(getBaseUri()).path("resource")
                 .request().post(Entity.entity(is, MediaType.APPLICATION_OCTET_STREAM));
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
         final long count = response.readEntity(long.class);
-        Assert.assertEquals("Unexpected content length received.", LENGTH, count);
+        Assertions.assertEquals(LENGTH, count, "Unexpected content length received.");
     }
 
     private InputStream getInputStream() {
@@ -183,7 +186,7 @@
                 if (cnt > CHUNK * 10) {
                     try {
                         postLatch.await(3 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS);
-                        Assert.assertEquals("waiting for chunk on the server side time-outed", 0, postLatch.getCount());
+                        Assertions.assertEquals(0, postLatch.getCount(), "waiting for chunk on the server side time-outed");
                     } catch (InterruptedException e) {
                         throw new RuntimeException(e);
                     }
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientDestroyTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientDestroyTest.java
index afb4134..d9d5956 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientDestroyTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientDestroyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,12 +42,12 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Assert that pre destroy method on providers is invoked.
@@ -59,7 +59,7 @@
     private static final Map<String, Boolean> destroyed = new HashMap<>();
 
     @Override
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         destroyed.clear();
         destroyed.put("filter", false);
@@ -228,22 +228,22 @@
         client.register(filterOnTarget);                                                   // instance registered into client
         client.target(getBaseUri()).register(filterOnClient).request().get(String.class);   // instance registration into target
 
-        assertTrue("Filter registered on Client was expected to be already initialized.", filterOnClient.isInitialized());
-        assertTrue("Filter registered on Target was expected to be already initialized.", filterOnTarget.isInitialized());
+        assertTrue(filterOnClient.isInitialized(), "Filter registered on Client was expected to be already initialized.");
+        assertTrue(filterOnTarget.isInitialized(), "Filter registered on Target was expected to be already initialized.");
 
         client.target(getBaseUri()).register(FooListener.class).request().get(String.class); // class registration into target
 
-        assertTrue("Class-registered filter was expected to be already initialized", FooListener.isInitialized());
+        assertTrue(FooListener.isInitialized(), "Class-registered filter was expected to be already initialized");
 
-        assertFalse("Class-registered filter was expected to be still open.", FooListener.isClosed());
-        assertFalse("Filter registered on Client was expected to be still open.", filterOnClient.isClosedByClientClose());
-        assertFalse("Filter registered on Target was expected to be still open.", filterOnTarget.isClosedByClientClose());
+        assertFalse(FooListener.isClosed(), "Class-registered filter was expected to be still open.");
+        assertFalse(filterOnClient.isClosedByClientClose(), "Filter registered on Client was expected to be still open.");
+        assertFalse(filterOnTarget.isClosedByClientClose(), "Filter registered on Target was expected to be still open.");
 
         client.close();
 
-        assertTrue("Class-registered filter was expected to be closed.", FooListener.isClosed());
-        assertTrue("Filter registered on Client was expected to be closed.", filterOnClient.isClosed());
-        assertTrue("Filter registered on Target was expected to be closed.", filterOnTarget.isClosed());
+        assertTrue(FooListener.isClosed(), "Class-registered filter was expected to be closed.");
+        assertTrue(filterOnClient.isClosed(), "Filter registered on Client was expected to be closed.");
+        assertTrue(filterOnTarget.isClosed(), "Filter registered on Target was expected to be closed.");
     }
 
     private static boolean isCalledFromFinalizer() {
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientEntityAnnotationTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientEntityAnnotationTest.java
index 79288c7..26c6191 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientEntityAnnotationTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientEntityAnnotationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests annotations of entity on the client side.
@@ -59,8 +59,8 @@
         Entity<String> post = Entity.entity("test", MediaType.WILDCARD_TYPE,
                 annotations);
         final Response response = target().path("resource").request().post(post);
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("test", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("test", response.readEntity(String.class));
     }
 
 
@@ -69,8 +69,8 @@
         @Override
         public void filter(ClientRequestContext requestContext) throws IOException {
             final Annotation[] entityAnnotations = requestContext.getEntityAnnotations();
-            Assert.assertEquals(1, entityAnnotations.length);
-            Assert.assertEquals(MyProvider.class.getAnnotation(Provider.class), entityAnnotations[0]);
+            Assertions.assertEquals(1, entityAnnotations.length);
+            Assertions.assertEquals(MyProvider.class.getAnnotation(Provider.class), entityAnnotations[0]);
         }
     }
 
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientExecutorCloseTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientExecutorCloseTest.java
index e6a09b6..70d583f 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientExecutorCloseTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientExecutorCloseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,11 +29,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * @author Petr Janouch
@@ -46,7 +46,7 @@
      * Tests that closing a client shuts down a corresponding client async executor service.
      */
     @Test
-    @Ignore("Jersey uses ForkJoin common pool by default, which shouldn't be closed when client closes.")
+    @Disabled("Jersey uses ForkJoin common pool by default, which shouldn't be closed when client closes.")
     public void testCloseAsyncExecutor() throws InterruptedException {
         assertFalse(clientExecutorThreadPresent());
         target("resource").request().async().get();
@@ -56,14 +56,14 @@
                 .build();
         eventSource.register(System.out::println);
         eventSource.open();
-        assertTrue("Waiting for eventSource to open time-outed", cdl.await(5000, TimeUnit.MILLISECONDS));
-        assertTrue("Client async executor thread not found.", clientExecutorThreadPresent());
-        assertTrue("Scheduler thread not found.", schedulerFound);
+        assertTrue(cdl.await(5000, TimeUnit.MILLISECONDS), "Waiting for eventSource to open time-outed");
+        assertTrue(clientExecutorThreadPresent(), "Client async executor thread not found.");
+        assertTrue(schedulerFound, "Scheduler thread not found.");
         client().close();
-        assertFalse("Client async executor thread should have been already removed.",
-                clientExecutorThreadPresent());
-        assertFalse("Client background scheduler thread should have been already removed.",
-                clientSchedulerThreadPresent());
+        assertFalse(clientExecutorThreadPresent(),
+                "Client async executor thread should have been already removed.");
+        assertFalse(clientSchedulerThreadPresent(),
+                "Client background scheduler thread should have been already removed.");
     }
 
     private boolean clientExecutorThreadPresent() {
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientExecutorTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientExecutorTest.java
index e1230cd..a20b28a 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientExecutorTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientExecutorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,8 +43,8 @@
 import org.glassfish.jersey.spi.ExecutorServiceProvider;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.containsString;
@@ -73,7 +73,7 @@
     private volatile StringBuilder threadName;
     private volatile CountDownLatch latch;
 
-    @Before
+    @BeforeEach
     public void setUpThreadNameHolder() {
         threadName = new StringBuilder();
         latch = new CountDownLatch(1);
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientFilterTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientFilterTest.java
index 9918ad4..f68f541 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientFilterTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,10 +38,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientPathTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientPathTest.java
index ee07bd7..85f7411 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientPathTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientPathTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test definition of path in client invocation.
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientPreInitTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientPreInitTest.java
index ad4d687..b930cf2 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientPreInitTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ClientPreInitTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,11 +43,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test pre initialization of the client.
@@ -110,7 +110,7 @@
         }
     }
 
-    @Before
+    @BeforeEach
     public void before() {
         TestReader.initialized = false;
     }
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/FollowRedirectHeadTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/FollowRedirectHeadTest.java
index 204ca15..fb85c61 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/FollowRedirectHeadTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/FollowRedirectHeadTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,8 +32,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests that configuration of {@link ClientProperties#FOLLOW_REDIRECTS} works when HEAD method is used.
@@ -73,28 +73,28 @@
     @Test
     public void testDontFollowRedirectHead() throws Exception {
         Response response = getTarget(false).request().head();
-        Assert.assertEquals(303, response.getStatus());
-        Assert.assertTrue(response.getLocation().toString().endsWith("/final"));
+        Assertions.assertEquals(303, response.getStatus());
+        Assertions.assertTrue(response.getLocation().toString().endsWith("/final"));
     }
 
     @Test
     public void testDontFollowRedirectGet() throws Exception {
         Response response = getTarget(false).request().get();
-        Assert.assertEquals(303, response.getStatus());
-        Assert.assertTrue(response.getLocation().toString().endsWith("/final"));
+        Assertions.assertEquals(303, response.getStatus());
+        Assertions.assertTrue(response.getLocation().toString().endsWith("/final"));
     }
 
     @Test
     public void testFollowRedirectHead() throws Exception {
         Response response = getTarget(true).request().head();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertFalse(response.hasEntity());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertFalse(response.hasEntity());
     }
 
     @Test
     public void testFollowRedirectGet() throws Exception {
         Response response = getTarget(true).request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("final-entity", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("final-entity", response.readEntity(String.class));
     }
 }
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/FollowRedirectsTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/FollowRedirectsTest.java
index 12610b1..07a6faf 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/FollowRedirectsTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/FollowRedirectsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/GenericResponseTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/GenericResponseTest.java
index 14dadcd..6dca5e7 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/GenericResponseTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/GenericResponseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test {@link GenericType} with {@link Response}.
@@ -71,8 +71,8 @@
         SyncInvoker sync = target.request();
 
         Response response = sync.post(entity, generic);
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("entity", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("entity", response.readEntity(String.class));
     }
 
     @Test
@@ -84,8 +84,8 @@
         final AsyncInvoker async = target.request().async();
 
         Response response = async.post(entity, generic).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("entity", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("entity", response.readEntity(String.class));
     }
 
     @Test
@@ -95,8 +95,8 @@
         WebTarget target = target("resource");
         SyncInvoker sync = target.request();
         Response response = sync.get(generic);
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("get", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("get", response.readEntity(String.class));
     }
 
     @Test
@@ -106,8 +106,8 @@
         WebTarget target = target("resource");
         final AsyncInvoker async = target.request().async();
         Response response = async.get(generic).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("get", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("get", response.readEntity(String.class));
     }
 
     @Test
@@ -117,6 +117,6 @@
         WebTarget target = target("resource");
         SyncInvoker sync = target.request();
         final String entity = sync.get(generic);
-        Assert.assertEquals("get", entity);
+        Assertions.assertEquals("get", entity);
     }
 }
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpAuthorizationTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpAuthorizationTest.java
index 5741988..753ecd9 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpAuthorizationTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpAuthorizationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,18 +43,18 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests {@link org.glassfish.jersey.client.authentication.HttpAuthenticationFeature}.
  *
  * @author Miroslav Fuksa
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class HttpAuthorizationTest extends JerseyTest {
 
     @NameBinding
@@ -253,6 +253,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBasicPreemptive() {
         Response response = target().path("resource").path("basic")
                 .register(HttpAuthenticationFeature.basicBuilder().credentials("homer", "Homer").build())
@@ -261,6 +262,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBasicNonPreemptive() {
         Response response = target().path("resource").path("basic")
                 .register(HttpAuthenticationFeature.basicBuilder().nonPreemptive().credentials("homer", "Homer").build())
@@ -269,6 +271,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBasicNonPreemptiveWithEmptyPassword() {
         final WebTarget target = target().path("resource")
                 .register(HttpAuthenticationFeature.basicBuilder().nonPreemptive().build());
@@ -279,7 +282,7 @@
             response = target().path("resource").path("basic")
                     .register(HttpAuthenticationFeature.basicBuilder().nonPreemptive().build())
                     .request().get();
-            Assert.fail("should throw an exception as credentials are missing");
+            Assertions.fail("should throw an exception as credentials are missing");
         } catch (Exception e) {
             // ok
         }
@@ -292,6 +295,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testUniversalBasic() {
         Response response = target().path("resource").path("basic")
                 .register(HttpAuthenticationFeature.universalBuilder().credentials("homer", "Homer").build())
@@ -304,6 +308,7 @@
      * insensitve.
      */
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testUniversalBasicCaseSensitivity() {
         Response response;
 
@@ -330,6 +335,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testUniversalBasicWrongPassword() {
         Response response = target().path("resource").path("basic")
                 .register(HttpAuthenticationFeature.universalBuilder().credentials("homer", "FOO").build())
@@ -338,6 +344,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBasicWithDifferentCredentials() {
         final WebTarget target = target().path("resource").path("basic")
                 .register(HttpAuthenticationFeature.basicBuilder().credentials("marge", "Marge").build());
@@ -346,6 +353,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBasicUniversalWithDifferentCredentials() {
         final WebTarget target = target().path("resource").path("basic")
                 .register(HttpAuthenticationFeature.universalBuilder().credentials("marge", "Marge").build());
@@ -378,6 +386,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDigest() {
         Response response = target().path("resource").path("digest")
                 .register(HttpAuthenticationFeature.digest("homer", "Homer"))
@@ -386,6 +395,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDigestWithPasswords() {
         final WebTarget target = target().path("resource").path("digest")
                 .register(HttpAuthenticationFeature.digest("homer", "Homer"));
@@ -393,6 +403,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testUniversalDigestWithPasswords() {
         final WebTarget target = target().path("resource").path("digest")
                 .register(HttpAuthenticationFeature.universalBuilder().credentials("homer", "Homer").build());
@@ -420,6 +431,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDigestWithEmptyDefaultPassword() {
         final WebTarget target = target().path("resource")
                 .register(HttpAuthenticationFeature.digest());
@@ -427,6 +439,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDigestUniversalWithEmptyDefaultPassword() {
         final WebTarget target = target().path("resource")
                 .register(HttpAuthenticationFeature.universalBuilder().build());
@@ -452,7 +465,7 @@
                     .property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_USERNAME, "bart")
                     .property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_PASSWORD, "Bart")
                     .get();
-            Assert.fail("should throw an exception as no credentials were supplied for digest auth");
+            Assertions.fail("should throw an exception as no credentials were supplied for digest auth");
         } catch (Exception e) {
             // ok
         }
@@ -464,15 +477,16 @@
     }
 
     private void check(Response response, int status, String entity) {
-        Assert.assertEquals(status, response.getStatus());
-        Assert.assertEquals(entity, response.readEntity(String.class));
+        Assertions.assertEquals(status, response.getStatus());
+        Assertions.assertEquals(entity, response.readEntity(String.class));
     }
 
     private void check(Response response, int status) {
-        Assert.assertEquals(status, response.getStatus());
+        Assertions.assertEquals(status, response.getStatus());
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDigestUniversalSimple() {
         Response response = target().path("resource").path("digest")
                 .register(HttpAuthenticationFeature.universalBuilder().credentials("homer", "Homer").build())
@@ -481,6 +495,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDigestUniversalSimple2() {
         Response response = target().path("resource").path("digest")
                 .register(HttpAuthenticationFeature.universalBuilder().credentialsForDigest("homer", "Homer").build())
@@ -489,6 +504,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDigestUniversalSimple3() {
         Response response = target().path("resource").path("digest")
                 .register(HttpAuthenticationFeature.universalBuilder()
@@ -500,6 +516,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDigestUniversalSimple4() {
         Response response = target().path("resource").path("digest")
                 .register(HttpAuthenticationFeature.universal("homer", "Homer"))
@@ -508,6 +525,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testUniversal() {
         final WebTarget target = target().path("resource")
                 .register(HttpAuthenticationFeature.universal("homer", "Homer"));
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpDigestAuthFilterTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpDigestAuthFilterTest.java
index 8e6bfd9..f959cf6 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpDigestAuthFilterTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpDigestAuthFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,8 +38,8 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.uri.UriComponent;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  *
@@ -117,7 +117,7 @@
                         ha2);
 
                 // this generates INTERNAL_SERVER_ERROR if not matching
-                Assert.assertEquals(ncExpected, Integer.parseInt(getDigestAuthHeaderValue(authHeader, "nc=")));
+                Assertions.assertEquals(ncExpected, Integer.parseInt(getDigestAuthHeaderValue(authHeader, "nc=")));
 
                 if (response.equals(getDigestAuthHeaderValue(authHeader, "response="))) {
                     return Response.ok().build();
@@ -238,7 +238,7 @@
 
         ncExpected = 1;
         final Response r1 = resource.request().get();
-        Assert.assertEquals(Response.Status.fromStatusCode(r1.getStatus()), Response.Status.OK);
+        Assertions.assertEquals(Response.Status.fromStatusCode(r1.getStatus()), Response.Status.OK);
     }
 
 
@@ -250,15 +250,15 @@
 
         ncExpected = 1;
         final Response r1 = resource.request().get();
-        Assert.assertEquals(Response.Status.fromStatusCode(r1.getStatus()), Response.Status.OK);
+        Assertions.assertEquals(Response.Status.fromStatusCode(r1.getStatus()), Response.Status.OK);
 
         ncExpected = 2;
         final Response r2 = resource.request().get();
-        Assert.assertEquals(Response.Status.fromStatusCode(r2.getStatus()), Response.Status.OK);
+        Assertions.assertEquals(Response.Status.fromStatusCode(r2.getStatus()), Response.Status.OK);
 
         ncExpected = 3;
         final Response r3 = resource.request().get();
-        Assert.assertEquals(Response.Status.fromStatusCode(r3.getStatus()), Response.Status.OK);
+        Assertions.assertEquals(Response.Status.fromStatusCode(r3.getStatus()), Response.Status.OK);
 
     }
 
@@ -270,6 +270,6 @@
 
         ncExpected = 1;
         final Response r1 = resource.request().get();
-        Assert.assertEquals(Response.Status.fromStatusCode(r1.getStatus()), Response.Status.UNAUTHORIZED);
+        Assertions.assertEquals(Response.Status.fromStatusCode(r1.getStatus()), Response.Status.UNAUTHORIZED);
     }
 }
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpHeadersInjectionTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpHeadersInjectionTest.java
index b2ff0c7..65b86f0 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpHeadersInjectionTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpHeadersInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,7 +18,7 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpMethodEntityTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpMethodEntityTest.java
index 3a81437..ed51569 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpMethodEntityTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpMethodEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,10 +35,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Tests HTTP methods and entity presence.
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/IgnoreExceptionResponseTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/IgnoreExceptionResponseTest.java
index 88125d8..f331878 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/IgnoreExceptionResponseTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/IgnoreExceptionResponseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,16 +27,16 @@
 import java.net.URI;
 import java.util.concurrent.atomic.AtomicReference;
 
-import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertFalse;
-import static junit.framework.TestCase.assertNull;
+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 org.glassfish.jersey.CommonProperties;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests ignoring of client responses in exceptions.
@@ -61,7 +61,7 @@
     /**
      * Sets ignore exception response as system property after enabling the provider.
      */
-    @BeforeClass
+    @BeforeAll
     public static void startUp() {
         lastAllowSystemProperties = System.setProperty(CommonProperties.ALLOW_SYSTEM_PROPERTIES_PROVIDER, "true");
         lastIgnoreExceptionResponse = System.setProperty(ClientProperties.IGNORE_EXCEPTION_RESPONSE, "true");
@@ -70,7 +70,7 @@
     /**
      * Restores state after completion.
      */
-    @AfterClass
+    @AfterAll
     public static void cleanUp() {
         if (lastIgnoreExceptionResponse != null) {
             System.setProperty(ClientProperties.IGNORE_EXCEPTION_RESPONSE, lastIgnoreExceptionResponse);
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InjectedClientBodyWorker.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InjectedClientBodyWorker.java
index d747cd8..1414887 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InjectedClientBodyWorker.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InjectedClientBodyWorker.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,7 +43,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InjectionManagerProviderTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InjectionManagerProviderTest.java
index 6ee393e..9aa31da 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InjectionManagerProviderTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InjectionManagerProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,8 +46,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests {@link InjectionManagerClientProvider}.
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InvocationBuilderRxTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InvocationBuilderRxTest.java
index 6c43026..a10359a 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InvocationBuilderRxTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/InvocationBuilderRxTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,9 +20,9 @@
 import org.glassfish.jersey.client.JerseyInvocation;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -46,7 +46,7 @@
     private static final String ECHO = "ECHO";
     private CountDownLatch latch;
 
-    @Before
+    @BeforeEach
     public void beforeEach() {
         latch = new CountDownLatch(1);
     }
@@ -95,8 +95,8 @@
                 .method("GET", new TestCallback(latch));
         latch.await(AWAIT_TIME, TimeUnit.MILLISECONDS);
 
-        Assert.assertEquals(ECHO, future.get());
-        Assert.assertEquals(0, latch.getCount());
+        Assertions.assertEquals(ECHO, future.get());
+        Assertions.assertEquals(0, latch.getCount());
     }
 
     @Test
@@ -105,8 +105,8 @@
                 .method("POST", Entity.entity(ECHO, MediaType.TEXT_PLAIN), new TestCallback(latch));
         latch.await(AWAIT_TIME, TimeUnit.MILLISECONDS);
 
-        Assert.assertEquals(ECHO + ECHO, future.get());
-        Assert.assertEquals(0, latch.getCount());
+        Assertions.assertEquals(ECHO + ECHO, future.get());
+        Assertions.assertEquals(0, latch.getCount());
     }
 
     @Test
@@ -115,7 +115,7 @@
                 .method("POST", Entity.entity(ECHO, MediaType.TEXT_PLAIN), Response.class);
 
         try (Response response = stage.toCompletableFuture().get()) {
-            Assert.assertEquals(ECHO + ECHO, response.readEntity(String.class));
+            Assertions.assertEquals(ECHO + ECHO, response.readEntity(String.class));
         }
     }
 
@@ -125,7 +125,7 @@
                 .method("POST", Entity.entity(ECHO, MediaType.TEXT_PLAIN), new GenericType<Response>(){});
 
         try (Response response = stage.toCompletableFuture().get()) {
-            Assert.assertEquals(ECHO + ECHO, response.readEntity(String.class));
+            Assertions.assertEquals(ECHO + ECHO, response.readEntity(String.class));
         }
     }
 }
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/JaxRsTimeoutTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/JaxRsTimeoutTest.java
index ebff0ea..987de6a 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/JaxRsTimeoutTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/JaxRsTimeoutTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,9 +31,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/NonSuccessfulResponseTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/NonSuccessfulResponseTest.java
index 9075628..a01a179 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/NonSuccessfulResponseTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/NonSuccessfulResponseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,8 +32,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test no successful (3XX, 4XX, 5XX) responses with no empty body.
@@ -106,8 +106,8 @@
         WebTarget target = target("resource").path(Integer.toString(status));
         SyncInvoker sync = target.request();
         Response response = sync.get(Response.class);
-        Assert.assertEquals(status, response.getStatus());
-        Assert.assertEquals("get", response.readEntity(String.class));
+        Assertions.assertEquals(status, response.getStatus());
+        Assertions.assertEquals("get", response.readEntity(String.class));
     }
 
     private void generalTestPost(int status) {
@@ -115,8 +115,8 @@
         WebTarget target = target("resource").path(Integer.toString(status));
         SyncInvoker sync = target.request();
         Response response = sync.post(entity, Response.class);
-        Assert.assertEquals(status, response.getStatus());
-        Assert.assertEquals("entity", response.readEntity(String.class));
+        Assertions.assertEquals(status, response.getStatus());
+        Assertions.assertEquals("entity", response.readEntity(String.class));
     }
 
 }
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/RequestScopedReadEntityTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/RequestScopedReadEntityTest.java
index 9f5c926..f8bd405 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/RequestScopedReadEntityTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/RequestScopedReadEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,8 +40,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * TODO: javadoc.
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ResponseCloseTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ResponseCloseTest.java
index 69bdeda..44412ab 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ResponseCloseTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ResponseCloseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test for Response.close() method.
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ResponseReadAndBufferEntityTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ResponseReadAndBufferEntityTest.java
index b90b129..e9aa6d0 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ResponseReadAndBufferEntityTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ResponseReadAndBufferEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,12 +40,12 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Buffered response entity tests.
@@ -267,13 +267,13 @@
         // Read entity should not fail - we silently consume the underlying IOException from closed input stream.
         final String entity = response.readEntity(String.class, null);
         assertThat("Unexpected response.", entity.toString(), equalTo(Resource.ENTITY));
-        assertEquals("Close not invoked on underlying input stream.", 1, entityStream.getCloseCount());
+        assertEquals(1, entityStream.getCloseCount(), "Close not invoked on underlying input stream.");
 
         // Close should not fail and should be idempotent
         response.close();
         response.close();
         response.close();
-        assertEquals("Close invoked too many times on underlying input stream.", 1, entityStream.getCloseCount());
+        assertEquals(1, entityStream.getCloseCount(), "Close invoked too many times on underlying input stream.");
 
         try {
             // UC-1.1 : Try to read an unbuffered entity from a closed context
@@ -307,7 +307,7 @@
         entityStream.setCorruptClose(true);
 
         response.bufferEntity();
-        assertEquals("Close not invoked on underlying input stream.", 1, entityStream.getCloseCount());
+        assertEquals(1, entityStream.getCloseCount(), "Close not invoked on underlying input stream.");
 
         String entity;
         entity = response.readEntity(String.class, null);
@@ -319,7 +319,7 @@
         response.close();
         response.close();
         response.close();
-        assertEquals("Close invoked too many times on underlying input stream.", 1, entityStream.getCloseCount());
+        assertEquals(1, entityStream.getCloseCount(), "Close invoked too many times on underlying input stream.");
 
         try {
             // UC-2.1 : Try to read a buffered entity from a closed context
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ShutdownHookMemoryLeakTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ShutdownHookMemoryLeakTest.java
index 14220dc..85a63bd 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ShutdownHookMemoryLeakTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/ShutdownHookMemoryLeakTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,6 +17,7 @@
 package org.glassfish.jersey.tests.e2e.client;
 
 import java.lang.reflect.Field;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
@@ -38,15 +39,15 @@
 import org.glassfish.jersey.jetty.connector.JettyConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Ensure Jersey connectors do not leak resources
@@ -57,27 +58,28 @@
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
-public class ShutdownHookMemoryLeakTest extends JerseyTest {
+public class ShutdownHookMemoryLeakTest {
 
     private static final String PATH = "test";
     private static final int ITERATIONS = 1000;
 
-    private final ConnectorProvider connectorProvider;
-
-    public ShutdownHookMemoryLeakTest(final ConnectorProvider cp) {
-        connectorProvider = cp;
+    public static List<ConnectorProvider> connectionProviders() {
+        return Arrays.asList(
+                new GrizzlyConnectorProvider(),
+                new JettyConnectorProvider(),
+                new ApacheConnectorProvider(),
+                new HttpUrlConnectorProvider()
+        );
     }
 
-
-    @Parameterized.Parameters
-    public static List<ConnectorProvider[]> connectionProviders() {
-        return Arrays.asList(new ConnectorProvider[][] {
-                {new GrizzlyConnectorProvider()},
-                {new JettyConnectorProvider()},
-                {new ApacheConnectorProvider()},
-                {new HttpUrlConnectorProvider()}
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        connectionProviders().forEach(connectionProvider -> {
+            ShutdownHookMemoryLeakTemplateTest test = new ShutdownHookMemoryLeakTemplateTest(connectionProvider) {};
+            tests.add(TestHelper.toTestContainer(test, connectionProvider.getClass().getSimpleName()));
         });
+        return tests;
     }
 
     @Path(PATH)
@@ -89,63 +91,72 @@
         }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(TestResource.class);
-    }
+    public abstract static class ShutdownHookMemoryLeakTemplateTest extends JerseyTest {
+        private final ConnectorProvider connectorProvider;
 
-    @Override
-    protected void configureClient(ClientConfig config) {
-        config.connectorProvider(connectorProvider);
-    }
-
-    @Test
-    @Ignore("Unstable, ignored for now")
-    public void testClientDoesNotLeakResources() throws Exception {
-
-        final AtomicInteger listenersInitialized = new AtomicInteger(0);
-        final AtomicInteger listenersClosed = new AtomicInteger(0);
-
-        for (int i = 0; i < ITERATIONS; i++) {
-            final Response response = target(PATH).property("another", "runtime").register(new ClientLifecycleListener() {
-                @Override
-                public void onInit() {
-                    listenersInitialized.incrementAndGet();
-                }
-
-                @Override
-                public void onClose() {
-                    listenersClosed.incrementAndGet();
-                }
-            }).register(LoggingFeature.class).request().get();
-            assertEquals("GET", response.readEntity(String.class));
+        public ShutdownHookMemoryLeakTemplateTest(final ConnectorProvider cp) {
+            connectorProvider = cp;
         }
 
-        Collection shutdownHooks = getShutdownHooks(client());
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(TestResource.class);
+        }
 
-        assertThat(String.format(
-                    "%s: number of initialized listeners should be the same as number of total request count",
-                        connectorProvider.getClass()),
-                listenersInitialized.get(), is(ITERATIONS));
+        @Override
+        protected void configureClient(ClientConfig config) {
+            config.connectorProvider(connectorProvider);
+        }
 
-//      the following check is fragile, as GC could break it easily
-//        assertThat(String.format(
-//                "%s: number of closed listeners should correspond to the number of missing hooks",
-//                        connectorProvider.getClass()),
-//                listenersClosed.get(), is(ITERATIONS - shutdownHooks.size()));
+        @Test
+        @Disabled("Unstable, ignored for now")
+        public void testClientDoesNotLeakResources() throws Exception {
 
-        client().close();      // clean up the rest
+            final AtomicInteger listenersInitialized = new AtomicInteger(0);
+            final AtomicInteger listenersClosed = new AtomicInteger(0);
 
-        assertThat(String.format(
-                        "%s: number of closed listeners should be the same as the number of total requests made",
-                        connectorProvider.getClass()),
-                listenersClosed.get(), is(ITERATIONS));
-    }
+            for (int i = 0; i < ITERATIONS; i++) {
+                final Response response = target(PATH).property("another", "runtime").register(new ClientLifecycleListener() {
+                    @Override
+                    public void onInit() {
+                        listenersInitialized.incrementAndGet();
+                    }
 
-    private Collection getShutdownHooks(javax.ws.rs.client.Client client) throws NoSuchFieldException, IllegalAccessException {
-        JerseyClient jerseyClient = (JerseyClient) client;
-        Field shutdownHooksField = JerseyClient.class.getDeclaredField("shutdownHooks");
-        shutdownHooksField.setAccessible(true);
-        return (Collection) shutdownHooksField.get(jerseyClient);
+                    @Override
+                    public void onClose() {
+                        listenersClosed.incrementAndGet();
+                    }
+                }).register(LoggingFeature.class).request().get();
+                assertEquals("GET", response.readEntity(String.class));
+            }
+
+            Collection shutdownHooks = getShutdownHooks(client());
+
+            assertThat(String.format(
+                        "%s: number of initialized listeners should be the same as number of total request count",
+                            connectorProvider.getClass()),
+                    listenersInitialized.get(), is(ITERATIONS));
+
+//            the following check is fragile, as GC could break it easily
+//            assertThat(String.format(
+//                    "%s: number of closed listeners should correspond to the number of missing hooks",
+//                            connectorProvider.getClass()),
+//                     listenersClosed.get(), is(ITERATIONS - shutdownHooks.size()));
+
+            client().close();      // clean up the rest
+
+            assertThat(String.format(
+                            "%s: number of closed listeners should be the same as the number of total requests made",
+                            connectorProvider.getClass()),
+                    listenersClosed.get(), is(ITERATIONS));
+        }
+
+        private Collection getShutdownHooks(javax.ws.rs.client.Client client)
+                throws NoSuchFieldException, IllegalAccessException {
+            JerseyClient jerseyClient = (JerseyClient) client;
+            Field shutdownHooksField = JerseyClient.class.getDeclaredField("shutdownHooks");
+            shutdownHooksField.setAccessible(true);
+            return (Collection) shutdownHooksField.get(jerseyClient);
+        }
     }
 }
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/TimeoutTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/TimeoutTest.java
index 507321f..559258d 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/TimeoutTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/TimeoutTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,10 +29,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * @author Martin Matula
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/HttpPatchTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/HttpPatchTest.java
index e9429ac..3bca471 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/HttpPatchTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/HttpPatchTest.java
@@ -16,7 +16,9 @@
 
 package org.glassfish.jersey.tests.e2e.client.connector;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.CompletionStage;
 import java.util.concurrent.Future;
@@ -42,121 +44,133 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
  */
-@RunWith(Parameterized.class)
-public class HttpPatchTest extends JerseyTest {
+public class HttpPatchTest {
 
     private static final Logger LOGGER = Logger.getLogger(RequestHeaderModificationsTest.class.getName());
 
-    @Parameterized.Parameters(name = "{index}: {0}")
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][]{
+    public static List<ConnectorProvider> testData() {
+        return Arrays.asList(
                 // {HttpUrlConnectorProvider.class}, // cannot process PATCH without additional configuration
-                {GrizzlyConnectorProvider.class},
-                {JettyConnectorProvider.class}, // unstable.
-                {ApacheConnectorProvider.class},
-                {Apache5ConnectorProvider.class},
-                {NettyConnectorProvider.class},
-                {JdkConnectorProvider.class},
-                });
+                new GrizzlyConnectorProvider(),
+                new JettyConnectorProvider(), // unstable.
+                new ApacheConnectorProvider(),
+                new Apache5ConnectorProvider(),
+                new NettyConnectorProvider(),
+                new JdkConnectorProvider()
+                );
     }
 
-    private final ConnectorProvider connectorProvider;
-
-    public HttpPatchTest(Class<? extends ConnectorProvider> connectorProviderClass)
-            throws IllegalAccessException, InstantiationException {
-        this.connectorProvider = connectorProviderClass.newInstance();
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        for (ConnectorProvider provider : testData()) {
+            HttpPatchTemplateTest test = new HttpPatchTemplateTest(provider) {};
+            DynamicContainer container = TestHelper.toTestContainer(test,
+                    String.format("httpPatchTest (%s)", provider.getClass().getSimpleName()));
+            tests.add(container);
+        }
+        return tests;
     }
 
-    @Override
-    protected Application configure() {
-        set(TestProperties.RECORD_LOG_LEVEL, Level.WARNING.intValue());
-        enable(TestProperties.LOG_TRAFFIC);
-        return new ResourceConfig(PatchResource.class)
-                .register(new LoggingFeature(LOGGER, LoggingFeature.Verbosity.HEADERS_ONLY));
-    }
+    public abstract static class HttpPatchTemplateTest extends JerseyTest {
+        private final ConnectorProvider connectorProvider;
 
-    @Override
-    protected void configureClient(ClientConfig clientConfig) {
-        clientConfig.connectorProvider(connectorProvider);
-    }
+        public HttpPatchTemplateTest(ConnectorProvider connectorProvider) {
+            this.connectorProvider = connectorProvider;
+        }
 
-    @Test
-    public void testPatchResponse() throws Exception {
-        Response response = target().request().method("PATCH", Entity.text("patch"));
+        @Override
+        protected Application configure() {
+            set(TestProperties.RECORD_LOG_LEVEL, Level.WARNING.intValue());
+            enable(TestProperties.LOG_TRAFFIC);
+            return new ResourceConfig(PatchResource.class)
+                    .register(new LoggingFeature(LOGGER, LoggingFeature.Verbosity.HEADERS_ONLY));
+        }
 
-        assertEquals(200, response.getStatus());
-        assertEquals("patch", response.readEntity(String.class));
-    }
+        @Override
+        protected void configureClient(ClientConfig clientConfig) {
+            clientConfig.connectorProvider(connectorProvider);
+        }
 
-    @Test
-    public void testPatchEntity() throws Exception {
-        String response = target().request().method("PATCH", Entity.text("patch"), String.class);
+        @Test
+        public void testPatchResponse() throws Exception {
+            Response response = target().request().method("PATCH", Entity.text("patch"));
 
-        assertEquals("patch", response);
-    }
+            assertEquals(200, response.getStatus());
+            assertEquals("patch", response.readEntity(String.class));
+        }
 
-    @Test
-    public void testPatchGenericType() throws Exception {
-        String response = target().request().method("PATCH", Entity.text("patch"), new GenericType<String>() {
-        });
+        @Test
+        public void testPatchEntity() throws Exception {
+            String response = target().request().method("PATCH", Entity.text("patch"), String.class);
 
-        assertEquals("patch", response);
-    }
+            assertEquals("patch", response);
+        }
 
-    @Test
-    public void testAsyncPatchResponse() throws Exception {
-        Future<Response> response = target().request().async().method("PATCH", Entity.text("patch"));
+        @Test
+        public void testPatchGenericType() throws Exception {
+            String response = target().request().method("PATCH", Entity.text("patch"), new GenericType<String>() {
+            });
 
-        assertEquals(200, response.get().getStatus());
-        assertEquals("patch", response.get().readEntity(String.class));
-    }
+            assertEquals("patch", response);
+        }
 
-    @Test
-    public void testAsyncPatchEntity() throws Exception {
-        Future<String> response = target().request().async().method("PATCH", Entity.text("patch"), String.class);
+        @Test
+        public void testAsyncPatchResponse() throws Exception {
+            Future<Response> response = target().request().async().method("PATCH", Entity.text("patch"));
 
-        assertEquals("patch", response.get());
-    }
+            assertEquals(200, response.get().getStatus());
+            assertEquals("patch", response.get().readEntity(String.class));
+        }
 
-    @Test
-    public void testAsyncPatchGenericType() throws Exception {
-        Future<String> response = target().request().async().method("PATCH", Entity.text("patch"), new GenericType<String>() {
-        });
+        @Test
+        public void testAsyncPatchEntity() throws Exception {
+            Future<String> response = target().request().async().method("PATCH", Entity.text("patch"), String.class);
 
-        assertEquals("patch", response.get());
-    }
+            assertEquals("patch", response.get());
+        }
 
-    @Test
-    public void testRxPatchResponse() throws Exception {
-        CompletionStage<Response> response = target().request().rx().method("PATCH", Entity.text("patch"));
+        @Test
+        public void testAsyncPatchGenericType() throws Exception {
+            Future<String> response = target().request().async().method("PATCH", Entity.text("patch"), new GenericType<String>() {
+            });
 
-        assertEquals(200, response.toCompletableFuture().get().getStatus());
-        assertEquals("patch", response.toCompletableFuture().get().readEntity(String.class));
-    }
+            assertEquals("patch", response.get());
+        }
 
-    @Test
-    public void testRxPatchEntity() throws Exception {
-        CompletionStage<String> response = target().request().rx().method("PATCH", Entity.text("patch"), String.class);
+        @Test
+        public void testRxPatchResponse() throws Exception {
+            CompletionStage<Response> response = target().request().rx().method("PATCH", Entity.text("patch"));
 
-        assertEquals("patch", response.toCompletableFuture().get());
-    }
+            assertEquals(200, response.toCompletableFuture().get().getStatus());
+            assertEquals("patch", response.toCompletableFuture().get().readEntity(String.class));
+        }
 
-    @Test
-    public void testRxPatchGenericType() throws Exception {
-        CompletionStage<String> response = target().request().rx()
-                                                   .method("PATCH", Entity.text("patch"), new GenericType<String>() {
-                                                   });
+        @Test
+        public void testRxPatchEntity() throws Exception {
+            CompletionStage<String> response = target().request().rx().method("PATCH", Entity.text("patch"), String.class);
 
-        assertEquals("patch", response.toCompletableFuture().get());
+            assertEquals("patch", response.toCompletableFuture().get());
+        }
+
+        @Test
+        public void testRxPatchGenericType() throws Exception {
+            CompletionStage<String> response = target().request().rx()
+                                                       .method("PATCH", Entity.text("patch"), new GenericType<String>() {
+                                                       });
+
+            assertEquals("patch", response.toCompletableFuture().get());
+        }
     }
 
     @Path("/")
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/RequestHeaderModificationsTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/RequestHeaderModificationsTest.java
index f030077..3d63a59 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/RequestHeaderModificationsTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/RequestHeaderModificationsTest.java
@@ -21,7 +21,9 @@
 import java.io.OutputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Scanner;
 import java.util.concurrent.Future;
@@ -62,23 +64,23 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.Matchers.containsString;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
+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.hamcrest.MatcherAssert.assertThat;
 
 /**
  * JERSEY-2206 reproducer
  *
  * @author Libor Kramolis
  */
-@RunWith(Parameterized.class)
-public class RequestHeaderModificationsTest extends JerseyTest {
+public class RequestHeaderModificationsTest {
 
     private static final Logger LOGGER = Logger.getLogger(RequestHeaderModificationsTest.class.getName());
     private static final boolean GZIP = false; // change to true when JERSEY-2341 fixed
@@ -97,103 +99,117 @@
     private static final String REQUEST_HEADER_MODIFICATION_SUPPORTED = "modificationSupported";
     private static final String PATH = "/resource";
 
-    @Parameterized.Parameters(name = "{index}: {0} / modificationSupported= {1} / addHeader= {2}")
     public static List<Object[]> testData() {
         return Arrays.asList(new Object[][] {
-                {HttpUrlConnectorProvider.class, true, false},
-                {GrizzlyConnectorProvider.class, false, false}, // change to true when JERSEY-2341 fixed
-                {JettyConnectorProvider.class, false, false}, // change to true when JERSEY-2341 fixed
-                {ApacheConnectorProvider.class, false, false}, // change to true when JERSEY-2341 fixed
-                {Apache5ConnectorProvider.class, false, false}, // change to true when JERSEY-2341 fixed
-                {HttpUrlConnectorProvider.class, true, true},
-                {GrizzlyConnectorProvider.class, false, true}, // change to true when JERSEY-2341 fixed
-                {JettyConnectorProvider.class, false, true}, // change to true when JERSEY-2341 fixed
-                {ApacheConnectorProvider.class, false, true}, // change to true when JERSEY-2341 fixed
-                {Apache5ConnectorProvider.class, false, true}, // change to true when JERSEY-2341 fixed
+                {new HttpUrlConnectorProvider(), true, false},
+                {new GrizzlyConnectorProvider(), false, false}, // change to true when JERSEY-2341 fixed
+                {new JettyConnectorProvider(), false, false}, // change to true when JERSEY-2341 fixed
+                {new ApacheConnectorProvider(), false, false}, // change to true when JERSEY-2341 fixed
+                {new Apache5ConnectorProvider(), false, false}, // change to true when JERSEY-2341 fixed
+                {new HttpUrlConnectorProvider(), true, true},
+                {new GrizzlyConnectorProvider(), false, true}, // change to true when JERSEY-2341 fixed
+                {new JettyConnectorProvider(), false, true}, // change to true when JERSEY-2341 fixed
+                {new ApacheConnectorProvider(), false, true}, // change to true when JERSEY-2341 fixed
+                {new Apache5ConnectorProvider(), false, true}, // change to true when JERSEY-2341 fixed
         });
     }
 
-    private final ConnectorProvider connectorProvider;
-    private final boolean modificationSupported; // remove when JERSEY-2341 fixed
-    private final boolean addHeader;
-
-    public RequestHeaderModificationsTest(Class<? extends ConnectorProvider> connectorProviderClass,
-                                          boolean modificationSupported, boolean addHeader)
-            throws IllegalAccessException, InstantiationException {
-        this.connectorProvider = connectorProviderClass.newInstance();
-        this.modificationSupported = modificationSupported;
-        this.addHeader = addHeader;
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        testData().forEach(arr -> {
+            RequestHeaderModificationsTemplateTest test = new RequestHeaderModificationsTemplateTest(
+                    (ConnectorProvider) arr[0], (boolean) arr[1], (boolean) arr[2]) {};
+            tests.add(TestHelper.toTestContainer(test, String.format("%s (%s, %s, %s)",
+                    RequestHeaderModificationsTemplateTest.class.getSimpleName(),
+                    arr[0].getClass().getSimpleName(), arr[1], arr[2])));
+        });
+        return tests;
     }
 
-    @Override
-    protected Application configure() {
-        set(TestProperties.RECORD_LOG_LEVEL, Level.WARNING.intValue());
+    public abstract static class RequestHeaderModificationsTemplateTest extends JerseyTest {
+        private final ConnectorProvider connectorProvider;
+        private final boolean modificationSupported; // remove when JERSEY-2341 fixed
+        private final boolean addHeader;
 
-        enable(TestProperties.LOG_TRAFFIC);
-        if (DUMP_ENTITY) {
-            enable(TestProperties.DUMP_ENTITY);
+        public RequestHeaderModificationsTemplateTest(ConnectorProvider connectorProvider,
+                                              boolean modificationSupported, boolean addHeader) {
+            this.connectorProvider = connectorProvider;
+            this.modificationSupported = modificationSupported;
+            this.addHeader = addHeader;
         }
-        return new ResourceConfig(TestResource.class).register(new LoggingFeature(LOGGER, LoggingFeature.Verbosity.HEADERS_ONLY));
-    }
 
-    @Override
-    protected void configureClient(ClientConfig clientConfig) {
-        clientConfig.register(MyClientRequestFilter.class);
-        clientConfig.register(new MyWriterInterceptor(addHeader));
-        clientConfig.register(new MyMessageBodyWriter(addHeader));
-        clientConfig.connectorProvider(connectorProvider);
-    }
+        @Override
+        protected Application configure() {
+            set(TestProperties.RECORD_LOG_LEVEL, Level.WARNING.intValue());
 
-    @Test
-    public void testWarningLogged() throws Exception {
-        Response response = requestBuilder().post(requestEntity());
-        assertResponse(response);
-    }
-
-    @Test
-    public void testWarningLoggedAsync() throws Exception {
-        AsyncInvoker asyncInvoker = requestBuilder().async();
-        Future<Response> responseFuture = asyncInvoker.post(requestEntity());
-        Response response = responseFuture.get();
-        assertResponse(response);
-    }
-
-    private Invocation.Builder requestBuilder() {
-        return target(PATH)
-                .request()
-                .header(REQUEST_HEADER_NAME_CLIENT, REQUEST_HEADER_VALUE_CLIENT)
-                .header(REQUEST_HEADER_MODIFICATION_SUPPORTED, modificationSupported && addHeader)
-                .header("hello", "double").header("hello", "value");
-    }
-
-    private Entity<MyEntity> requestEntity() {
-        return Entity.text(new MyEntity(QUESTION));
-    }
-
-    private void assertResponse(Response response) {
-        if (!modificationSupported) {
-            final String UNSENT_HEADER_CHANGES = "Unsent header changes";
-            LogRecord logRecord = findLogRecord(UNSENT_HEADER_CHANGES);
-            if (addHeader) {
-                assertNotNull("Missing LogRecord for message '" + UNSENT_HEADER_CHANGES + "'.", logRecord);
-                assertThat(logRecord.getMessage(), containsString(REQUEST_HEADER_NAME_INTERCEPTOR));
-                assertThat(logRecord.getMessage(), containsString(REQUEST_HEADER_NAME_MBW));
-            } else {
-                assertNull("Unexpected LogRecord for message '" + UNSENT_HEADER_CHANGES + "'.", logRecord);
+            enable(TestProperties.LOG_TRAFFIC);
+            if (DUMP_ENTITY) {
+                enable(TestProperties.DUMP_ENTITY);
             }
+            return new ResourceConfig(TestResource.class)
+                    .register(new LoggingFeature(LOGGER, LoggingFeature.Verbosity.HEADERS_ONLY));
         }
 
-        assertEquals(200, response.getStatus());
-        assertEquals(ANSWER, response.readEntity(String.class));
-    }
+        @Override
+        protected void configureClient(ClientConfig clientConfig) {
+            clientConfig.register(MyClientRequestFilter.class);
+            clientConfig.register(new MyWriterInterceptor(addHeader));
+            clientConfig.register(new MyMessageBodyWriter(addHeader));
+            clientConfig.connectorProvider(connectorProvider);
+        }
 
-    private LogRecord findLogRecord(String messageContains) {
-        for (final LogRecord record : getLoggedRecords()) {
-            if (record.getMessage().contains(messageContains)) {
-                return record;
+        @Test
+        public void testWarningLogged() throws Exception {
+            Response response = requestBuilder().post(requestEntity());
+            assertResponse(response);
+        }
+
+        @Test
+        public void testWarningLoggedAsync() throws Exception {
+            AsyncInvoker asyncInvoker = requestBuilder().async();
+            Future<Response> responseFuture = asyncInvoker.post(requestEntity());
+            Response response = responseFuture.get();
+            assertResponse(response);
+        }
+
+        private Invocation.Builder requestBuilder() {
+            return target(PATH)
+                    .request()
+                    .header(REQUEST_HEADER_NAME_CLIENT, REQUEST_HEADER_VALUE_CLIENT)
+                    .header(REQUEST_HEADER_MODIFICATION_SUPPORTED, modificationSupported && addHeader)
+                    .header("hello", "double").header("hello", "value");
+        }
+
+        private Entity<MyEntity> requestEntity() {
+            return Entity.text(new MyEntity(QUESTION));
+        }
+
+        private void assertResponse(Response response) {
+            if (!modificationSupported) {
+                final String UNSENT_HEADER_CHANGES = "Unsent header changes";
+                LogRecord logRecord = findLogRecord(UNSENT_HEADER_CHANGES);
+                if (addHeader) {
+                    assertNotNull(logRecord, "Missing LogRecord for message '" + UNSENT_HEADER_CHANGES + "'.");
+                    assertThat(logRecord.getMessage(), containsString(REQUEST_HEADER_NAME_INTERCEPTOR));
+                    assertThat(logRecord.getMessage(), containsString(REQUEST_HEADER_NAME_MBW));
+                } else {
+                    assertNull(logRecord, "Unexpected LogRecord for message '" + UNSENT_HEADER_CHANGES + "'.");
+                }
             }
+
+            assertEquals(200, response.getStatus());
+            assertEquals(ANSWER, response.readEntity(String.class));
         }
-        return null;
+
+        private LogRecord findLogRecord(String messageContains) {
+            for (final LogRecord record : getLoggedRecords()) {
+                if (record.getMessage().contains(messageContains)) {
+                    return record;
+                }
+            }
+            return null;
+        }
     }
 
     @Path(PATH)
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/proxy/ProxySelectorTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/proxy/ProxySelectorTest.java
index a813e54..cb714f3 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/proxy/ProxySelectorTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/proxy/ProxySelectorTest.java
@@ -21,19 +21,13 @@
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.handler.AbstractHandler;
-import org.glassfish.jersey.apache.connector.ApacheConnectorProvider;
-import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.client.spi.ConnectorProvider;
-import org.glassfish.jersey.jetty.connector.JettyConnectorProvider;
 import org.glassfish.jersey.netty.connector.NettyConnectorProvider;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -42,40 +36,20 @@
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Arrays;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Moved from jetty-connector
  * @author Marcelo Rubim
  */
-@RunWith(Parameterized.class)
 public class ProxySelectorTest {
     private static final String NO_PASS = "no-pass";
 
-    @Parameterized.Parameters(name = "{index}: {0}")
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][]{
-                // Apache, Grizzly, Jetty have the proxy set on constructor, i.e. ProxySelector cannot choose based on URI.
-                // HttpUrlConnector ignores proxy on localhost.
-                {NettyConnectorProvider.class},
-        });
-    }
-
-    private final ConnectorProvider connectorProvider;
-
-    public ProxySelectorTest(Class<? extends ConnectorProvider> connectorProviderClass)
-            throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
-        this.connectorProvider = connectorProviderClass.getConstructor().newInstance();
-    }
-
     protected void configureClient(ClientConfig config) {
-        config.connectorProvider(connectorProvider);
+        config.connectorProvider(new NettyConnectorProvider());
     }
 
     @Test
@@ -90,12 +64,12 @@
         try (Response response = target("proxyTest").request().get()) {
             assertEquals(407, response.getStatus());
         } catch (ProcessingException pe) {
-            Assert.assertTrue(pe.getMessage().contains("407")); // netty
+            Assertions.assertTrue(pe.getMessage().contains("407")); // netty
         }
     }
 
     private static Server server;
-    @BeforeClass
+    @BeforeAll
     public static void startFakeProxy() {
         server = new Server(9997);
         server.setHandler(new ProxyHandler());
@@ -109,7 +83,7 @@
         System.setProperty("http.proxyPort", "9997");
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDownProxy() {
         try {
             server.stop();
@@ -122,7 +96,7 @@
     }
 
     private static Client client;
-    @Before
+    @BeforeEach
     public void beforeEach() {
         ClientConfig config = new ClientConfig();
         this.configureClient(config);
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/proxy/ProxyTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/proxy/ProxyTest.java
index 69be5f6..6fcd46d 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/proxy/ProxyTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/proxy/ProxyTest.java
@@ -30,13 +30,13 @@
 import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.jetty.connector.JettyConnectorProvider;
 import org.glassfish.jersey.netty.connector.NettyConnectorProvider;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -47,19 +47,25 @@
 import javax.ws.rs.core.Response;
 import java.lang.reflect.InvocationTargetException;
 import java.nio.charset.Charset;
-import java.util.Arrays;
 import java.util.Base64;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Moved from jetty-connector
  * @author Marcelo Rubim
  */
-@RunWith(Parameterized.class)
+@Suite
+@SelectClasses({
+        ProxyTest.ApacheConnectorProviderProxyTest.class,
+        ProxyTest.Apache5ConnectorProviderProxyTest.class,
+        ProxyTest.GrizzlyConnectorProviderProxyTest.class,
+        ProxyTest.JettyConnectorProviderProxyTest.class,
+        ProxyTest.NettyConnectorProviderProxyTest.class,
+        ProxyTest.HttpUrlConnectorProviderProxyTest.class
+})
 public class ProxyTest {
     private static final Charset CHARACTER_SET = Charset.forName("iso-8859-1");
     private static final String PROXY_URI = "http://127.0.0.1:9997";
@@ -67,94 +73,133 @@
     private static final String PROXY_PASSWORD = "proxy-password";
     private static final String NO_PASS = "no-pass";
 
-    @Parameterized.Parameters(name = "{index}: {0}")
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][]{
-                {ApacheConnectorProvider.class},
-                {Apache5ConnectorProvider.class},
-                {GrizzlyConnectorProvider.class},
-                {JettyConnectorProvider.class},
-                {NettyConnectorProvider.class},
-                {HttpUrlConnectorProvider.class},
-        });
-    }
-
-    private final ConnectorProvider connectorProvider;
-
-    public ProxyTest(Class<? extends ConnectorProvider> connectorProviderClass)
-            throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
-        this.connectorProvider = connectorProviderClass.getConstructor().newInstance();
-    }
-
-    protected void configureClient(ClientConfig config) {
-        config.connectorProvider(connectorProvider);
-    }
-
-    @Test
-    public void testGetNoPass() {
-        client().property(ClientProperties.PROXY_URI, ProxyTest.PROXY_URI);
-        try (Response response = target("proxyTest").request().header(NO_PASS, 200).get()) {
-            assertEquals(200, response.getStatus());
+    public static class ApacheConnectorProviderProxyTest extends ProxyTemplateTest {
+        public ApacheConnectorProviderProxyTest()
+                throws NoSuchMethodException, InvocationTargetException, InstantiationException,
+                IllegalAccessException {
+            super(ApacheConnectorProvider.class);
         }
     }
 
-    @Test
-    public void testGet407() {
-        // Grizzly sends (String)null password and username
-        int expected = GrizzlyConnectorProvider.class.isInstance(connectorProvider) ? 400 : 407;
-        client().property(ClientProperties.PROXY_URI, ProxyTest.PROXY_URI);
-        try (Response response = target("proxyTest").request().get()) {
-            assertEquals(expected, response.getStatus());
-        } catch (ProcessingException pe) {
-            Assert.assertTrue(pe.getMessage().contains("407")); // netty
+    public static class Apache5ConnectorProviderProxyTest extends ProxyTemplateTest {
+        public Apache5ConnectorProviderProxyTest()
+                throws NoSuchMethodException, InvocationTargetException, InstantiationException,
+                IllegalAccessException {
+            super(Apache5ConnectorProvider.class);
         }
     }
 
-    @Test
-    public void testGetSuccess() {
-        client().property(ClientProperties.PROXY_URI, ProxyTest.PROXY_URI);
-        client().property(ClientProperties.PROXY_USERNAME, ProxyTest.PROXY_USERNAME);
-        client().property(ClientProperties.PROXY_PASSWORD, ProxyTest.PROXY_PASSWORD);
-        Response response = target("proxyTest").request().get();
-        response.bufferEntity();
-        assertEquals(response.readEntity(String.class), 200, response.getStatus());
-    }
-
-    private static Server server;
-    @BeforeClass
-    public static void startFakeProxy() {
-        server = new Server(9997);
-        server.setHandler(new ProxyHandler());
-        try {
-            server.start();
-        } catch (Exception e) {
-
+    public static class GrizzlyConnectorProviderProxyTest extends ProxyTemplateTest {
+        public GrizzlyConnectorProviderProxyTest()
+                throws NoSuchMethodException, InvocationTargetException, InstantiationException,
+                IllegalAccessException {
+            super(GrizzlyConnectorProvider.class);
         }
     }
 
-    @AfterClass
-    public static void tearDownProxy() {
-        try {
-            server.stop();
-        } catch (Exception e) {
-
+    public static class JettyConnectorProviderProxyTest extends ProxyTemplateTest {
+        public JettyConnectorProviderProxyTest()
+                throws NoSuchMethodException, InvocationTargetException, InstantiationException,
+                IllegalAccessException {
+            super(JettyConnectorProvider.class);
         }
     }
 
-    private static Client client;
-    @Before
-    public void beforeEach() {
-        ClientConfig config = new ClientConfig();
-        this.configureClient(config);
-        client = ClientBuilder.newClient(config);
+    public static class NettyConnectorProviderProxyTest extends ProxyTemplateTest {
+        public NettyConnectorProviderProxyTest()
+                throws NoSuchMethodException, InvocationTargetException, InstantiationException,
+                IllegalAccessException {
+            super(NettyConnectorProvider.class);
+        }
     }
 
-    private Client client() {
-        return client;
+    public static class HttpUrlConnectorProviderProxyTest extends ProxyTemplateTest {
+        public HttpUrlConnectorProviderProxyTest()
+                throws NoSuchMethodException, InvocationTargetException, InstantiationException,
+                IllegalAccessException {
+            super(HttpUrlConnectorProvider.class);
+        }
     }
 
-    private WebTarget target(String path) {
-        return client().target("http://localhost:9998").path(path);
+    public abstract static class ProxyTemplateTest {
+        private final ConnectorProvider connectorProvider;
+
+        public ProxyTemplateTest(Class<? extends ConnectorProvider> connectorProviderClass)
+                throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
+            this.connectorProvider = connectorProviderClass.getConstructor().newInstance();
+        }
+
+
+        protected void configureClient(ClientConfig config) {
+            config.connectorProvider(connectorProvider);
+        }
+
+        @Test
+        public void testGetNoPass() {
+            client().property(ClientProperties.PROXY_URI, ProxyTest.PROXY_URI);
+            try (Response response = target("proxyTest").request().header(NO_PASS, 200).get()) {
+                assertEquals(200, response.getStatus());
+            }
+        }
+
+        @Test
+        public void testGet407() {
+            // Grizzly sends (String)null password and username
+            int expected = GrizzlyConnectorProvider.class.isInstance(connectorProvider) ? 400 : 407;
+            client().property(ClientProperties.PROXY_URI, ProxyTest.PROXY_URI);
+            try (Response response = target("proxyTest").request().get()) {
+                assertEquals(expected, response.getStatus());
+            } catch (ProcessingException pe) {
+                Assertions.assertTrue(pe.getMessage().contains("407")); // netty
+            }
+        }
+
+        @Test
+        public void testGetSuccess() {
+            client().property(ClientProperties.PROXY_URI, ProxyTest.PROXY_URI);
+            client().property(ClientProperties.PROXY_USERNAME, ProxyTest.PROXY_USERNAME);
+            client().property(ClientProperties.PROXY_PASSWORD, ProxyTest.PROXY_PASSWORD);
+            Response response = target("proxyTest").request().get();
+            response.bufferEntity();
+            assertEquals(200, response.getStatus(), response.readEntity(String.class));
+        }
+
+        private static Server server;
+        @BeforeAll
+        public static void startFakeProxy() {
+            server = new Server(9997);
+            server.setHandler(new ProxyHandler());
+            try {
+                server.start();
+            } catch (Exception e) {
+
+            }
+        }
+
+        @AfterAll
+        public static void tearDownProxy() {
+            try {
+                server.stop();
+            } catch (Exception e) {
+
+            }
+        }
+
+        private static Client client;
+        @BeforeEach
+        public void beforeEach() {
+            ClientConfig config = new ClientConfig();
+            this.configureClient(config);
+            client = ClientBuilder.newClient(config);
+        }
+
+        private Client client() {
+            return client;
+        }
+
+        private WebTarget target(String path) {
+            return client().target("http://localhost:9998").path(path);
+        }
     }
 
     static class ProxyHandler extends AbstractHandler {
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/AbstractConnectorServerTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/AbstractConnectorServerTest.java
index bc8ad45..512e9fc 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/AbstractConnectorServerTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/AbstractConnectorServerTest.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
+import java.util.stream.Stream;
 
 import javax.net.ssl.SSLContext;
 
@@ -30,10 +31,8 @@
 import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.jetty.connector.JettyConnectorProvider;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 
 import com.google.common.io.ByteStreams;
 
@@ -42,7 +41,6 @@
  *
  * @author Petr Bouda
  */
-@RunWith(Parameterized.class)
 public abstract class AbstractConnectorServerTest {
 
     // Default truststore and keystore
@@ -55,24 +53,20 @@
      *
      * @return test parameters.
      */
-    @Parameterized.Parameters(name = "{index}: {0}")
-    public static Iterable<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {new HttpUrlConnectorProvider()},
-                {new GrizzlyConnectorProvider()},
-                {new JettyConnectorProvider()},
-                {new ApacheConnectorProvider()},
-                {new Apache5ConnectorProvider()}
-        });
+    public static Stream<ConnectorProvider> testData() {
+        return Stream.of(
+                new HttpUrlConnectorProvider(),
+                new GrizzlyConnectorProvider(),
+                new JettyConnectorProvider(),
+                new ApacheConnectorProvider(),
+                new Apache5ConnectorProvider()
+        );
     }
 
-    @Parameterized.Parameter(0)
-    public ConnectorProvider connectorProvider;
-
     private final Object serverGuard = new Object();
     private Server server = null;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         synchronized (serverGuard) {
             if (server != null) {
@@ -83,7 +77,7 @@
         }
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         synchronized (serverGuard) {
             if (server == null) {
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslConnectorConfigurationTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslConnectorConfigurationTest.java
index 608ba06..d81b88a 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslConnectorConfigurationTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslConnectorConfigurationTest.java
@@ -25,13 +25,13 @@
 
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
+import org.glassfish.jersey.client.spi.ConnectorProvider;
 import org.glassfish.jersey.logging.LoggingFeature;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * SSL connector tests.
@@ -40,7 +40,6 @@
  * @author Arul Dhesiaseelan (aruld at acm.org)
  * @author Marek Potociar
  */
-@RunWith(Parameterized.class)
 public class SslConnectorConfigurationTest extends AbstractConnectorServerTest {
 
     /**
@@ -48,8 +47,9 @@
      *
      * @throws Exception in case of a test failure.
      */
-    @Test
-    public void testSSLWithAuth() throws Exception {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testSSLWithAuth(ConnectorProvider connectorProvider) throws Exception {
         final SSLContext sslContext = getSslContext();
 
         final ClientConfig cc = new ClientConfig().connectorProvider(connectorProvider);
@@ -73,8 +73,9 @@
      *
      * @throws Exception in case of a test failure.
      */
-    @Test
-    public void testHTTPBasicAuth1() throws Exception {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testHTTPBasicAuth1(ConnectorProvider connectorProvider) throws Exception {
         final SSLContext sslContext = getSslContext();
 
         final ClientConfig cc = new ClientConfig().connectorProvider(connectorProvider);
@@ -96,8 +97,9 @@
      *
      * @throws Exception in case of a test failure.
      */
-    @Test
-    public void testSSLAuth1() throws Exception {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testSSLAuth1(ConnectorProvider connectorProvider) throws Exception {
         final SSLContext sslContext = getSslContext();
 
         final ClientConfig cc = new ClientConfig().connectorProvider(connectorProvider);
@@ -121,8 +123,9 @@
     /**
      * Test that a response to an authentication challenge has the same SSL configuration as the original request.
      */
-    @Test
-    public void testSSLWithNonPreemptiveAuth() throws Exception {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testSSLWithNonPreemptiveAuth(ConnectorProvider connectorProvider) throws Exception {
         final SSLContext sslContext = getSslContext();
 
         final ClientConfig cc = new ClientConfig().connectorProvider(connectorProvider);
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslConnectorHostnameVerifierTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslConnectorHostnameVerifierTest.java
index a41f218..bf4f948 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslConnectorHostnameVerifierTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslConnectorHostnameVerifierTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,18 +33,16 @@
 import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.jetty.connector.JettyConnectorProvider;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * SSL connector hostname verification tests.
  *
  * @author Petr Bouda
  */
-@RunWith(Parameterized.class)
 public class SslConnectorHostnameVerifierTest extends AbstractConnectorServerTest {
 
     private static final String CLIENT_TRUST_STORE = "truststore-example_com-client";
@@ -65,10 +63,11 @@
      *
      * @throws Exception in case of a test failure.
      */
-    @Test
-    public void testHostnameVerifierApplied() throws Exception {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testHostnameVerifierApplied(ConnectorProvider connectorProvider) throws Exception {
         // Grizzly and Jetty connectors don't support Hostname Verification
-        if (isExcluded(Arrays.asList(GrizzlyConnectorProvider.class, JettyConnectorProvider.class))) {
+        if (isExcluded(Arrays.asList(GrizzlyConnectorProvider.class, JettyConnectorProvider.class), connectorProvider)) {
             return;
         }
 
@@ -93,7 +92,7 @@
         }
     }
 
-    private boolean isExcluded(List<Class<? extends ConnectorProvider>> excluded) {
+    private boolean isExcluded(List<Class<? extends ConnectorProvider>> excluded, ConnectorProvider connectorProvider) {
         for (Class<?> clazz : excluded) {
             if (clazz.isAssignableFrom(connectorProvider.getClass())) {
                 return true;
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslHttpUrlConnectorTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslHttpUrlConnectorTest.java
index df3f1dc..9b22f48 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslHttpUrlConnectorTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SslHttpUrlConnectorTest.java
@@ -43,11 +43,15 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.HttpUrlConnectorProvider;
 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
+import org.glassfish.jersey.client.spi.ConnectorProvider;
 import org.glassfish.jersey.logging.LoggingFeature;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test custom socket factory in HttpUrlConnection using SSL
@@ -94,8 +98,9 @@
      *
      * @author Kevin Conaway
      */
-    @Test
-    public void testConcurrentRequestsWithCustomSSLContext() throws Exception {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testConcurrentRequestsWithCustomSSLContext(ConnectorProvider connectorProvider) throws Exception {
         if (HttpUrlConnectorProvider.class.isInstance(connectorProvider)
                 || (ApacheConnectorProvider.class.isInstance(connectorProvider))
                 || (Apache5ConnectorProvider.class.isInstance(connectorProvider))) {
@@ -132,14 +137,9 @@
 
         service.shutdown();
 
-        assertTrue(
-            service.awaitTermination(1, TimeUnit.MINUTES)
-        );
+        assertTrue(service.awaitTermination(1, TimeUnit.MINUTES));
 
-        assertTrue(
-            toString(exceptions),
-            exceptions.isEmpty()
-        );
+        assertTrue(exceptions.isEmpty(), toString(exceptions));
     }
 
     private String toString(List<Exception> exceptions) {
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/grizzlyconnector/NonBlockingTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/grizzlyconnector/NonBlockingTest.java
index 5006b19..66414de 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/grizzlyconnector/NonBlockingTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/grizzlyconnector/NonBlockingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Grizzly connector non blocking test.
@@ -82,9 +82,9 @@
 
         String response = future.get();
         assertNotNull(response);
-        assertTrue("Invocation callback was not invoked",
-                countDownLatch.await(5, TimeUnit.SECONDS));
-        assertTrue("Invocation callback is not executed on the NIO pool thread.",
-                   !invocationCallbackThreadName.contains("jersey-client-async-executor"));
+        assertTrue(countDownLatch.await(5, TimeUnit.SECONDS),
+                "Invocation callback was not invoked");
+        assertTrue(!invocationCallbackThreadName.contains("jersey-client-async-executor"),
+                "Invocation callback is not executed on the NIO pool thread.");
     }
 }
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/httpurlconnector/AsyncTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/httpurlconnector/AsyncTest.java
index a67f409..43a8172 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/httpurlconnector/AsyncTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/httpurlconnector/AsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,14 +43,14 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.hamcrest.Matchers;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Asynchronous connector test.
@@ -228,7 +228,7 @@
     }
 
     @Test
-    @Ignore("Unstable test.")
+    @Disabled("Unstable test.")
     public void testClientThreadPool() throws Exception {
         final AsyncInvoker invoker = ClientBuilder
                 .newClient(new ClientConfig().property(ClientProperties.ASYNC_THREADPOOL_SIZE, 9))
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/httpurlconnector/Expect100ContinueTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/httpurlconnector/Expect100ContinueTest.java
index 1616824..e80fabd 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/httpurlconnector/Expect100ContinueTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/httpurlconnector/Expect100ContinueTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,7 +23,7 @@
 import org.glassfish.jersey.client.http.Expect100ContinueFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.HeaderParam;
 import javax.ws.rs.POST;
@@ -33,7 +33,7 @@
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Response;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class Expect100ContinueTest extends JerseyTest {
 
@@ -72,7 +72,7 @@
     @Test
     public void testExpect100Continue() {
        final Response response =  target(RESOURCE_PATH).request().post(Entity.text(ENTITY_STRING));
-       assertEquals("Expected 200", 200, response.getStatus()); //no Expect header sent - responce OK
+       assertEquals(200, response.getStatus(), "Expected 200"); //no Expect header sent - responce OK
     }
 
     @Test
@@ -80,7 +80,7 @@
        final Response response =  target(RESOURCE_PATH).register(Expect100ContinueFeature.basic())
                .property(ClientProperties.REQUEST_ENTITY_PROCESSING,
                RequestEntityProcessing.CHUNKED).request().post(Entity.text(ENTITY_STRING));
-       assertEquals("Expected 204", 204, response.getStatus()); //Expect header sent - No Content response
+       assertEquals(204, response.getStatus(), "Expected 204"); //Expect header sent - No Content response
     }
 
     @Test
@@ -89,7 +89,7 @@
                .property(ClientProperties.REQUEST_ENTITY_PROCESSING,
                RequestEntityProcessing.BUFFERED).request().header(HttpHeaders.CONTENT_LENGTH, 67000L)
                .post(Entity.text(ENTITY_STRING));
-       assertEquals("Expected 204", 204, response.getStatus()); //Expect header sent - No Content response
+       assertEquals(204, response.getStatus(), "Expected 204"); //Expect header sent - No Content response
     }
 
     @Test
@@ -97,7 +97,7 @@
        final Response response =  target(RESOURCE_PATH).register(Expect100ContinueFeature.withCustomThreshold(100L))
                .request().header(HttpHeaders.CONTENT_LENGTH, 101L)
                .post(Entity.text(ENTITY_STRING));
-       assertEquals("Expected 204", 204, response.getStatus()); //Expect header sent - No Content response
+       assertEquals(204, response.getStatus(), "Expected 204"); //Expect header sent - No Content response
     }
 
     @Test
@@ -105,7 +105,7 @@
        final Response response =  target(RESOURCE_PATH).register(Expect100ContinueFeature.withCustomThreshold(100L))
                .request().header(HttpHeaders.CONTENT_LENGTH, 99L)
                .post(Entity.text(ENTITY_STRING));
-       assertEquals("Expected 200", 200, response.getStatus()); //Expect header NOT sent - low request size
+       assertEquals(200, response.getStatus(), "Expected 200"); //Expect header NOT sent - low request size
     }
 
     @Test
@@ -115,7 +115,7 @@
                .register(Expect100ContinueFeature.basic())
                .request().header(HttpHeaders.CONTENT_LENGTH, 666L)
                .post(Entity.text(ENTITY_STRING));
-       assertEquals("Expected 204", 204, response.getStatus()); //Expect header sent - No Content response
+       assertEquals(204, response.getStatus(), "Expected 204"); //Expect header sent - No Content response
     }
 
     @Test
@@ -125,6 +125,6 @@
                .property(ClientProperties.EXPECT_100_CONTINUE, Boolean.TRUE)
                .request().header(HttpHeaders.CONTENT_LENGTH, 44L)
                .post(Entity.text(ENTITY_STRING));
-       assertEquals("Expected 204", 204, response.getStatus()); //Expect header sent - No Content response
+       assertEquals(204, response.getStatus(), "Expected 204"); //Expect header sent - No Content response
     }
 }
diff --git a/tests/e2e-core-common/pom.xml b/tests/e2e-core-common/pom.xml
index fb49a82..4163e86 100644
--- a/tests/e2e-core-common/pom.xml
+++ b/tests/e2e-core-common/pom.xml
@@ -39,8 +39,8 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/TestRuntimeDelegate.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/TestRuntimeDelegate.java
index 4e5403d..a4d3736 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/TestRuntimeDelegate.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/TestRuntimeDelegate.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,7 +28,7 @@
 import org.glassfish.jersey.internal.AbstractRuntimeDelegate;
 import org.glassfish.jersey.message.internal.MessagingBinders;
 
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
 
 /**
  * Test runtime delegate.
@@ -49,31 +49,31 @@
 
     public void testMediaType() {
         MediaType m = new MediaType("text", "plain");
-        Assert.assertNotNull(m);
+        Assertions.assertNotNull(m);
     }
 
     public void testUriBuilder() {
         UriBuilder ub = RuntimeDelegate.getInstance().createUriBuilder();
-        Assert.assertNotNull(ub);
+        Assertions.assertNotNull(ub);
     }
 
     public void testResponseBuilder() {
         Response.ResponseBuilder rb = RuntimeDelegate.getInstance().createResponseBuilder();
-        Assert.assertNotNull(rb);
+        Assertions.assertNotNull(rb);
     }
 
     public void testVariantListBuilder() {
         Variant.VariantListBuilder vlb = RuntimeDelegate.getInstance().createVariantListBuilder();
-        Assert.assertNotNull(vlb);
+        Assertions.assertNotNull(vlb);
     }
 
     public void testLinkBuilder() {
         final Link.Builder linkBuilder = RuntimeDelegate.getInstance().createLinkBuilder();
-        Assert.assertNotNull(linkBuilder);
+        Assertions.assertNotNull(linkBuilder);
     }
 
     public void testWebApplicationException() {
         WebApplicationException wae = new WebApplicationException();
-        Assert.assertNotNull(wae);
+        Assertions.assertNotNull(wae);
     }
 }
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/ServiceFinderBinderTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/ServiceFinderBinderTest.java
index 15b031f..2663dd9 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/ServiceFinderBinderTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/ServiceFinderBinderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,11 +28,11 @@
 import org.glassfish.jersey.internal.inject.Injections;
 import org.glassfish.jersey.internal.inject.Providers;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Service finder injection binder unit test.
@@ -46,7 +46,7 @@
     public ServiceFinderBinderTest() {
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpClass() throws Exception {
         AbstractBinder binder = new AbstractBinder() {
             @Override
@@ -60,7 +60,7 @@
         injectionManager.completeRegistration();
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDownClass() throws Exception {
     }
 
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ContextResolverFactoryTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ContextResolverFactoryTest.java
index d69b010..d8d5dd6 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ContextResolverFactoryTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ContextResolverFactoryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,10 +32,10 @@
 import org.glassfish.jersey.internal.inject.ProviderBinder;
 import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Context resolvers factory unit test.
@@ -107,7 +107,7 @@
         RuntimeDelegate.setInstance(new TestRuntimeDelegate());
     }
 
-    @Before
+    @BeforeEach
     public void setUp() {
         InjectionManager injectionManager = Injections.createInjectionManager();
         ProviderBinder providerBinder = new ProviderBinder(injectionManager);
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ExceptionMapperFactoryTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ExceptionMapperFactoryTest.java
index 24b4ffa..530662d 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ExceptionMapperFactoryTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ExceptionMapperFactoryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,8 @@
 import org.glassfish.jersey.internal.inject.Injections;
 import org.glassfish.jersey.spi.ExtendedExceptionMapper;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Unit test of {@link ExceptionMapperFactory}.
@@ -85,8 +85,8 @@
 
         final ExceptionMapper mapper = mapperFactory.findMapping(new IllegalArgumentException());
 
-        Assert.assertTrue("IllegalArgumentExceptionMapper should be returned",
-                mapper instanceof IllegalArgumentExceptionMapper);
+        Assertions.assertTrue(mapper instanceof IllegalArgumentExceptionMapper,
+                "IllegalArgumentExceptionMapper should be returned");
     }
 
     /**
@@ -116,7 +116,7 @@
 
         final ExceptionMapper<RuntimeException> mapper = mapperFactory.findMapping(new RuntimeException());
 
-        Assert.assertTrue("RuntimeExceptionMapper should be returned", mapper instanceof RuntimeExceptionMapper);
+        Assertions.assertTrue(mapper instanceof RuntimeExceptionMapper, "RuntimeExceptionMapper should be returned");
     }
 
     /**
@@ -147,8 +147,7 @@
 
         final ExceptionMapper mapper = mapperFactory.find(IllegalArgumentException.class);
 
-        Assert.assertTrue("IllegalStateExceptionMapper should be returned",
-                mapper instanceof IllegalStateExceptionMapper);
+        Assertions.assertTrue(mapper instanceof IllegalStateExceptionMapper, "IllegalStateExceptionMapper should be returned");
     }
 
     /**
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/JaxrsProvidersTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/JaxrsProvidersTest.java
index 49f6cc4..3774678 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/JaxrsProvidersTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/JaxrsProvidersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,9 +44,9 @@
 import org.glassfish.jersey.process.internal.RequestScope;
 import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
 
-import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 /**®
  * @author Marek Potociar
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/LocalizationMessagesTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/LocalizationMessagesTest.java
index 22c679f..e056964 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/LocalizationMessagesTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/LocalizationMessagesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,8 +19,8 @@
 
 import org.glassfish.jersey.internal.LocalizationMessages;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests {@link org.glassfish.jersey.internal.LocalizationMessages}.
@@ -30,7 +30,7 @@
 
     @Test
     public void test() {
-        Assert.assertTrue(LocalizationMessages.COMPONENT_CONTRACTS_EMPTY_OR_NULL("TYPE")
+        Assertions.assertTrue(LocalizationMessages.COMPONENT_CONTRACTS_EMPTY_OR_NULL("TYPE")
                 .contains("Attempt to register component of type TYPE"));
     }
 }
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ProviderBinderTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ProviderBinderTest.java
index b17a6b2..17d5e9e 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ProviderBinderTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/ProviderBinderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -52,9 +52,9 @@
 import org.glassfish.jersey.message.internal.MessagingBinders;
 import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * ServiceProviders unit test.
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/inject/ReferencingFactoryTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/inject/ReferencingFactoryTest.java
index 76429b0..4d84e09 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/inject/ReferencingFactoryTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/internal/inject/ReferencingFactoryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,8 +32,8 @@
 import org.glassfish.jersey.internal.inject.ReferencingFactory;
 import org.glassfish.jersey.internal.util.collection.Ref;
 
-import org.junit.Test;
-import static org.junit.Assert.assertSame;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertSame;
 
 /**
  * Referencing factory test.
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/AcceptableMediaTypeStringRepresentationTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/AcceptableMediaTypeStringRepresentationTest.java
index 2faf424..740549a 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/AcceptableMediaTypeStringRepresentationTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/AcceptableMediaTypeStringRepresentationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,19 +16,18 @@
 
 package org.glassfish.jersey.tests.e2e.common.message.internal;
 
-import java.util.Arrays;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
+import java.util.stream.Stream;
 
 import org.glassfish.jersey.message.internal.AcceptableMediaType;
 import org.glassfish.jersey.message.internal.MediaTypeProvider;
 import org.glassfish.jersey.message.internal.Quality;
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 
 /**
@@ -36,38 +35,28 @@
  *
  * @author Adam Lindenthal
  */
-@RunWith(Parameterized.class)
 public class AcceptableMediaTypeStringRepresentationTest {
-    @Parameterized.Parameters
     // expected result, acceptable media type
-    public static List<Object[]> getParameters() {
+    public static Stream<Arguments> getParameters() {
         final Map<String, String> emptyParams = new HashMap<String, String>();
         final Map<String, String> params = new HashMap<String, String>();
         params.put("myParam", "myValue");
 
-        return Arrays.asList(new Object[][]{
-                {"*/*", new AcceptableMediaType("*", "*")},
-                {"*/*", new AcceptableMediaType("*", "*", Quality.DEFAULT, emptyParams)},
-                {"*/*;q=0.75", new AcceptableMediaType("*", "*", 750, emptyParams)},
-                {"text/html", new AcceptableMediaType("text", "html", Quality.DEFAULT, null)},
-                {"text/html;q=0.5", new AcceptableMediaType("text", "html", 500, emptyParams)},
-                {"image/*;myparam=myValue;q=0.8", new AcceptableMediaType("image", "*", 800, params)},
-        });
+        return Stream.of(
+                Arguments.of("*/*", new AcceptableMediaType("*", "*")),
+                Arguments.of("*/*", new AcceptableMediaType("*", "*", Quality.DEFAULT, emptyParams)),
+                Arguments.of("*/*;q=0.75", new AcceptableMediaType("*", "*", 750, emptyParams)),
+                Arguments.of("text/html", new AcceptableMediaType("text", "html", Quality.DEFAULT, null)),
+                Arguments.of("text/html;q=0.5", new AcceptableMediaType("text", "html", 500, emptyParams)),
+                Arguments.of("image/*;myparam=myValue;q=0.8", new AcceptableMediaType("image", "*", 800, params))
+        );
     }
 
-    private final String expectedValue;
-    private final AcceptableMediaType testedType;
-
-    public AcceptableMediaTypeStringRepresentationTest(final String expectedValue,
-                                                       final AcceptableMediaType testedType) {
-        this.expectedValue = expectedValue;
-        this.testedType = testedType;
-    }
-
-    @Test
-    public void testStringRepresentation() {
+    @ParameterizedTest
+    @MethodSource("getParameters")
+    public void testStringRepresentation(String expectedValue, AcceptableMediaType testedType) {
         final MediaTypeProvider provider = new MediaTypeProvider();
-        Assert.assertEquals(expectedValue, testedType.toString());
+        Assertions.assertEquals(expectedValue, testedType.toString());
         provider.fromString(testedType.toString());
     }
 }
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/AcceptableMediaTypeTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/AcceptableMediaTypeTest.java
index 7821bfa..013d410 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/AcceptableMediaTypeTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/AcceptableMediaTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,57 +16,47 @@
 
 package org.glassfish.jersey.tests.e2e.common.message.internal;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.core.MediaType;
 
 import org.glassfish.jersey.message.internal.AcceptableMediaType;
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Acceptable media type unit tests.
  *
  * @author Marek Potociar
  */
-@RunWith(Parameterized.class)
 public class AcceptableMediaTypeTest {
-    @Parameterized.Parameters
     // expected result, media type, acceptable media type
-    public static List<Object[]> testBeds() {
-        return Arrays.asList(new Object[][]{
-                {Boolean.TRUE, MediaType.APPLICATION_JSON_TYPE, new AcceptableMediaType("application", "json")},
-                {Boolean.TRUE, MediaType.APPLICATION_JSON_TYPE, new AcceptableMediaType("application", "json", 1000, null)},
-                {Boolean.FALSE, MediaType.APPLICATION_JSON_TYPE, new AcceptableMediaType("application", "json", 500, null)},
-                {Boolean.FALSE, MediaType.APPLICATION_JSON_TYPE, new AcceptableMediaType("application", "xml")}
-        });
+    public static Stream<Arguments> testBeds() {
+        return Stream.of(
+                Arguments.of(Boolean.TRUE, MediaType.APPLICATION_JSON_TYPE, new AcceptableMediaType("application", "json")),
+                Arguments.of(Boolean.TRUE, MediaType.APPLICATION_JSON_TYPE,
+                        new AcceptableMediaType("application", "json", 1000, null)),
+                Arguments.of(Boolean.FALSE, MediaType.APPLICATION_JSON_TYPE,
+                        new AcceptableMediaType("application", "json", 500, null)),
+                Arguments.of(Boolean.FALSE, MediaType.APPLICATION_JSON_TYPE, new AcceptableMediaType("application", "xml"))
+        );
     }
 
-    private final boolean expectEquality;
-    private final MediaType mediaType;
-    private final AcceptableMediaType acceptableMediaType;
-
-    public AcceptableMediaTypeTest(boolean expectEquality, MediaType mediaType, AcceptableMediaType acceptableMediaType) {
-        this.expectEquality = expectEquality;
-        this.mediaType = mediaType;
-        this.acceptableMediaType = acceptableMediaType;
-    }
-
-    @Test
-    public void testEquals() throws Exception {
+    @ParameterizedTest
+    @MethodSource("testBeds")
+    public void testEquals(boolean expectEquality, MediaType mediaType,
+            AcceptableMediaType acceptableMediaType) throws Exception {
         if (expectEquality) {
-            Assert.assertEquals("Types not equal.", mediaType, acceptableMediaType);
-            Assert.assertEquals("Types not equal.", acceptableMediaType, mediaType);
-            Assert.assertEquals(
-                    String.format("Hash codes not equal for %s and %s.", mediaType.toString(), acceptableMediaType.toString()),
-                    mediaType.hashCode(), acceptableMediaType.hashCode());
+            Assertions.assertEquals(mediaType, acceptableMediaType, "Types not equal.");
+            Assertions.assertEquals(acceptableMediaType, mediaType, "Types not equal.");
+            Assertions.assertEquals(mediaType.hashCode(), acceptableMediaType.hashCode(),
+                    String.format("Hash codes not equal for %s and %s.", mediaType.toString(), acceptableMediaType.toString()));
         } else {
-            Assert.assertFalse(String.format("False equality of %s and %s", mediaType.toString(), acceptableMediaType.toString()),
-                    acceptableMediaType.equals(mediaType));
+            Assertions.assertFalse(acceptableMediaType.equals(mediaType),
+                    String.format("False equality of %s and %s", mediaType.toString(), acceptableMediaType.toString()));
         }
     }
 }
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/CommittingOutputStreamTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/CommittingOutputStreamTest.java
index 23f88b7..fc49c61 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/CommittingOutputStreamTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/CommittingOutputStreamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,11 +32,11 @@
 import org.glassfish.jersey.model.internal.CommonConfig;
 import org.glassfish.jersey.model.internal.ComponentBag;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * Test the {@link CommittingOutputStream}.
@@ -295,7 +295,7 @@
             if (i >= expectedSize + 1) {
                 break;
             } else {
-                assertFalse("committed already with byte #" + i, passed.b);
+                assertFalse(passed.b, "committed already with byte #" + i);
             }
         }
 
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/CookiesParserTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/CookiesParserTest.java
index 77ce25b..540d44b 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/CookiesParserTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/CookiesParserTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,7 +23,7 @@
 
 import org.glassfish.jersey.message.internal.CookiesParser;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/HeaderUtilsTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/HeaderUtilsTest.java
index bc370e4..3ac4782 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/HeaderUtilsTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/HeaderUtilsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,14 +32,14 @@
 import org.glassfish.jersey.message.internal.HeaderUtils;
 import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.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.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;
 
 /**
  * {@link HeaderUtils} unit tests.
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/InboundMessageContextTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/InboundMessageContextTest.java
index bd29bb4..9a3fdd7 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/InboundMessageContextTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/InboundMessageContextTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,11 +35,11 @@
 import org.glassfish.jersey.message.internal.InboundMessageContext;
 import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * {@link org.glassfish.jersey.message.internal.InboundMessageContext} test.
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/JerseyLinkTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/JerseyLinkTest.java
index 7e25df8..7110355 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/JerseyLinkTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/JerseyLinkTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,11 +26,11 @@
 
 import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Tests for LinkTest class.
@@ -55,12 +55,12 @@
         }
     }
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         RuntimeDelegate.setInstance(new TestRuntimeDelegate());
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         RuntimeDelegate.setInstance(null);
     }
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/LinkProviderTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/LinkProviderTest.java
index 0f8f3c7..7691af7 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/LinkProviderTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/LinkProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,10 +21,10 @@
 
 import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for LinkProvider class.
@@ -33,12 +33,12 @@
  */
 public class LinkProviderTest {
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         RuntimeDelegate.setInstance(new TestRuntimeDelegate());
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         RuntimeDelegate.setInstance(null);
     }
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/MatchingEntityTagTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/MatchingEntityTagTest.java
index 19ad5e1..36dcc23 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/MatchingEntityTagTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/MatchingEntityTagTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,14 +24,14 @@
 import org.glassfish.jersey.message.internal.HttpHeaderReader;
 import org.glassfish.jersey.message.internal.MatchingEntityTag;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-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;
 
 /**
  * {@link MatchingEntityTag} unit tests ported from Jersey 1.x.
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/MediaTypesTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/MediaTypesTest.java
index 12dcd81..c9531a1 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/MediaTypesTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/MediaTypesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,10 +27,10 @@
 import org.glassfish.jersey.message.internal.HttpHeaderReader;
 import org.glassfish.jersey.message.internal.MediaTypes;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * MediaTypes utility method tests.
@@ -43,16 +43,16 @@
     @Test
     public void testConvertToString() {
         final List<MediaType> emptyList = Collections.emptyList();
-        Assert.assertEquals("", MediaTypes.convertToString(emptyList));
+        Assertions.assertEquals("", MediaTypes.convertToString(emptyList));
 
 
-        Assert.assertEquals("\"text/plain\"", MediaTypes.convertToString(Collections.singleton(MediaType.TEXT_PLAIN_TYPE)));
+        Assertions.assertEquals("\"text/plain\"", MediaTypes.convertToString(Collections.singleton(MediaType.TEXT_PLAIN_TYPE)));
 
-        Assert.assertEquals("\"text/plain\", \"application/json\"",
+        Assertions.assertEquals("\"text/plain\", \"application/json\"",
                 MediaTypes.convertToString(Arrays.asList(MediaType.TEXT_PLAIN_TYPE,
                                                          MediaType.APPLICATION_JSON_TYPE)));
 
-        Assert.assertEquals("\"text/plain\", \"application/json\", \"text/html\"",
+        Assertions.assertEquals("\"text/plain\", \"application/json\", \"text/html\"",
                             MediaTypes.convertToString(Arrays.asList(MediaType.TEXT_PLAIN_TYPE,
                                                                      MediaType.APPLICATION_JSON_TYPE,
                                                                      MediaType.TEXT_HTML_TYPE)));
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundJaxrsResponseBuilderTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundJaxrsResponseBuilderTest.java
index f0257cd..2a026df 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundJaxrsResponseBuilderTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundJaxrsResponseBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.message.internal.OutboundMessageContext;
 import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * JaxrsResponseViewTest class.
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundJaxrsResponseTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundJaxrsResponseTest.java
index 3267ad2..d3c8621 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundJaxrsResponseTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundJaxrsResponseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,11 +29,11 @@
 import org.glassfish.jersey.message.internal.OutboundMessageContext;
 import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * OutboundJaxrsResponse unit tests.
@@ -96,7 +96,7 @@
         RuntimeDelegate.setInstance(new TestRuntimeDelegate());
     }
 
-    @Before
+    @BeforeEach
     public void setUp() {
         rb = new OutboundJaxrsResponse.Builder(new OutboundMessageContext((Configuration) null)).status(Response.Status.OK);
     }
@@ -110,7 +110,7 @@
         final OutboundJaxrsResponse r = OutboundJaxrsResponse.from(rb.build(), null);
         r.getContext().setStreamProvider(TEST_PROVIDER);
 
-        assertFalse("Buffer entity should return 'false' if no entity.", r.bufferEntity());
+        assertFalse(r.bufferEntity(), "Buffer entity should return 'false' if no entity.");
     }
 
     /**
@@ -121,7 +121,7 @@
         final OutboundJaxrsResponse r = OutboundJaxrsResponse.from(rb.entity(new Object()).build(), null);
         r.getContext().setStreamProvider(TEST_PROVIDER);
 
-        assertFalse("Buffer entity should return 'false' for non-stream entity.", r.bufferEntity());
+        assertFalse(r.bufferEntity(), "Buffer entity should return 'false' for non-stream entity.");
     }
 
     /**
@@ -133,10 +133,10 @@
         final OutboundJaxrsResponse r = OutboundJaxrsResponse.from(rb.entity(tis).build(), null);
         r.getContext().setStreamProvider(TEST_PROVIDER);
 
-        assertTrue("Buffer entity should return 'true' for stream entity.", r.bufferEntity());
-        assertTrue("Second call to buffer entity should return 'true' for stream entity.", r.bufferEntity()); // second call
-        assertTrue("Buffered stream has not been fully read.", tis.isRead);
-        assertTrue("Buffered stream has not been closed after buffering.", tis.isClosed);
+        assertTrue(r.bufferEntity(), "Buffer entity should return 'true' for stream entity.");
+        assertTrue(r.bufferEntity(), "Second call to buffer entity should return 'true' for stream entity."); // second call
+        assertTrue(tis.isRead, "Buffered stream has not been fully read.");
+        assertTrue(tis.isClosed, "Buffered stream has not been closed after buffering.");
     }
 
     /**
@@ -193,8 +193,8 @@
         }
         r.close(); // second call should pass
 
-        assertFalse("Unbuffered closed response stream entity should not be read.", tis.isRead);
-        assertTrue("Closed response stream entity should have been closed.", tis.isClosed);
+        assertFalse(tis.isRead, "Unbuffered closed response stream entity should not be read.");
+        assertTrue(tis.isClosed, "Closed response stream entity should have been closed.");
     }
 
     /**
@@ -245,8 +245,8 @@
         }
         r.close(); // second call should pass
 
-        assertFalse("Unbuffered closed response stream entity should not be read.", tis.isRead);
-        assertTrue("Closed response stream entity should have been closed.", tis.isClosed);
+        assertFalse(tis.isRead, "Unbuffered closed response stream entity should not be read.");
+        assertTrue(tis.isClosed, "Closed response stream entity should have been closed.");
     }
 
 }
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundMessageContextTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundMessageContextTest.java
index 2877594..5370780 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundMessageContextTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/OutboundMessageContextTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,15 +36,15 @@
 import org.glassfish.jersey.message.internal.OutboundMessageContext;
 import org.glassfish.jersey.tests.e2e.common.TestRuntimeDelegate;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-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.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * {@link OutboundMessageContext} test.
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/QualitySourceMediaTypeTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/QualitySourceMediaTypeTest.java
index 1841774..8e20a44 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/QualitySourceMediaTypeTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/message/internal/QualitySourceMediaTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,57 +16,46 @@
 
 package org.glassfish.jersey.tests.e2e.common.message.internal;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.core.MediaType;
 
 import org.glassfish.jersey.message.internal.QualitySourceMediaType;
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Quality source media type unit tests.
  *
  * @author Marek Potociar
  */
-@RunWith(Parameterized.class)
 public class QualitySourceMediaTypeTest {
-    @Parameterized.Parameters
     // expected result, media type, quality source media type
-    public static List<Object[]> testBeds() {
-        return Arrays.asList(new Object[][]{
-                {Boolean.TRUE, MediaType.APPLICATION_JSON_TYPE, new QualitySourceMediaType("application", "json")},
-                {Boolean.TRUE, MediaType.APPLICATION_JSON_TYPE, new QualitySourceMediaType("application", "json", 1000, null)},
-                {Boolean.FALSE, MediaType.APPLICATION_JSON_TYPE, new QualitySourceMediaType("application", "json", 500, null)},
-                {Boolean.FALSE, MediaType.APPLICATION_JSON_TYPE, new QualitySourceMediaType("application", "xml")}
-        });
+    public static Stream<Arguments> testBeds() {
+        return Stream.of(
+                Arguments.of(Boolean.TRUE, MediaType.APPLICATION_JSON_TYPE, new QualitySourceMediaType("application", "json")),
+                Arguments.of(Boolean.TRUE, MediaType.APPLICATION_JSON_TYPE,
+                        new QualitySourceMediaType("application", "json", 1000, null)),
+                Arguments.of(Boolean.FALSE, MediaType.APPLICATION_JSON_TYPE,
+                        new QualitySourceMediaType("application", "json", 500, null)),
+                Arguments.of(Boolean.FALSE, MediaType.APPLICATION_JSON_TYPE, new QualitySourceMediaType("application", "xml"))
+        );
     }
 
-    private final boolean expectEquality;
-    private final MediaType mediaType;
-    private final QualitySourceMediaType qsMediaType;
-
-    public QualitySourceMediaTypeTest(boolean expectEquality, MediaType mediaType, QualitySourceMediaType qsMediaType) {
-        this.expectEquality = expectEquality;
-        this.mediaType = mediaType;
-        this.qsMediaType = qsMediaType;
-    }
-
-    @Test
-    public void testEquals() throws Exception {
+    @ParameterizedTest
+    @MethodSource("testBeds")
+    public void testEquals(boolean expectEquality, MediaType mediaType, QualitySourceMediaType qsMediaType) throws Exception {
         if (expectEquality) {
-            Assert.assertEquals("Types not equal.", mediaType, qsMediaType);
-            Assert.assertEquals("Types not equal.", qsMediaType, mediaType);
-            Assert.assertEquals(
-                    String.format("Hash codes not equal for %s and %s.", mediaType.toString(), qsMediaType.toString()),
-                    mediaType.hashCode(), qsMediaType.hashCode());
+            Assertions.assertEquals(mediaType, qsMediaType, "Types not equal.");
+            Assertions.assertEquals(qsMediaType, mediaType, "Types not equal.");
+            Assertions.assertEquals(mediaType.hashCode(), qsMediaType.hashCode(),
+                    String.format("Hash codes not equal for %s and %s.", mediaType.toString(), qsMediaType.toString()));
         } else {
-            Assert.assertFalse(String.format("False equality of %s and %s", mediaType.toString(), qsMediaType.toString()),
-                    qsMediaType.equals(mediaType));
+            Assertions.assertFalse(qsMediaType.equals(mediaType),
+                    String.format("False equality of %s and %s", mediaType.toString(), qsMediaType.toString()));
         }
     }
 }
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/model/internal/CommonConfigTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/model/internal/CommonConfigTest.java
index e931912..fb1a982 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/model/internal/CommonConfigTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/model/internal/CommonConfigTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -52,21 +52,21 @@
 import org.glassfish.jersey.model.internal.ManagedObjectsFinalizer;
 import org.glassfish.jersey.model.internal.RankedComparator;
 
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.Matchers.lessThan;
-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.assertThat;
-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.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test cases for {@link javax.ws.rs.core.Configuration}.
@@ -77,7 +77,7 @@
 
     private CommonConfig config;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         config = new CommonConfig(null, ComponentBag.INCLUDE_ALL);
     }
@@ -442,9 +442,9 @@
         final ContractProvider contractProvider = config.getComponentBag().getModel(ComplexEmptyProvider.class);
         final Set<Class<?>> contracts = contractProvider.getContracts();
         assertEquals(2, contracts.size());
-        assertTrue(ReaderInterceptor.class + " is not registered.", contracts.contains(ReaderInterceptor.class));
-        assertTrue(ContainerRequestFilter.class + " is not registered.", contracts.contains(ContainerRequestFilter.class));
-        assertFalse(WriterInterceptor.class + " should not be registered.", contracts.contains(WriterInterceptor.class));
+        assertTrue(contracts.contains(ReaderInterceptor.class), ReaderInterceptor.class + " is not registered.");
+        assertTrue(contracts.contains(ContainerRequestFilter.class), ContainerRequestFilter.class + " is not registered.");
+        assertFalse(contracts.contains(WriterInterceptor.class), WriterInterceptor.class + " should not be registered.");
 
         assertTrue(config.getInstances().isEmpty());
         assertTrue(config.getClasses().contains(ComplexEmptyProvider.class));
@@ -466,9 +466,9 @@
         final ContractProvider contractProvider = config.getComponentBag().getModel(ComplexEmptyProvider.class);
         final Set<Class<?>> contracts = contractProvider.getContracts();
         assertEquals(2, contracts.size());
-        assertTrue(ReaderInterceptor.class + " is not registered.", contracts.contains(ReaderInterceptor.class));
-        assertTrue(ContainerRequestFilter.class + " is not registered.", contracts.contains(ContainerRequestFilter.class));
-        assertFalse(WriterInterceptor.class + " should not be registered.", contracts.contains(WriterInterceptor.class));
+        assertTrue(contracts.contains(ReaderInterceptor.class), ReaderInterceptor.class + " is not registered.");
+        assertTrue(contracts.contains(ContainerRequestFilter.class), ContainerRequestFilter.class + " is not registered.");
+        assertFalse(contracts.contains(WriterInterceptor.class), WriterInterceptor.class + " should not be registered.");
 
         assertTrue(config.getInstances().contains(complexEmptyProvider));
         assertTrue(config.getClasses().isEmpty());
@@ -689,7 +689,7 @@
             throws Exception {
 
         // Not null.
-        assertNotNull(testName + " - returned collection is null.", collection);
+        assertNotNull(collection, testName + " - returned collection is null.");
 
         // Immutability.
         try {
@@ -965,7 +965,7 @@
 
     @Test
     public void testFeatureInjections() throws Exception {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
 
         config.register(InjectIntoFeatureClass.class)
                 .register(new InjectIntoFeatureInstance())
@@ -985,7 +985,7 @@
     }
 
     @Test
-    @Ignore
+    @Disabled
     public void testFeatureInjectionsBindInFeature() throws Exception {
         config.register(new BindInjectMeInFeature());
         config.register(InjectIntoFeatureClass.class);
@@ -1078,9 +1078,9 @@
         config.configureMetaProviders(injectionManager, finalizer);
 
         Object[] classes = config.getComponentBag().getClasses(contractProvider -> true).toArray();
-        Assert.assertEquals(classes[0], ContractBinderOne.class);
-        Assert.assertEquals(classes[1], ContractBinderTwo.class);
-        Assert.assertEquals(classes[2], ContractBinder.class);
+        Assertions.assertEquals(classes[0], ContractBinderOne.class);
+        Assertions.assertEquals(classes[1], ContractBinderTwo.class);
+        Assertions.assertEquals(classes[2], ContractBinder.class);
     }
 
     @Test
@@ -1093,9 +1093,9 @@
         config.configureMetaProviders(injectionManager, finalizer);
 
         Object[] instances = config.getComponentBag().getInstances(contractProvider -> true).toArray();
-        Assert.assertEquals(instances[0], binders[2]);
-        Assert.assertEquals(instances[1], binders[1]);
-        Assert.assertEquals(instances[2], binders[0]);
+        Assertions.assertEquals(instances[0], binders[2]);
+        Assertions.assertEquals(instances[1], binders[1]);
+        Assertions.assertEquals(instances[2], binders[0]);
     }
 
     public static class ContractBinderOne extends ContractBinder {
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/process/internal/ExecutorProvidersTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/process/internal/ExecutorProvidersTest.java
index ccbc53d..f5b0b0a 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/process/internal/ExecutorProvidersTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/process/internal/ExecutorProvidersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,10 +40,10 @@
 import org.glassfish.jersey.spi.ThreadPoolExecutorProvider;
 
 import org.hamcrest.Matchers;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * ExecutorProviders unit tests.
@@ -205,7 +205,7 @@
     /**
      * Set-up the tests.
      */
-    @Before
+    @BeforeEach
     public void setup() {
         injectionManager = Injections.createInjectionManager(this);
         ExecutorProviders.registerExecutorBindings(injectionManager);
@@ -262,8 +262,8 @@
     }
 
     private void testShutDown(String name, ExecutorService executorService) throws InterruptedException {
-        assertTrue(name + " not shutdown", executorService.isShutdown());
-        assertTrue(name + " not terminated", executorService.isTerminated());
+        assertTrue(executorService.isShutdown(), name + " not shutdown");
+        assertTrue(executorService.isTerminated(), name + " not terminated");
     }
 
 }
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/process/internal/RequestScopeTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/process/internal/RequestScopeTest.java
index 36a23e9..7582894 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/process/internal/RequestScopeTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/process/internal/RequestScopeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,10 +25,10 @@
 import org.glassfish.hk2.api.ServiceHandle;
 import org.glassfish.hk2.utilities.AbstractActiveDescriptor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test of the {@link RequestScope request scope}.
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/uri/internal/JerseyUriBuilderTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/uri/internal/JerseyUriBuilderTest.java
index 06799b8..d9a391b 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/uri/internal/JerseyUriBuilderTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/uri/internal/JerseyUriBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,11 +37,11 @@
 import org.glassfish.jersey.uri.UriComponent;
 import org.glassfish.jersey.uri.internal.JerseyUriBuilder;
 
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Uri builder implementation test.
@@ -314,7 +314,7 @@
     }
 
     @Test
-    @Ignore
+    @Disabled
     public void failingTests() {
         testUri("a://#fragment"); // fails in JerseyUriBuilder
         testUri("a://?query");
@@ -413,107 +413,107 @@
         assertEquals(input, uri.toString());
     }
 
-    @org.junit.Test
+    @Test
     public void testOpaqueUri() {
         final URI uri = UriBuilder.fromUri("mailto:a@b").build();
-        Assert.assertEquals("mailto:a@b", uri.toString());
+        Assertions.assertEquals("mailto:a@b", uri.toString());
     }
 
     @Test
     public void testOpaqueUriReplaceSchemeSpecificPart() {
         final URI uri = UriBuilder.fromUri("mailto:a@b").schemeSpecificPart("c@d").build();
-        Assert.assertEquals("mailto:c@d", uri.toString());
+        Assertions.assertEquals("mailto:c@d", uri.toString());
     }
 
     @Test
     public void testOpaqueReplaceUri() {
         final URI uri = UriBuilder.fromUri("mailto:a@b").uri(URI.create("c@d")).build();
-        Assert.assertEquals("mailto:c@d", uri.toString());
+        Assertions.assertEquals("mailto:c@d", uri.toString());
     }
 
     @Test
     public void testReplaceScheme() {
         URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").scheme("https").build();
-        Assert.assertEquals("https://localhost:8080/a/b/c", uri.toString());
+        Assertions.assertEquals("https://localhost:8080/a/b/c", uri.toString());
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").scheme(null).build();
-        Assert.assertEquals("//localhost:8080/a/b/c", uri.toString());
+        Assertions.assertEquals("//localhost:8080/a/b/c", uri.toString());
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").scheme(null).host(null).build();
-        Assert.assertEquals("//:8080/a/b/c", uri.toString());
+        Assertions.assertEquals("//:8080/a/b/c", uri.toString());
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").scheme(null).host(null).port(-1).build();
-        Assert.assertEquals("/a/b/c", uri.toString());
+        Assertions.assertEquals("/a/b/c", uri.toString());
     }
 
     @Test
     public void testReplaceSchemeSpecificPart() {
         final URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").schemeSpecificPart("//localhost:8080/a/b/c/d").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/d"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/d"), uri);
     }
 
     @Test
     public void testNameAuthorityUri() {
         final URI uri = UriBuilder.fromUri("http://x_y/a/b/c").build();
-        Assert.assertEquals(URI.create("http://x_y/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://x_y/a/b/c"), uri);
     }
 
     @Test
     public void testReplaceNameAuthorityUriWithHost() {
         final URI uri = UriBuilder.fromUri("http://x_y.com/a/b/c").host("xy.com").build();
-        Assert.assertEquals(URI.create("http://xy.com/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://xy.com/a/b/c"), uri);
     }
 
     @Test
     public void testReplaceNameAuthorityUriWithSSP() {
         URI uri = UriBuilder.fromUri("http://x_y.com/a/b/c").schemeSpecificPart("//xy.com/a/b/c").build();
-        Assert.assertEquals(URI.create("http://xy.com/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://xy.com/a/b/c"), uri);
 
         uri = UriBuilder.fromUri("http://x_y.com/a/b/c").schemeSpecificPart("//v_w.com/a/b/c").build();
-        Assert.assertEquals(URI.create("http://v_w.com/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://v_w.com/a/b/c"), uri);
     }
 
     @Test
     public void testReplaceUserInfo() {
         final URI uri = UriBuilder.fromUri("http://bob@localhost:8080/a/b/c").userInfo("sue").build();
-        Assert.assertEquals(URI.create("http://sue@localhost:8080/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://sue@localhost:8080/a/b/c"), uri);
     }
 
     @Test
     public void testReplaceHost() {
         URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").host("a.com").build();
-        Assert.assertEquals(URI.create("http://a.com:8080/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://a.com:8080/a/b/c"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").host("[::FFFF:129.144.52.38]").build();
-        Assert.assertEquals(URI.create("http://[::FFFF:129.144.52.38]:8080/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://[::FFFF:129.144.52.38]:8080/a/b/c"), uri);
     }
 
     @Test
     public void testReplacePort() {
         URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").port(9090).build();
-        Assert.assertEquals(URI.create("http://localhost:9090/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:9090/a/b/c"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").port(-1).build();
-        Assert.assertEquals(URI.create("http://localhost/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://localhost/a/b/c"), uri);
     }
 
     @Test
     public void testReplacePath() {
         final URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").replacePath("/x/y/z").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/x/y/z"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/x/y/z"), uri);
     }
 
     @Test
     public void testReplacePathNull() {
         final URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").replacePath(null).build();
 
-        Assert.assertEquals(URI.create("http://localhost:8080"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080"), uri);
     }
 
     @Test
     public void testReplaceMatrix() {
         final URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c;a=x;b=y").replaceMatrix("x=a;y=b").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c;x=a;y=b"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c;x=a;y=b"), uri);
     }
 
     @Test
@@ -525,12 +525,12 @@
             final List<PathSegment> ps = UriComponent.decodePath(uri, true);
             final MultivaluedMap<String, String> mps = ps.get(2).getMatrixParameters();
             final List<String> a = mps.get("a");
-            Assert.assertEquals(2, a.size());
-            Assert.assertEquals("z", a.get(0));
-            Assert.assertEquals("zz", a.get(1));
+            Assertions.assertEquals(2, a.size());
+            Assertions.assertEquals("z", a.get(0));
+            Assertions.assertEquals("zz", a.get(1));
             final List<String> b = mps.get("b");
-            Assert.assertEquals(1, b.size());
-            Assert.assertEquals("y", b.get(0));
+            Assertions.assertEquals(1, b.size());
+            Assertions.assertEquals("y", b.get(0));
         }
 
         {
@@ -538,12 +538,12 @@
             final List<PathSegment> ps = UriComponent.decodePath(uri, true);
             final MultivaluedMap<String, String> mps = ps.get(2).getMatrixParameters();
             final List<String> a = mps.get("a");
-            Assert.assertEquals(2, a.size());
-            Assert.assertEquals("_z_", a.get(0));
-            Assert.assertEquals("_zz_", a.get(1));
+            Assertions.assertEquals(2, a.size());
+            Assertions.assertEquals("_z_", a.get(0));
+            Assertions.assertEquals("_zz_", a.get(1));
             final List<String> b = mps.get("b");
-            Assert.assertEquals(1, b.size());
-            Assert.assertEquals("y", b.get(0));
+            Assertions.assertEquals(1, b.size());
+            Assertions.assertEquals("y", b.get(0));
         }
 
         {
@@ -554,15 +554,15 @@
             final List<PathSegment> ps = UriComponent.decodePath(uri, true);
             final MultivaluedMap<String, String> mps = ps.get(2).getMatrixParameters();
             final List<String> a = mps.get("a");
-            Assert.assertEquals(2, a.size());
-            Assert.assertEquals("z", a.get(0));
-            Assert.assertEquals("zz", a.get(1));
+            Assertions.assertEquals(2, a.size());
+            Assertions.assertEquals("z", a.get(0));
+            Assertions.assertEquals("zz", a.get(1));
             final List<String> b = mps.get("b");
-            Assert.assertEquals(1, b.size());
-            Assert.assertEquals("y", b.get(0));
+            Assertions.assertEquals(1, b.size());
+            Assertions.assertEquals("y", b.get(0));
             final List<String> c = mps.get("c");
-            Assert.assertEquals(1, c.size());
-            Assert.assertEquals("c", c.get(0));
+            Assertions.assertEquals(1, c.size());
+            Assertions.assertEquals("c", c.get(0));
         }
 
         {
@@ -573,24 +573,24 @@
             MultivaluedMap<String, String> mps = ps.get(0).getMatrixParameters();
 
             List<String> w = mps.get("w");
-            Assert.assertEquals(1, w.size());
-            Assert.assertEquals("123", w.get(0));
+            Assertions.assertEquals(1, w.size());
+            Assertions.assertEquals("123", w.get(0));
 
             w = mps.get("q");
-            Assert.assertEquals(1, w.size());
-            Assert.assertEquals("15", w.get(0));
+            Assertions.assertEquals(1, w.size());
+            Assertions.assertEquals("15", w.get(0));
 
             mps = ps.get(2).getMatrixParameters();
             final List<String> a = mps.get("a");
-            Assert.assertEquals(2, a.size());
-            Assert.assertEquals("z", a.get(0));
-            Assert.assertEquals("zz", a.get(1));
+            Assertions.assertEquals(2, a.size());
+            Assertions.assertEquals("z", a.get(0));
+            Assertions.assertEquals("zz", a.get(1));
             final List<String> b = mps.get("b");
-            Assert.assertEquals(1, b.size());
-            Assert.assertEquals("y", b.get(0));
+            Assertions.assertEquals(1, b.size());
+            Assertions.assertEquals("y", b.get(0));
             final List<String> c = mps.get("c");
-            Assert.assertEquals(1, c.size());
-            Assert.assertEquals("c", c.get(0));
+            Assertions.assertEquals(1, c.size());
+            Assertions.assertEquals("c", c.get(0));
         }
     }
 
@@ -602,9 +602,9 @@
             final List<PathSegment> ps = UriComponent.decodePath(uri, true);
             final MultivaluedMap<String, String> mps = ps.get(2).getMatrixParameters();
             final List<String> a = mps.get("a");
-            Assert.assertEquals(2, a.size());
-            Assert.assertEquals("z", a.get(0));
-            Assert.assertEquals("zz", a.get(1));
+            Assertions.assertEquals(2, a.size());
+            Assertions.assertEquals("z", a.get(0));
+            Assertions.assertEquals("zz", a.get(1));
         }
     }
 
@@ -614,7 +614,7 @@
         ubu.replaceMatrixParam("limit", 100);
 
         final URI uri = ubu.build();
-        Assert.assertEquals(URI.create("http://localhost/;limit=100;sql=select+*+from+users"), uri);
+        Assertions.assertEquals(URI.create("http://localhost/;limit=100;sql=select+*+from+users"), uri);
     }
 
     @Test
@@ -623,7 +623,7 @@
         first = first.path("/child");
         first = first.replaceMatrixParam("example", "another");
 
-        Assert.assertEquals("http://www.com/;example=one;example=two/child;example=another", first.build().toString());
+        Assertions.assertEquals("http://www.com/;example=one;example=two/child;example=another", first.build().toString());
     }
 
     @Test
@@ -632,23 +632,23 @@
         first = first.path("/child");
         first = first.replaceMatrixParam("other", "another");
 
-        Assert.assertEquals("http://www.com/;example=one;example=two/child;other=another", first.build().toString());
+        Assertions.assertEquals("http://www.com/;example=one;example=two/child;other=another", first.build().toString());
     }
 
     @Test
     public void testReplaceQuery() {
         final URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c?a=x&b=y").replaceQuery("x=a&y=b").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c?x=a&y=b"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c?x=a&y=b"), uri);
     }
 
     @Test
     public void testBuildEncodedQuery() {
         URI u = UriBuilder.fromPath("").queryParam("y", "1 %2B 2").build();
-        Assert.assertEquals(URI.create("?y=1+%2B+2"), u);
+        Assertions.assertEquals(URI.create("?y=1+%2B+2"), u);
 
         // Issue 216
         u = UriBuilder.fromPath("http://localhost:8080").path("/{x}/{y}/{z}/{x}").buildFromEncoded("%xy", " ", "=");
-        Assert.assertEquals(URI.create("http://localhost:8080/%25xy/%20/=/%25xy"), u);
+        Assertions.assertEquals(URI.create("http://localhost:8080/%25xy/%20/=/%25xy"), u);
     }
 
     @Test
@@ -661,15 +661,15 @@
 
             final MultivaluedMap<String, String> qps = UriComponent.decodeQuery(uri, true);
             final List<String> a = qps.get("a");
-            Assert.assertEquals(2, a.size());
-            Assert.assertEquals("z", a.get(0));
-            Assert.assertEquals("zz", a.get(1));
+            Assertions.assertEquals(2, a.size());
+            Assertions.assertEquals("z", a.get(0));
+            Assertions.assertEquals("zz", a.get(1));
             final List<String> b = qps.get("b");
-            Assert.assertEquals(1, b.size());
-            Assert.assertEquals("y", b.get(0));
+            Assertions.assertEquals(1, b.size());
+            Assertions.assertEquals("y", b.get(0));
             final List<String> c = qps.get("c");
-            Assert.assertEquals(1, c.size());
-            Assert.assertEquals("c", c.get(0));
+            Assertions.assertEquals(1, c.size());
+            Assertions.assertEquals("c", c.get(0));
         }
 
         {
@@ -677,15 +677,15 @@
 
             final MultivaluedMap<String, String> qps = UriComponent.decodeQuery(uri, true);
             final List<String> a = qps.get("a");
-            Assert.assertEquals(2, a.size());
-            Assert.assertEquals("_z_", a.get(0));
-            Assert.assertEquals("_zz_", a.get(1));
+            Assertions.assertEquals(2, a.size());
+            Assertions.assertEquals("_z_", a.get(0));
+            Assertions.assertEquals("_zz_", a.get(1));
             final List<String> b = qps.get("b");
-            Assert.assertEquals(1, b.size());
-            Assert.assertEquals("y", b.get(0));
+            Assertions.assertEquals(1, b.size());
+            Assertions.assertEquals("y", b.get(0));
             final List<String> c = qps.get("c");
-            Assert.assertEquals(1, c.size());
-            Assert.assertEquals("c", c.get(0));
+            Assertions.assertEquals(1, c.size());
+            Assertions.assertEquals("c", c.get(0));
         }
 
         // issue 257 - param is removed after setting it to null
@@ -693,10 +693,10 @@
             final URI u1 = UriBuilder.fromPath("http://localhost:8080").queryParam("x", "10")
                     .replaceQueryParam("x", (Object[]) null)
                     .build();
-            Assert.assertTrue(u1.toString().equals("http://localhost:8080"));
+            Assertions.assertTrue(u1.toString().equals("http://localhost:8080"));
 
             final URI u2 = UriBuilder.fromPath("http://localhost:8080").queryParam("x", "10").replaceQueryParam("x").build();
-            Assert.assertTrue(u2.toString().equals("http://localhost:8080"));
+            Assertions.assertTrue(u2.toString().equals("http://localhost:8080"));
         }
 
         // issue 257 - IllegalArgumentException
@@ -709,7 +709,7 @@
                 caught = true;
             }
 
-            Assert.assertTrue(caught);
+            Assertions.assertTrue(caught);
         }
 
     }
@@ -724,12 +724,12 @@
 
             final MultivaluedMap<String, String> qps = UriComponent.decodeQuery(uri, true);
             final List<String> a = qps.get("a");
-            Assert.assertEquals(2, a.size());
-            Assert.assertEquals("z", a.get(0));
-            Assert.assertEquals("zz", a.get(1));
+            Assertions.assertEquals(2, a.size());
+            Assertions.assertEquals("z", a.get(0));
+            Assertions.assertEquals("zz", a.get(1));
             final List<String> c = qps.get("c");
-            Assert.assertEquals(1, c.size());
-            Assert.assertEquals("c", c.get(0));
+            Assertions.assertEquals(1, c.size());
+            Assertions.assertEquals("c", c.get(0));
         }
     }
 
@@ -739,7 +739,7 @@
         ubu.replaceQueryParam("limit", 100);
 
         final URI uri = ubu.build();
-        Assert.assertEquals(URI.create("http://localhost/?limit=100&sql=select+%2A+from+users"), uri);
+        Assertions.assertEquals(URI.create("http://localhost/?limit=100&sql=select+%2A+from+users"), uri);
     }
 
     @Test
@@ -748,7 +748,7 @@
         ubu.replaceQueryParam("limit", 100);
 
         final URI uri = ubu.build();
-        Assert.assertEquals(URI.create("http://localhost/?limit=100&sql=select+%2A+from+users"), uri);
+        Assertions.assertEquals(URI.create("http://localhost/?limit=100&sql=select+%2A+from+users"), uri);
     }
 
     @Test
@@ -757,7 +757,7 @@
         ubu.replaceQueryParam("limit", 100);
 
         final URI uri = ubu.build();
-        Assert.assertEquals(URI.create("http://localhost/?limit=100&sql=select+%2A+from+users"), uri);
+        Assertions.assertEquals(URI.create("http://localhost/?limit=100&sql=select+%2A+from+users"), uri);
     }
 
     @Test
@@ -766,13 +766,13 @@
         ubu.replaceQueryParam("limit", 100);
 
         final URI uri = ubu.build();
-        Assert.assertEquals(URI.create("http://localhost/?limit=100&sql=select+%2A+from+users"), uri);
+        Assertions.assertEquals(URI.create("http://localhost/?limit=100&sql=select+%2A+from+users"), uri);
     }
 
     @Test
     public void testReplaceFragment() {
         final URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c?a=x&b=y#frag").fragment("ment").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c?a=x&b=y#ment"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c?a=x&b=y#ment"), uri);
     }
 
     @Test
@@ -780,22 +780,22 @@
         final URI u = URI.create("http://bob@localhost:8080/a/b/c?a=x&b=y#frag");
 
         URI uri = UriBuilder.fromUri(u).uri(URI.create("https://bob@localhost:8080")).build();
-        Assert.assertEquals(URI.create("https://bob@localhost:8080/a/b/c?a=x&b=y#frag"), uri);
+        Assertions.assertEquals(URI.create("https://bob@localhost:8080/a/b/c?a=x&b=y#frag"), uri);
 
         uri = UriBuilder.fromUri(u).uri(URI.create("https://sue@localhost:8080")).build();
-        Assert.assertEquals(URI.create("https://sue@localhost:8080/a/b/c?a=x&b=y#frag"), uri);
+        Assertions.assertEquals(URI.create("https://sue@localhost:8080/a/b/c?a=x&b=y#frag"), uri);
 
         uri = UriBuilder.fromUri(u).uri(URI.create("https://sue@localhost:9090")).build();
-        Assert.assertEquals(URI.create("https://sue@localhost:9090/a/b/c?a=x&b=y#frag"), uri);
+        Assertions.assertEquals(URI.create("https://sue@localhost:9090/a/b/c?a=x&b=y#frag"), uri);
 
         uri = UriBuilder.fromUri(u).uri(URI.create("/x/y/z")).build();
-        Assert.assertEquals(URI.create("http://bob@localhost:8080/x/y/z?a=x&b=y#frag"), uri);
+        Assertions.assertEquals(URI.create("http://bob@localhost:8080/x/y/z?a=x&b=y#frag"), uri);
 
         uri = UriBuilder.fromUri(u).uri(URI.create("?x=a&b=y")).build();
-        Assert.assertEquals(URI.create("http://bob@localhost:8080/a/b/c?x=a&b=y#frag"), uri);
+        Assertions.assertEquals(URI.create("http://bob@localhost:8080/a/b/c?x=a&b=y#frag"), uri);
 
         uri = UriBuilder.fromUri(u).uri(URI.create("#ment")).build();
-        Assert.assertEquals(URI.create("http://bob@localhost:8080/a/b/c?a=x&b=y#ment"), uri);
+        Assertions.assertEquals(URI.create("http://bob@localhost:8080/a/b/c?a=x&b=y#ment"), uri);
     }
 
     @Test
@@ -803,46 +803,46 @@
         final URI u = URI.create("http://bob@localhost:8080/a/b/c?a=x&b=y#frag");
 
         final URI uri = UriBuilder.fromUri(u).schemeSpecificPart("//sue@remotehost:9090/x/y/z?x=a&y=b").build();
-        Assert.assertEquals(URI.create("http://sue@remotehost:9090/x/y/z?x=a&y=b#frag"), uri);
+        Assertions.assertEquals(URI.create("http://sue@remotehost:9090/x/y/z?x=a&y=b#frag"), uri);
     }
 
     @Test
     public void testAppendPath() {
         URI uri = UriBuilder.fromUri("http://localhost:8080").path("a/b/c").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/").path("a/b/c").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080").path("/a/b/c").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c/").path("/").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c/").path("/x/y/z").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").path("/x/y/z").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").path("x/y/z").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").path("/").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").path("").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a%20/b%20/c%20").path("/x /y /z ").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a%20/b%20/c%20/x%20/y%20/z%20"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a%20/b%20/c%20/x%20/y%20/z%20"), uri);
     }
 
     @Test
     public void testAppendSegment() {
         final URI uri = UriBuilder.fromUri("http://localhost:8080").segment("a/b/c;x").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a%2Fb%2Fc%3Bx"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a%2Fb%2Fc%3Bx"), uri);
     }
 
     @Test
@@ -889,65 +889,65 @@
     @Test
     public void testRelativeFromUri() {
         URI uri = UriBuilder.fromUri("a/b/c").build();
-        Assert.assertEquals(URI.create("a/b/c"), uri);
+        Assertions.assertEquals(URI.create("a/b/c"), uri);
 
         uri = UriBuilder.fromUri("a/b/c").path("d").build();
-        Assert.assertEquals(URI.create("a/b/c/d"), uri);
+        Assertions.assertEquals(URI.create("a/b/c/d"), uri);
 
         uri = UriBuilder.fromUri("a/b/c/").path("d").build();
-        Assert.assertEquals(URI.create("a/b/c/d"), uri);
+        Assertions.assertEquals(URI.create("a/b/c/d"), uri);
 
         uri = UriBuilder.fromUri("a/b/c").path("/d").build();
-        Assert.assertEquals(URI.create("a/b/c/d"), uri);
+        Assertions.assertEquals(URI.create("a/b/c/d"), uri);
 
         uri = UriBuilder.fromUri("a/b/c/").path("/d").build();
-        Assert.assertEquals(URI.create("a/b/c/d"), uri);
+        Assertions.assertEquals(URI.create("a/b/c/d"), uri);
 
         uri = UriBuilder.fromUri("").queryParam("x", "y").build();
-        Assert.assertEquals(URI.create("?x=y"), uri);
+        Assertions.assertEquals(URI.create("?x=y"), uri);
 
     }
 
     @Test
     public void testRelativefromPath() {
         URI uri = UriBuilder.fromPath("a/b/c").build();
-        Assert.assertEquals(URI.create("a/b/c"), uri);
+        Assertions.assertEquals(URI.create("a/b/c"), uri);
 
         uri = UriBuilder.fromPath("a/b/c").path("d").build();
-        Assert.assertEquals(URI.create("a/b/c/d"), uri);
+        Assertions.assertEquals(URI.create("a/b/c/d"), uri);
 
         uri = UriBuilder.fromPath("a/b/c/").path("d").build();
-        Assert.assertEquals(URI.create("a/b/c/d"), uri);
+        Assertions.assertEquals(URI.create("a/b/c/d"), uri);
 
         uri = UriBuilder.fromPath("a/b/c").path("/d").build();
-        Assert.assertEquals(URI.create("a/b/c/d"), uri);
+        Assertions.assertEquals(URI.create("a/b/c/d"), uri);
 
         uri = UriBuilder.fromPath("a/b/c/").path("/d").build();
-        Assert.assertEquals(URI.create("a/b/c/d"), uri);
+        Assertions.assertEquals(URI.create("a/b/c/d"), uri);
 
         uri = UriBuilder.fromPath("").queryParam("x", "y").build();
-        Assert.assertEquals(URI.create("?x=y"), uri);
+        Assertions.assertEquals(URI.create("?x=y"), uri);
     }
 
     @Test
     public void testAppendQueryParams() throws URISyntaxException {
         URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c?a=x&b=y").queryParam("c", "z").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c?a=x&b=y&c=z"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c?a=x&b=y&c=z"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c?a=x&b=y").queryParam("c= ", "z= ").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c?a=x&b=y&c%3D+=z%3D+"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c?a=x&b=y&c%3D+=z%3D+"), uri);
 
         uri = UriBuilder.fromUri(new URI("http://localhost:8080/")).queryParam("c", "z").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/?c=z"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/?c=z"), uri);
 
         uri = UriBuilder.fromUri(new URI("http://localhost:8080")).queryParam("c", "z").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/?c=z"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/?c=z"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/").queryParam("c", "z").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/?c=z"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/?c=z"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080").queryParam("c", "z").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/?c=z"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/?c=z"), uri);
 
         try {
             UriBuilder.fromPath("http://localhost:8080").queryParam("name", "x", null).build();
@@ -960,10 +960,10 @@
     @Test
     public void testAppendMatrixParams() {
         URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c;a=x;b=y").matrixParam("c", "z").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c;a=x;b=y;c=z"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c;a=x;b=y;c=z"), uri);
 
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c;a=x;b=y").matrixParam("c=/ ;", "z=/ ;").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c;a=x;b=y;c%3D%2F%20%3B=z%3D%2F%20%3B"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c;a=x;b=y;c%3D%2F%20%3B=z%3D%2F%20%3B"), uri);
     }
 
     @Test
@@ -971,7 +971,7 @@
         final URI uri = UriBuilder.fromUri("http://localhost:8080/").path(
                 "a").matrixParam("x", "foo").matrixParam("y", "bar").path("b").matrixParam("x", "foo").matrixParam("y", "bar")
                 .build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a;x=foo;y=bar/b;x=foo;y=bar"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a;x=foo;y=bar/b;x=foo;y=bar"), uri);
     }
 
     @Path("resource")
@@ -992,15 +992,15 @@
     @Test
     public void testResourceAppendPath() throws NoSuchMethodException {
         URI ub = UriBuilder.fromUri("http://localhost:8080/base").path(Resource.class).build();
-        Assert.assertEquals(URI.create("http://localhost:8080/base/resource"), ub);
+        Assertions.assertEquals(URI.create("http://localhost:8080/base/resource"), ub);
 
         ub = UriBuilder.fromUri("http://localhost:8080/base").path(Resource.class, "get").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/base/method"), ub);
+        Assertions.assertEquals(URI.create("http://localhost:8080/base/method"), ub);
 
         final Method get = Resource.class.getMethod("get");
         final Method locator = Resource.class.getMethod("locator");
         ub = UriBuilder.fromUri("http://localhost:8080/base").path(get).path(locator).build();
-        Assert.assertEquals(URI.create("http://localhost:8080/base/method/locator"), ub);
+        Assertions.assertEquals(URI.create("http://localhost:8080/base/method/locator"), ub);
     }
 
     @Path("resource/{id}")
@@ -1021,15 +1021,15 @@
     @Test
     public void testResourceWithTemplateAppendPath() throws NoSuchMethodException {
         URI ub = UriBuilder.fromUri("http://localhost:8080/base").path(ResourceWithTemplate.class).build("foo");
-        Assert.assertEquals(URI.create("http://localhost:8080/base/resource/foo"), ub);
+        Assertions.assertEquals(URI.create("http://localhost:8080/base/resource/foo"), ub);
 
         ub = UriBuilder.fromUri("http://localhost:8080/base").path(ResourceWithTemplate.class, "get").build("foo");
-        Assert.assertEquals(URI.create("http://localhost:8080/base/method/foo"), ub);
+        Assertions.assertEquals(URI.create("http://localhost:8080/base/method/foo"), ub);
 
         final Method get = ResourceWithTemplate.class.getMethod("get");
         final Method locator = ResourceWithTemplate.class.getMethod("locator");
         ub = UriBuilder.fromUri("http://localhost:8080/base").path(get).path(locator).build("foo", "bar");
-        Assert.assertEquals(URI.create("http://localhost:8080/base/method/foo/locator/bar"), ub);
+        Assertions.assertEquals(URI.create("http://localhost:8080/base/method/foo/locator/bar"), ub);
     }
 
     @Path("resource/{id: .+}")
@@ -1050,15 +1050,15 @@
     @Test
     public void testResourceWithTemplateRegexAppendPath() throws NoSuchMethodException {
         URI ub = UriBuilder.fromUri("http://localhost:8080/base").path(ResourceWithTemplateRegex.class).build("foo");
-        Assert.assertEquals(URI.create("http://localhost:8080/base/resource/foo"), ub);
+        Assertions.assertEquals(URI.create("http://localhost:8080/base/resource/foo"), ub);
 
         ub = UriBuilder.fromUri("http://localhost:8080/base").path(ResourceWithTemplateRegex.class, "get").build("foo");
-        Assert.assertEquals(URI.create("http://localhost:8080/base/method/foo"), ub);
+        Assertions.assertEquals(URI.create("http://localhost:8080/base/method/foo"), ub);
 
         final Method get = ResourceWithTemplateRegex.class.getMethod("get");
         final Method locator = ResourceWithTemplateRegex.class.getMethod("locator");
         ub = UriBuilder.fromUri("http://localhost:8080/base").path(get).path(locator).build("foo", "bar");
-        Assert.assertEquals(URI.create("http://localhost:8080/base/method/foo/locator/bar"), ub);
+        Assertions.assertEquals(URI.create("http://localhost:8080/base/method/foo/locator/bar"), ub);
     }
 
     interface GenericInterface<T, U> {
@@ -1081,20 +1081,20 @@
     public void testResourceWithGenericInterfaceAppendPath() {
         final URI ub = UriBuilder.fromUri("http://localhost:8080/base").path(ResourceWithGenericInterface.class, "find")
                 .build("foo");
-        Assert.assertEquals(URI.create("http://localhost:8080/base/foo"), ub);
+        Assertions.assertEquals(URI.create("http://localhost:8080/base/foo"), ub);
     }
 
     @Test
     public void testBuildTemplates() {
         URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").build("x", "y", "z");
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x"), uri);
 
         final Map<String, Object> m = new HashMap<String, Object>();
         m.put("foo", "x");
         m.put("bar", "y");
         m.put("baz", "z");
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").buildFromMap(m);
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x"), uri);
     }
 
     @Test
@@ -1107,20 +1107,20 @@
         final URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").resolveTemplates(m)
                 .build();
 
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x"), uri);
     }
 
     @Test
     public void testBuildTemplatesWithNameAuthority() {
         URI uri = UriBuilder.fromUri("http://x_y.com:8080/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").build("x", "y", "z");
-        Assert.assertEquals(URI.create("http://x_y.com:8080/a/b/c/x/y/z/x"), uri);
+        Assertions.assertEquals(URI.create("http://x_y.com:8080/a/b/c/x/y/z/x"), uri);
 
         final Map<String, Object> m = new HashMap<String, Object>();
         m.put("foo", "x");
         m.put("bar", "y");
         m.put("baz", "z");
         uri = UriBuilder.fromUri("http://x_y.com:8080/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").buildFromMap(m);
-        Assert.assertEquals(URI.create("http://x_y.com:8080/a/b/c/x/y/z/x"), uri);
+        Assertions.assertEquals(URI.create("http://x_y.com:8080/a/b/c/x/y/z/x"), uri);
     }
 
     @Test
@@ -1131,7 +1131,7 @@
         m.put("baz", "z");
         final URI uri = UriBuilder.fromUri("http://x_y.com:8080/a/b/c")
                 .path("/{foo}/{bar}/{baz}/{foo}").buildFromMap(m);
-        Assert.assertEquals(URI.create("http://x_y.com:8080/a/b/c/x/y/z/x"), uri);
+        Assertions.assertEquals(URI.create("http://x_y.com:8080/a/b/c/x/y/z/x"), uri);
     }
 
     @Test
@@ -1152,7 +1152,7 @@
             caught = true;
         }
 
-        Assert.assertTrue(caught);
+        Assertions.assertTrue(caught);
     }
 
     @Test
@@ -1173,29 +1173,29 @@
             caught = true;
         }
 
-        Assert.assertTrue(caught);
+        Assertions.assertTrue(caught);
     }
 
     @Test
     public void testBuildQueryTemplates() {
         URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").queryParam("a", "{b}").build("=+&%xx%20");
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%2520"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%2520"), uri);
 
         final Map<String, Object> m = new HashMap<String, Object>();
         m.put("b", "=+&%xx%20");
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").queryParam("a", "{b}").buildFromMap(m);
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%2520"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%2520"), uri);
     }
 
     @Test
     public void testBuildFromEncodedQueryTemplates() {
         URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").queryParam("a", "{b}").buildFromEncoded("=+&%xx%20");
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%20"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%20"), uri);
 
         final Map<String, Object> m = new HashMap<String, Object>();
         m.put("b", "=+&%xx%20");
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").queryParam("a", "{b}").buildFromEncodedMap(m);
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%20"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%20"), uri);
     }
 
     @Test
@@ -1207,19 +1207,19 @@
     public void testResolveTemplateFromEncodedQueryTemplates() {
         URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").queryParam("a", "{b}")
                 .resolveTemplateFromEncoded("b", "=+&%xx%20").build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%20"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%20"), uri);
 
         final Map<String, Object> m = new HashMap<String, Object>();
         m.put("b", "=+&%xx%20");
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").queryParam("a", "{b}").resolveTemplatesFromEncoded(m).build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%20"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c?a=%3D%2B%26%25xx%20"), uri);
     }
 
     @Test
     public void testBuildFragmentTemplates() {
         URI uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").fragment("{foo}")
                 .build("x", "y", "z");
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x#x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x#x"), uri);
 
         final Map<String, Object> m = new HashMap<String, Object>();
         m.put("foo", "x");
@@ -1227,7 +1227,7 @@
         m.put("baz", "z");
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").fragment("{foo}")
                 .buildFromMap(m);
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x#x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x#x"), uri);
     }
 
     @Test
@@ -1236,7 +1236,7 @@
                 .resolveTemplate("foo", "x").resolveTemplate("bar", "y")
                 .resolveTemplate("baz", "z").build();
 
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x#x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x#x"), uri);
 
         final Map<String, Object> m = new HashMap<String, Object>();
         m.put("foo", "x");
@@ -1244,34 +1244,34 @@
         m.put("baz", "z");
         uri = UriBuilder.fromUri("http://localhost:8080/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").fragment("{foo}")
                 .resolveTemplates(m).build();
-        Assert.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x#x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/a/b/c/x/y/z/x#x"), uri);
     }
 
     @Test
     public void testTemplatesDefaultPort() {
         URI uri = UriBuilder.fromUri("http://localhost/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").build("x", "y", "z");
-        Assert.assertEquals(URI.create("http://localhost/a/b/c/x/y/z/x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost/a/b/c/x/y/z/x"), uri);
 
         final Map<String, Object> m = new HashMap<String, Object>();
         m.put("foo", "x");
         m.put("bar", "y");
         m.put("baz", "z");
         uri = UriBuilder.fromUri("http://localhost/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").buildFromMap(m);
-        Assert.assertEquals(URI.create("http://localhost/a/b/c/x/y/z/x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost/a/b/c/x/y/z/x"), uri);
     }
 
     @Test
     public void testResolveTemplatesDefaultPort() {
         URI uri = UriBuilder.fromUri("http://localhost/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").resolveTemplate("foo", "x")
                 .resolveTemplate("bar", "y").resolveTemplate("baz" + "", "z").build();
-        Assert.assertEquals(URI.create("http://localhost/a/b/c/x/y/z/x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost/a/b/c/x/y/z/x"), uri);
 
         final Map<String, Object> m = new HashMap<String, Object>();
         m.put("foo", "x");
         m.put("bar", "y");
         m.put("baz", "z");
         uri = UriBuilder.fromUri("http://localhost/a/b/c").path("/{foo}/{bar}/{baz}/{foo}").resolveTemplates(m).build();
-        Assert.assertEquals(URI.create("http://localhost/a/b/c/x/y/z/x"), uri);
+        Assertions.assertEquals(URI.create("http://localhost/a/b/c/x/y/z/x"), uri);
     }
 
     @Test
@@ -1280,8 +1280,8 @@
         final URI full = ub.clone().path("b").build();
         final URI base = ub.build();
 
-        Assert.assertEquals(URI.create("http://user@localhost:8080/a?query#fragment"), base);
-        Assert.assertEquals(URI.create("http://user@localhost:8080/a/b?query#fragment"), full);
+        Assertions.assertEquals(URI.create("http://user@localhost:8080/a?query#fragment"), base);
+        Assertions.assertEquals(URI.create("http://user@localhost:8080/a/b?query#fragment"), full);
     }
 
     @Test
@@ -1292,7 +1292,7 @@
         } catch (final IllegalArgumentException e) {
             caught = true;
         }
-        Assert.assertTrue(caught);
+        Assertions.assertTrue(caught);
 
         caught = false;
         try {
@@ -1300,7 +1300,7 @@
         } catch (final IllegalArgumentException e) {
             caught = true;
         }
-        Assert.assertTrue(caught);
+        Assertions.assertTrue(caught);
 
         caught = false;
         try {
@@ -1308,7 +1308,7 @@
         } catch (final IllegalArgumentException e) {
             caught = true;
         }
-        Assert.assertTrue(caught);
+        Assertions.assertTrue(caught);
     }
 
     @Test
@@ -1334,7 +1334,7 @@
         } catch (final IllegalArgumentException e) {
             caught = true;
         }
-        Assert.assertTrue(caught);
+        Assertions.assertTrue(caught);
     }
 
     @Test
@@ -1345,7 +1345,7 @@
         } catch (final IllegalArgumentException e) {
             caught = true;
         }
-        Assert.assertTrue(caught);
+        Assertions.assertTrue(caught);
     }
 
     @Test
@@ -1353,16 +1353,16 @@
         URI uri;
 
         uri = new JerseyUriBuilder().uri("http://localhost").port(8080).build();
-        Assert.assertEquals(URI.create("http://localhost:8080"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080"), uri);
 
         uri = new JerseyUriBuilder().uri(new URI("http://localhost")).port(8080).build();
-        Assert.assertEquals(URI.create("http://localhost:8080"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080"), uri);
 
         uri = new JerseyUriBuilder().uri("http://localhost/").port(8080).build();
-        Assert.assertEquals(URI.create("http://localhost:8080/"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/"), uri);
 
         uri = new JerseyUriBuilder().uri(new URI("http://localhost/")).port(8080).build();
-        Assert.assertEquals(URI.create("http://localhost:8080/"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/"), uri);
     }
 
     @Test
@@ -1373,13 +1373,13 @@
         } catch (final IllegalArgumentException e) {
             caught = true;
         }
-        Assert.assertTrue(caught);
+        Assertions.assertTrue(caught);
 
         URI uri = UriBuilder.fromPath("").host("abc").build();
-        Assert.assertEquals(URI.create("//abc"), uri);
+        Assertions.assertEquals(URI.create("//abc"), uri);
 
         uri = UriBuilder.fromPath("").host("abc").host(null).build();
-        Assert.assertEquals(URI.create(""), uri);
+        Assertions.assertEquals(URI.create(""), uri);
     }
 
     /**
@@ -1392,7 +1392,7 @@
     public void testEncodeTemplateNames() {
         final URI uri = URI.create(UriComponent.encodeTemplateNames(UriBuilder.fromPath("http://localhost:8080").path(
                 "/{a}/{b}").replaceQuery("q={c}").toTemplate()));
-        Assert.assertEquals(URI.create("http://localhost:8080/%7Ba%7D/%7Bb%7D?q=%7Bc%7D"), uri);
+        Assertions.assertEquals(URI.create("http://localhost:8080/%7Ba%7D/%7Bb%7D?q=%7Bc%7D"), uri);
     }
 
     @Test
@@ -1405,7 +1405,7 @@
         m.put("a", "ignored-a");
         m.put("b", "param-b");
         m.put("q", "ignored-q");
-        Assert.assertEquals(URI.create("http://localhost:8080/param-a/param-b?query=param-q"), uriBuilder.buildFromMap(m));
+        Assertions.assertEquals(URI.create("http://localhost:8080/param-a/param-b?query=param-q"), uriBuilder.buildFromMap(m));
     }
 
     @Test
@@ -1419,7 +1419,7 @@
         m.put("a", "ignored-a");
         m.put("b", "param-b/aaa");
         m.put("q", "ignored-q");
-        Assert.assertEquals("http://localhost:8080/x/y/z%3F%20/param-b/aaa/paramc1%2Fparamc2?query=q%3F%20%26",
+        Assertions.assertEquals("http://localhost:8080/x/y/z%3F%20/param-b/aaa/paramc1%2Fparamc2?query=q%3F%20%26",
                 uriBuilder.buildFromEncodedMap(m).toString());
     }
 
@@ -1434,7 +1434,7 @@
         m.put("a", "ignored-a");
         m.put("b", "param-b/aaa");
         m.put("q", "ignored-q");
-        Assert.assertEquals("http://localhost:8080/x%2Fy%2Fz%253F%2520/param-b%2Faaa/paramc1%2Fparamc2?query=q%3F%2520%2526",
+        Assertions.assertEquals("http://localhost:8080/x%2Fy%2Fz%253F%2520/param-b%2Faaa/paramc1%2Fparamc2?query=q%3F%2520%2526",
                 uriBuilder.buildFromMap(m).toString());
     }
 
@@ -1445,7 +1445,7 @@
         uriBuilder.resolveTemplate("a", "param-a/withSlash", false);
         uriBuilder.resolveTemplate("b", "param-b/withEncodedSlash", true);
         uriBuilder.resolveTemplate("q", "param-q", true);
-        Assert.assertEquals(URI.create("http://localhost:8080/param-a/withSlash/param-b%2FwithEncodedSlash?query=param-q"),
+        Assertions.assertEquals(URI.create("http://localhost:8080/param-a/withSlash/param-b%2FwithEncodedSlash?query=param-q"),
                 uriBuilder.build());
         uriBuilder.build();
     }
@@ -1461,7 +1461,7 @@
         buildMap.put("a", "ignored-a");
         buildMap.put("b", "param-b");
         buildMap.put("q", "ignored-q");
-        Assert.assertEquals(URI.create("http://localhost:8080/param-a/param-b?query=param-q"), uriBuilder.buildFromMap(buildMap));
+        Assertions.assertEquals(URI.create("http://localhost:8080/param-a/param-b?query=param-q"), uriBuilder.buildFromMap(buildMap));
     }
 
     @Test
@@ -1476,7 +1476,7 @@
         uriBuilder.resolveTemplatesFromEncoded(resolveMap);
         final Map<String, Object> buildMap = new HashMap<String, Object>();
         buildMap.put("b", "param-b/aaa");
-        Assert.assertEquals("http://localhost:8080/x/y/z%3F%20/param-b/aaa/paramc1/paramc2?query=q%3F%20%26",
+        Assertions.assertEquals("http://localhost:8080/x/y/z%3F%20/param-b/aaa/paramc1/paramc2?query=q%3F%20%26",
                 uriBuilder.buildFromEncodedMap(buildMap).toString());
     }
 
@@ -1492,7 +1492,7 @@
         uriBuilder.resolveTemplates(resolveMap);
         final Map<String, Object> buildMap = new HashMap<String, Object>();
         buildMap.put("b", "param-b/aaa");
-        Assert.assertEquals("http://localhost:8080/x%2Fy%2Fz%253F%2520/param-b%2Faaa/paramc1%2Fparamc2?query=q%3F%2520%2526",
+        Assertions.assertEquals("http://localhost:8080/x%2Fy%2Fz%253F%2520/param-b%2Faaa/paramc1%2Fparamc2?query=q%3F%2520%2526",
                 uriBuilder.buildFromMap(buildMap).toString());
     }
 
@@ -1508,7 +1508,7 @@
         uriBuilder.resolveTemplates(resolveMap, false);
         final Map<String, Object> buildMap = new HashMap<String, Object>();
         buildMap.put("b", "param-b/aaa");
-        Assert.assertEquals("http://localhost:8080/x/y/z%253F%2520/param-b/aaa/paramc1/paramc2?query=q%3F%2520%2526",
+        Assertions.assertEquals("http://localhost:8080/x/y/z%253F%2520/param-b/aaa/paramc1/paramc2?query=q%3F%2520%2526",
                 uriBuilder.buildFromMap(buildMap, false).toString());
     }
 
@@ -1521,7 +1521,7 @@
         resolveMap.put("q", "param-q");
         uriBuilder.resolveTemplates(resolveMap, false);
         uriBuilder.resolveTemplate("b", "param-b/withEncodedSlash", true);
-        Assert.assertEquals(URI.create("http://localhost:8080/param-a/withSlash/param-b%2FwithEncodedSlash?query=param-q"),
+        Assertions.assertEquals(URI.create("http://localhost:8080/param-a/withSlash/param-b%2FwithEncodedSlash?query=param-q"),
                 uriBuilder.build());
         uriBuilder.build();
     }
@@ -1532,7 +1532,7 @@
                 .resolveTemplate("a", "first-a").path("{a}").resolveTemplate("a", "second-a")
                 .path("{a}/{a}").resolveTemplate("a", "twice-a");
 
-        Assert.assertEquals(URI.create("http://localhost:8080/start-path/first-a/second-a/twice-a/twice-a"),
+        Assertions.assertEquals(URI.create("http://localhost:8080/start-path/first-a/second-a/twice-a/twice-a"),
                 uriBuilder.build("start-path"));
     }
 
@@ -1541,7 +1541,7 @@
         final String uriOrig = "ftp://ftp.is.co.za/rfc/rfc1808.txt";
         final URI uriReplace = new URI(null, "ftp.is.co.za", "/test/rfc1808.txt", null, null);
         final URI uri = UriBuilder.fromUri(new URI(uriOrig)).uri(uriReplace).build();
-        Assert.assertEquals("ftp://ftp.is.co.za/test/rfc1808.txt", uri.toString());
+        Assertions.assertEquals("ftp://ftp.is.co.za/test/rfc1808.txt", uri.toString());
     }
 
     @Test
@@ -1550,7 +1550,7 @@
         final URI uriReplace = new URI(null, "ftp.is.co.za", "/test/rfc1808.txt", null, null);
 
         final URI uri = UriBuilder.fromUri(new URI(uriOrig)).uri(uriReplace.toASCIIString()).build();
-        Assert.assertEquals("ftp://ftp.is.co.za/test/rfc1808.txt", uri.toString());
+        Assertions.assertEquals("ftp://ftp.is.co.za/test/rfc1808.txt", uri.toString());
     }
 
     @Test
@@ -1559,7 +1559,7 @@
         final URI uriReplace = new URI(null, "ftp.is.co.za", "/test/rfc1808.txt", null, null);
 
         final URI uri = UriBuilder.fromUri(new URI(uriOrig)).uri(uriReplace.toASCIIString()).build();
-        Assert.assertEquals("ftp://ftp.is.co.za/test/rfc1808.txt?a=1", uri.toString());
+        Assertions.assertEquals("ftp://ftp.is.co.za/test/rfc1808.txt?a=1", uri.toString());
     }
 
     @Test
@@ -1568,7 +1568,7 @@
         final URI uriReplace = new URI(null, "ftp.is.co.za", "/test/rfc1808.txt", null, null);
 
         final URI uri = UriBuilder.fromUri(new URI(uriOrig)).uri(uriReplace.toASCIIString()).build();
-        Assert.assertEquals("ftp://ftp.is.co.za/test/rfc1808.txt#myFragment", uri.toString());
+        Assertions.assertEquals("ftp://ftp.is.co.za/test/rfc1808.txt#myFragment", uri.toString());
     }
 
     @Test
@@ -1596,35 +1596,35 @@
     public void testQueryParamEncoded() {
         final UriBuilder uriBuilder = UriBuilder.fromUri("http://localhost:8080/path");
         uriBuilder.queryParam("query", "%dummy23");
-        Assert.assertEquals("http://localhost:8080/path?query=%25dummy23", uriBuilder.build().toString());
+        Assertions.assertEquals("http://localhost:8080/path?query=%25dummy23", uriBuilder.build().toString());
     }
 
     @Test
     public void testQueryParamEncoded2() {
         final UriBuilder uriBuilder = UriBuilder.fromUri("http://localhost:8080/path");
         uriBuilder.queryParam("query", "{param}");
-        Assert.assertEquals("http://localhost:8080/path?query=%25dummy23", uriBuilder.build("%dummy23").toString());
+        Assertions.assertEquals("http://localhost:8080/path?query=%25dummy23", uriBuilder.build("%dummy23").toString());
     }
 
     @Test
     public void testQueryParamEncoded3() {
         final UriBuilder uriBuilder = UriBuilder.fromUri("http://localhost:8080/path");
         uriBuilder.queryParam("query", "{param}");
-        Assert.assertEquals("http://localhost:8080/path?query=%2525test", uriBuilder.build("%25test").toString());
+        Assertions.assertEquals("http://localhost:8080/path?query=%2525test", uriBuilder.build("%25test").toString());
     }
 
     @Test
     public void testQueryParamEncoded4() {
         final UriBuilder uriBuilder = UriBuilder.fromUri("http://localhost:8080/path");
         uriBuilder.queryParam("query", "{param}");
-        Assert.assertEquals("http://localhost:8080/path?query=%25test", uriBuilder.buildFromEncoded("%25test").toString());
+        Assertions.assertEquals("http://localhost:8080/path?query=%25test", uriBuilder.buildFromEncoded("%25test").toString());
     }
 
     @Test
     public void testQueryParamEncoded5() {
         final UriBuilder uriBuilder = UriBuilder.fromUri("http://localhost:8080/path");
         uriBuilder.queryParam("query", "! # $ & ' ( ) * + , / : ; = ? @ [ ]");
-        Assert.assertEquals(
+        Assertions.assertEquals(
                 "http://localhost:8080/path?query=%21+%23+%24+%26+%27+%28+%29+%2A+%2B+%2C+%2F+%3A+%3B+%3D+%3F+%40+%5B+%5D",
                 uriBuilder.build().toString());
     }
@@ -1664,7 +1664,7 @@
                 .queryParam("key2", "val1")
                 .queryParam("key1", "val3")
                 .build();
-        Assert.assertEquals(expected, uri.getQuery());
+        Assertions.assertEquals(expected, uri.getQuery());
     }
 
 }
diff --git a/tests/e2e-entity/pom.xml b/tests/e2e-entity/pom.xml
index f4560b6..be1e636 100644
--- a/tests/e2e-entity/pom.xml
+++ b/tests/e2e-entity/pom.xml
@@ -175,16 +175,16 @@
             <artifactId>jersey-test-framework-util</artifactId>
             <scope>test</scope>
         </dependency>
-
         <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest</artifactId>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-suite</artifactId>
+            <version>${junit-platform-suite.version}</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
-            <groupId>xmlunit</groupId>
-            <artifactId>xmlunit</artifactId>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/AbstractTypeTester.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/AbstractTypeTester.java
index 2ca9ddd..5cf22c3 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/AbstractTypeTester.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/AbstractTypeTester.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,7 +44,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Abstract entity type tester base class.
@@ -166,7 +166,7 @@
         assertEquals(in.length, out.length);
         for (int i = 0; i < in.length; i++) {
             if (in[i] != out[i]) {
-                assertEquals("Index: " + i, in[i], out[i]);
+                assertEquals(in[i], out[i], "Index: " + i);
             }
         }
     }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/BeanStreamingTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/BeanStreamingTest.java
index 8882e6e..bf4ac93 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/BeanStreamingTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/BeanStreamingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,10 +42,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/CharsetTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/CharsetTest.java
index f81aa04..ed9e64f 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/CharsetTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/CharsetTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,8 +46,7 @@
 
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONObject;
-import org.glassfish.jersey.client.ClientResponse;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ContextResolverMediaTypeTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ContextResolverMediaTypeTest.java
index e9250e3..59ce2ca 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ContextResolverMediaTypeTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ContextResolverMediaTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,22 +33,30 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.experimental.runners.Enclosed;
-import org.junit.runner.RunWith;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
  * @author Martin Matula
  */
-@RunWith(Enclosed.class)
+@Suite
+@SelectClasses({
+        ContextResolverMediaTypeTest.ProduceTest.class,
+        ContextResolverMediaTypeTest.ProducesSeparateTest.class,
+        ContextResolverMediaTypeTest.ProducesTest.class,
+        ContextResolverMediaTypeTest.ProducesXXXTest.class,
+})
 public class ContextResolverMediaTypeTest {
 
     @Produces("text/plain")
     @Provider
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class TextPlainContextResolver implements ContextResolver<String> {
 
         public String getContext(Class<?> objectType) {
@@ -58,7 +66,7 @@
 
     @Produces("text/*")
     @Provider
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class TextContextResolver implements ContextResolver<String> {
 
         public String getContext(Class<?> objectType) {
@@ -68,7 +76,7 @@
 
     @Produces("*/*")
     @Provider
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class WildcardContextResolver implements ContextResolver<String> {
 
         public String getContext(Class<?> objectType) {
@@ -78,7 +86,7 @@
 
     @Produces({"text/plain", "text/html"})
     @Provider
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class TextPlainHtmlContextResolver implements ContextResolver<String> {
 
         public String getContext(Class<?> objectType) {
@@ -89,7 +97,7 @@
 
     @Produces("text/html")
     @Provider
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class TextHtmlContextResolver implements ContextResolver<String> {
 
         public String getContext(Class<?> objectType) {
@@ -99,7 +107,7 @@
     }
 
     @Path("/")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class ContextResource {
 
         @Context
@@ -125,6 +133,7 @@
         }
     }
 
+    @Nested
     public static class ProduceTest extends JerseyTest {
 
         @Override
@@ -151,6 +160,7 @@
         }
     }
 
+    @Nested
     public static class ProducesTest extends JerseyTest {
 
         @Override
@@ -177,6 +187,7 @@
         }
     }
 
+    @Nested
     public static class ProducesSeparateTest extends JerseyTest {
 
         @Override
@@ -204,6 +215,7 @@
         }
     }
 
+    @Nested
     public static class ProducesXXXTest extends JerseyTest {
 
         @Override
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyEntityTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyEntityTest.java
index dac06e6..9b64a74 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyEntityTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -48,11 +48,11 @@
 import org.glassfish.jersey.message.internal.ReaderWriter;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * JERSEY-1540.
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyRequestToEntityParamTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyRequestToEntityParamTest.java
index 4b7865d..50b7fa9 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyRequestToEntityParamTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyRequestToEntityParamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for JERSEY-1579.
@@ -46,13 +46,13 @@
 
         @DELETE
         public void delete(Map<String, String> entity) {
-            Assert.assertNull(entity);
+            Assertions.assertNull(entity);
         }
     }
 
     @Test
     public void testEmptyRequest() {
         Response response = target().request().delete(Response.class);
-        Assert.assertEquals(204, response.getStatus());
+        Assertions.assertEquals(204, response.getStatus());
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyRequestWithJaxbTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyRequestWithJaxbTest.java
index a7c4f0d..3102cb7 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyRequestWithJaxbTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EmptyRequestWithJaxbTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,22 +39,29 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.experimental.runners.Enclosed;
-import org.junit.runner.RunWith;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
  * @author Martin Matula
  */
-@RunWith(Enclosed.class)
+@Suite
+@SelectClasses({
+        EmptyRequestWithJaxbTest.EmptyRequestTest.class,
+        EmptyRequestWithJaxbTest.BadgerFishCRTest.class,
+        EmptyRequestWithJaxbTest.MappedJettisonCRTest.class
+})
 public class EmptyRequestWithJaxbTest {
 
     @SuppressWarnings("UnusedParameters")
     @Path("/")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class Resource {
 
         @POST
@@ -88,6 +95,7 @@
 
     }
 
+    @Nested
     public static class EmptyRequestTest extends JerseyTest {
 
         @Override
@@ -129,7 +137,7 @@
         }
     }
 
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public abstract static class CR implements ContextResolver<JAXBContext> {
 
         private final JAXBContext context;
@@ -153,6 +161,7 @@
         }
     }
 
+    @Nested
     public static class MappedJettisonCRTest extends JerseyTest {
 
         @Override
@@ -178,6 +187,7 @@
         }
     }
 
+    @Nested
     public static class BadgerFishCRTest extends JerseyTest {
 
         @Override
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EntityTypesTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EntityTypesTest.java
index 39ed8f2..2a28919 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EntityTypesTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EntityTypesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -73,24 +73,25 @@
 import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.message.internal.FileProvider;
 import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
 
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONObject;
-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.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Paul Sandoz
  * @author Martin Matula
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class EntityTypesTest extends AbstractTypeTester {
 
     @Path("InputStreamResource")
@@ -110,6 +111,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testInputStream() {
         final ByteArrayInputStream in = new ByteArrayInputStream("CONTENT".getBytes());
         _test(in, InputStreamResource.class);
@@ -120,6 +122,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testString() {
         _test("CONTENT", StringResource.class);
     }
@@ -133,6 +136,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testByteArrayRepresentation() {
         _test("CONTENT".getBytes(), ByteArrayResource.class);
     }
@@ -144,6 +148,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentation() {
         _test(new JaxbBean("CONTENT"), JaxbBeanResource.class, MediaType.APPLICATION_XML_TYPE);
     }
@@ -155,11 +160,13 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentationMediaType() {
         _test(new JaxbBean("CONTENT"), JaxbBeanResourceMediaType.class, MediaType.valueOf("application/foo+xml"));
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentationError() {
         final WebTarget target = target("JaxbBeanResource");
 
@@ -175,6 +182,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanTextRepresentation() {
         _test(new JaxbBean("CONTENT"), JaxbBeanTextResource.class, MediaType.TEXT_XML_TYPE);
     }
@@ -186,6 +194,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanRepresentation() {
         _test(new JaxbBean("CONTENT"), JAXBElementBeanResource.class, MediaType.APPLICATION_XML_TYPE);
     }
@@ -201,6 +210,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementListXMLRepresentation() {
         _testListOrArray(true, MediaType.APPLICATION_XML_TYPE);
     }
@@ -218,14 +228,15 @@
                 .asList((JAXBElement<String>[]) in);
         final List<JAXBElement<String>> outList = isList ? ((List<JAXBElement<String>>) out) : Arrays
                 .asList((JAXBElement<String>[]) out);
-        assertEquals("Lengths differ", inList.size(), outList.size());
+        assertEquals(inList.size(), outList.size(), "Lengths differ");
         for (int i = 0; i < inList.size(); i++) {
-            assertEquals("Names of elements at index " + i + " differ", inList.get(i).getName(), outList.get(i).getName());
-            assertEquals("Values of elements at index " + i + " differ", inList.get(i).getValue(), outList.get(i).getValue());
+            assertEquals(inList.get(i).getName(), outList.get(i).getName(), "Names of elements at index " + i + " differ");
+            assertEquals(inList.get(i).getValue(), outList.get(i).getValue(), "Values of elements at index " + i + " differ");
         }
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementListJSONRepresentation() {
         _testListOrArray(true, MediaType.APPLICATION_JSON_TYPE);
     }
@@ -244,11 +255,13 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementArrayXMLRepresentation() {
         _testListOrArray(false, MediaType.APPLICATION_XML_TYPE);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementArrayJSONRepresentation() {
         _testListOrArray(false, MediaType.APPLICATION_JSON_TYPE);
     }
@@ -260,11 +273,13 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanRepresentationMediaType() {
         _test(new JaxbBean("CONTENT"), JAXBElementBeanResourceMediaType.class, MediaType.valueOf("application/foo+xml"));
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanRepresentationError() {
         final WebTarget target = target("JAXBElementBeanResource");
 
@@ -280,6 +295,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanTextRepresentation() {
         _test(new JaxbBean("CONTENT"), JAXBElementBeanTextResource.class, MediaType.TEXT_XML_TYPE);
     }
@@ -291,6 +307,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentationMediaTypeAtom() {
         _test(new JaxbBean("CONTENT"), JaxbBeanResourceAtom.class, MediaType.valueOf("application/atom+xml"));
     }
@@ -318,6 +335,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBTypeRepresentation() {
         final WebTarget target = target("JAXBTypeResource");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -332,6 +350,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBTypeRepresentationMediaType() {
         final WebTarget target = target("JAXBTypeResourceMediaType");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -365,6 +384,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBObjectRepresentation() {
         final WebTarget target = target("JAXBObjectResource");
         final Object in = new JaxbBean("CONTENT");
@@ -379,6 +399,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBObjectRepresentationMediaType() {
         final WebTarget target = target("JAXBObjectResourceMediaType");
         final Object in = new JaxbBean("CONTENT");
@@ -387,6 +408,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBObjectRepresentationError() {
         final WebTarget target = target("JAXBObjectResource");
 
@@ -400,6 +422,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFileRepresentation() throws IOException {
         final FileProvider fp = new FileProvider();
         final File in = fp.readFrom(File.class, File.class, null, null, null,
@@ -415,6 +438,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFormRepresentation() {
         final Form fp = new Form();
         fp.param("Email", "johndoe@gmail.com");
@@ -442,6 +466,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJSONObjectRepresentation() throws Exception {
         final JSONObject object = new JSONObject();
         object.put("userid", 1234)
@@ -459,6 +484,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJSONObjectRepresentationGeneralMediaTyp() throws Exception {
         final JSONObject object = new JSONObject();
         object.put("userid", 1234)
@@ -476,6 +502,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJSONArrayRepresentation() throws Exception {
         final JSONArray array = new JSONArray();
         array.put("One").put("Two").put("Three").put(1).put(2.0);
@@ -490,6 +517,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJSONArrayRepresentationGeneralMediaType() throws Exception {
         final JSONArray array = new JSONArray();
         array.put("One").put("Two").put("Three").put(1).put(2.0);
@@ -528,6 +556,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testReaderRepresentation() throws Exception {
         _test(new StringReader("CONTENT"), ReaderResource.class);
     }
@@ -539,6 +568,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testStreamSourceRepresentation() throws Exception {
         final StreamSource ss = new StreamSource(
                 new ByteArrayInputStream(XML_DOCUMENT.getBytes()));
@@ -550,6 +580,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testSAXSourceRepresentation() throws Exception {
         final StreamSource ss = new StreamSource(
                 new ByteArrayInputStream(XML_DOCUMENT.getBytes()));
@@ -561,6 +592,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDOMSourceRepresentation() throws Exception {
         final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         final Document d = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(XML_DOCUMENT)));
@@ -573,6 +605,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDocumentRepresentation() throws Exception {
         final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         final Document d = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(XML_DOCUMENT)));
@@ -591,6 +624,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFormMultivaluedMapRepresentation() {
         final MultivaluedMap<String, String> fp = new MultivaluedStringMap();
         fp.add("Email", "johndoe@gmail.com");
@@ -620,6 +654,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testStreamingOutputRepresentation() throws Exception {
         final WebTarget target = target("StreamingOutputResource");
         assertEquals("CONTENT", target.request().get(String.class));
@@ -632,6 +667,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanJSONRepresentation() {
         final WebTarget target = target("JAXBElementBeanJSONResource");
 
@@ -643,10 +679,10 @@
         final byte[] inBytes = getRequestEntity();
         final byte[] outBytes = getEntityAsByteArray(rib);
 
-        assertEquals(new String(outBytes), inBytes.length, outBytes.length);
+        assertEquals(inBytes.length, outBytes.length, new String(outBytes));
         for (int i = 0; i < inBytes.length; i++) {
             if (inBytes[i] != outBytes[i]) {
-                assertEquals("Index: " + i, inBytes[i], outBytes[i]);
+                assertEquals(inBytes[i], outBytes[i], "Index: " + i);
             }
         }
     }
@@ -658,6 +694,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentationJSON() {
         final WebTarget target = target("JaxbBeanResourceJSON");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -672,6 +709,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentationJSONMediaType() {
         final WebTarget target = target("JaxbBeanResourceJSONMediaType");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -686,6 +724,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanRepresentationJSON() {
         final WebTarget target = target("JAXBElementBeanResourceJSON");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -700,6 +739,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanRepresentationJSONMediaType() {
         final WebTarget target = target("JAXBElementBeanResourceJSONMediaType");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -719,6 +759,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBTypeRepresentationJSON() {
         final WebTarget target = target("JAXBTypeResourceJSON");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -738,6 +779,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBTypeRepresentationJSONMediaType() {
         final WebTarget target = target("JAXBTypeResourceJSONMediaType");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -752,7 +794,8 @@
     }
 
     @Test
-    @Ignore("TODO: unignore once fi support implemented (JERSEY-1190)")
+    @Execution(ExecutionMode.CONCURRENT)
+    @Disabled("TODO: unignore once fi support implemented (JERSEY-1190)")
     // TODO: unignore once fi support implemented (JERSEY-1190)
     public void testJaxbBeanRepresentationFastInfoset() {
         final WebTarget target = target("JaxbBeanResourceFastInfoset");
@@ -768,7 +811,8 @@
     }
 
     @Test
-    @Ignore("TODO: unignore once fi support implemented (JERSEY-1190)")
+    @Execution(ExecutionMode.CONCURRENT)
+    @Disabled("TODO: unignore once fi support implemented (JERSEY-1190)")
     // TODO: unignore once fi support implemented (JERSEY-1190)
     public void testJAXBElementBeanRepresentationFastInfoset() {
         final WebTarget target = target("JAXBElementBeanResourceFastInfoset");
@@ -789,7 +833,8 @@
     }
 
     @Test
-    @Ignore("TODO: unignore once fi support implemented (JERSEY-1190)")
+    @Execution(ExecutionMode.CONCURRENT)
+    @Disabled("TODO: unignore once fi support implemented (JERSEY-1190)")
     // TODO: unignore once fi support implemented (JERSEY-1190)
     public void testJAXBTypeRepresentationFastInfoset() {
         final WebTarget target = target("JAXBTypeResourceFastInfoset");
@@ -883,6 +928,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBArrayRepresentation() {
         final WebTarget target = target("JAXBArrayResource");
 
@@ -907,6 +953,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationMediaType() {
         final WebTarget target = target("JAXBListResourceMediaType");
 
@@ -964,6 +1011,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationError() {
         final WebTarget target = target("JAXBListResource");
 
@@ -982,7 +1030,8 @@
      * TODO, the unmarshalling fails.
      */
     @Test
-    @Ignore("TODO: unignore once fi support implemented (JERSEY-1190)")
+    @Execution(ExecutionMode.CONCURRENT)
+    @Disabled("TODO: unignore once fi support implemented (JERSEY-1190)")
     // TODO: unignore once fi support implemented (JERSEY-1190)
     public void testJAXBListRepresentationFastInfoset() {
         final WebTarget target = target("JAXBListResourceFastInfoset");
@@ -1046,6 +1095,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationJSON() throws Exception {
         final WebTarget target = target("JAXBListResourceJSON");
 
@@ -1118,6 +1168,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationJSONMediaType() throws Exception {
         final WebTarget target = target("JAXBListResourceJSONMediaType");
 
@@ -1158,6 +1209,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testNoContentTypeJaxbEntity() throws IOException {
         assertThat(target("NoContentTypeJAXBResource").request("application/xml").post(Entity.xml(new JaxbBean("foo")))
                         .getMediaType(),
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EnumEntityTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EnumEntityTest.java
index 6e842ff..3b3ae5b 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EnumEntityTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/EnumEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,10 +18,11 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
@@ -31,7 +32,7 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class EnumEntityTest extends JerseyTest {
 
     public enum SimpleEnum {
@@ -91,41 +92,45 @@
     // Server side tests
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testSimpleEnumServerReader() {
         for (SimpleEnum value : SimpleEnum.values()) {
             try (Response r = target("simple").request(MediaType.TEXT_PLAIN_TYPE)
                     .post(Entity.entity(value.name(), MediaType.TEXT_PLAIN_TYPE))) {
-                Assert.assertEquals(value.name(), r.readEntity(String.class));
+                Assertions.assertEquals(value.name(), r.readEntity(String.class));
             }
         }
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testValueEnumServerReader() {
         for (ValueEnum value : ValueEnum.values()) {
             try (Response r = target("value").request(MediaType.TEXT_PLAIN_TYPE)
                     .post(Entity.entity(value.name(), MediaType.TEXT_PLAIN_TYPE))) {
-                Assert.assertEquals(value.name(), r.readEntity(String.class));
+                Assertions.assertEquals(value.name(), r.readEntity(String.class));
             }
         }
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testSimpleEnumServerWriter() {
         for (SimpleEnum value : SimpleEnum.values()) {
             try (Response r = target("simple").request(MediaType.TEXT_PLAIN_TYPE)
                     .put(Entity.entity(value.name(), MediaType.TEXT_PLAIN_TYPE))) {
-                Assert.assertEquals(value.name(), r.readEntity(String.class));
+                Assertions.assertEquals(value.name(), r.readEntity(String.class));
             }
         }
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testValueEnumServerWriter() {
         for (ValueEnum value : ValueEnum.values()) {
             try (Response r = target("value").request(MediaType.TEXT_PLAIN_TYPE)
                     .put(Entity.entity(value.name(), MediaType.TEXT_PLAIN_TYPE))) {
-                Assert.assertEquals(value.name(), r.readEntity(String.class));
+                Assertions.assertEquals(value.name(), r.readEntity(String.class));
             }
         }
     }
@@ -133,41 +138,45 @@
     // Client side tests
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testSimpleEnumClientReader() {
         for (SimpleEnum value : SimpleEnum.values()) {
             try (Response r = target("simple").request(MediaType.TEXT_PLAIN_TYPE)
                     .post(Entity.entity(value.name(), MediaType.TEXT_PLAIN_TYPE))) {
-                Assert.assertEquals(value, r.readEntity(SimpleEnum.class));
+                Assertions.assertEquals(value, r.readEntity(SimpleEnum.class));
             }
         }
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testValueEnumClientReader() {
         for (ValueEnum value : ValueEnum.values()) {
             try (Response r = target("value").request(MediaType.TEXT_PLAIN_TYPE)
                     .post(Entity.entity(value.name(), MediaType.TEXT_PLAIN_TYPE))) {
-                Assert.assertEquals(value, r.readEntity(ValueEnum.class));
+                Assertions.assertEquals(value, r.readEntity(ValueEnum.class));
             }
         }
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testSimpleEnumClientWriter() {
         for (SimpleEnum value : SimpleEnum.values()) {
             try (Response r = target("echo").request(MediaType.TEXT_PLAIN_TYPE)
                     .post(Entity.entity(value, MediaType.TEXT_PLAIN_TYPE))) {
-                Assert.assertEquals(value.name(), r.readEntity(String.class));
+                Assertions.assertEquals(value.name(), r.readEntity(String.class));
             }
         }
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testValueEnumClientWriter() {
         for (ValueEnum value : ValueEnum.values()) {
             try (Response r = target("echo").request(MediaType.TEXT_PLAIN_TYPE)
                     .post(Entity.entity(value, MediaType.TEXT_PLAIN_TYPE))) {
-                Assert.assertEquals(value.name(), r.readEntity(String.class));
+                Assertions.assertEquals(value.name(), r.readEntity(String.class));
             }
         }
     }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/GenericTypeAndEntityTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/GenericTypeAndEntityTest.java
index bed9281..5b2861e 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/GenericTypeAndEntityTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/GenericTypeAndEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -49,10 +49,11 @@
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 import org.glassfish.jersey.message.internal.ReaderWriter;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  *
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InjectedProviderTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InjectedProviderTest.java
index 5562ed8..71b77a1 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InjectedProviderTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InjectedProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,8 +39,8 @@
 
 import org.glassfish.jersey.client.ClientConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InterceptedStreamCloseTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InterceptedStreamCloseTest.java
index d11ed14..cb00250 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InterceptedStreamCloseTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InterceptedStreamCloseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Reproducer for JERSEY-1845.
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InvalidEntityTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InvalidEntityTest.java
index 5da7cc5..1119948 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InvalidEntityTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InvalidEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.client.ResponseProcessingException;
 
-import org.junit.Test;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Martin Matula
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InvalidFormTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InvalidFormTest.java
index 6af9b30..77b422e 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InvalidFormTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/InvalidFormTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/JAXBContextResolverTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/JAXBContextResolverTest.java
index 2f28775..c5744aa 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/JAXBContextResolverTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/JAXBContextResolverTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,23 +35,37 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.experimental.runners.Enclosed;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
+
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Paul Sandoz
  * @author Martin Matula
  */
-@RunWith(Enclosed.class)
+@Suite
+@SelectClasses({
+        JAXBContextResolverTest.JAXBContextTest.class,
+        JAXBContextResolverTest.JAXBContextAllTest.class,
+        JAXBContextResolverTest.JAXBContextAppTest.class,
+        JAXBContextResolverTest.JAXBContextAllWithOtherJaxbBeanTest.class,
+        JAXBContextResolverTest.JAXBContextTextTest.class,
+        JAXBContextResolverTest.UnmarshallerAllTest.class,
+        JAXBContextResolverTest.UnmarshallerAppTest.class,
+        JAXBContextResolverTest.UnmarshallerFooTest.class,
+        JAXBContextResolverTest.UnmarshallerTest.class,
+        JAXBContextResolverTest.UnmarshallerTextTest.class
+})
 public class JAXBContextResolverTest {
 
     @Provider
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class JAXBContextResolver implements ContextResolver<JAXBContext> {
 
         private JAXBContext context;
@@ -80,7 +94,7 @@
     }
 
     @Provider
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class MarshallerResolver implements ContextResolver<Marshaller> {
 
         private JAXBContext context;
@@ -113,7 +127,7 @@
     }
 
     @Provider
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class UnmarshallerResolver implements ContextResolver<Unmarshaller> {
 
         private JAXBContext context;
@@ -146,7 +160,7 @@
     }
 
     @Path("/")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class JaxbBeanResource {
 
         @POST
@@ -176,6 +190,7 @@
         }
     }
 
+    @Nested
     public static class UnmarshallerTest extends AbstractTypeTester {
 
         private JAXBContextResolver cr;
@@ -205,29 +220,30 @@
 
     @Provider
     @Produces("application/xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class JAXBContextResolverApp extends JAXBContextResolver {
     }
 
     @Provider
     @Produces("application/xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class MarshallerResolverApp extends MarshallerResolver {
     }
 
     @Provider
     @Produces("application/xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class UnmarshallerResolverApp extends UnmarshallerResolver {
     }
 
     @Path("/")
     @Consumes("application/xml")
     @Produces("application/xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class JaxbBeanResourceApp extends JaxbBeanResource {
     }
 
+    @Nested
     public static class JAXBContextAppTest extends AbstractTypeTester {
 
         private JAXBContextResolver cr;
@@ -249,6 +265,7 @@
         }
     }
 
+    @Nested
     public static class UnmarshallerAppTest extends AbstractTypeTester {
 
         private JAXBContextResolver cr;
@@ -289,29 +306,30 @@
 
     @Provider
     @Produces("text/xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class JAXBContextResolverText extends JAXBContextResolver {
     }
 
     @Provider
     @Produces("text/xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class MarshallerResolverText extends MarshallerResolver {
     }
 
     @Provider
     @Produces("text/xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class UnmarshallerResolverText extends UnmarshallerResolver {
     }
 
     @Path("/")
     @Consumes("text/xml")
     @Produces("text/xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class JaxbBeanResourceText extends JaxbBeanResource {
     }
 
+    @Nested
     public static class JAXBContextTextTest extends AbstractTypeTester {
 
         private JAXBContextResolver cr;
@@ -332,6 +350,7 @@
         }
     }
 
+    @Nested
     public static class UnmarshallerTextTest extends AbstractTypeTester {
 
         private JAXBContextResolver cr;
@@ -363,23 +382,24 @@
 
     @Provider
     @Produces("text/foo+xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class MarshallerResolverFoo extends MarshallerResolver {
     }
 
     @Provider
     @Produces("text/foo+xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class UnmarshallerResolverFoo extends UnmarshallerResolver {
     }
 
     @Path("/")
     @Consumes("text/foo+xml")
     @Produces("text/foo+xml")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class JaxbBeanResourceFoo extends JaxbBeanResource {
     }
 
+    @Nested
     public static class UnmarshallerFooTest extends AbstractTypeTester {
 
         private JAXBContextResolver cr;
@@ -419,7 +439,7 @@
     }
 
     @Path("/")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class JaxbBeanResourceAll {
 
         @POST
@@ -444,6 +464,7 @@
         }
     }
 
+    @Nested
     public static class JAXBContextAllTest extends AbstractTypeTester {
 
         private JAXBContextResolver cr;
@@ -479,6 +500,7 @@
         }
     }
 
+    @Nested
     public static class UnmarshallerAllTest extends AbstractTypeTester {
 
         private JAXBContextResolver cr;
@@ -546,7 +568,7 @@
     }
 
     @XmlRootElement
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class OtherJaxbBean {
 
         public String value;
@@ -568,7 +590,7 @@
     }
 
     @Path("/")
-    @Ignore("This class is not a test class & must be ignored by the Enclosed test runner.")
+    @Disabled("This class is not a test class & must be ignored by the Enclosed test runner.")
     public static class JaxbBeanResourceAllOtherJaxbBean {
 
         @POST
@@ -593,6 +615,7 @@
         }
     }
 
+    @Nested
     public static class JAXBContextAllWithOtherJaxbBeanTest extends AbstractTypeTester {
 
         private JAXBContextResolver cr;
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/JsonMoxyTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/JsonMoxyTest.java
index 62a4dc2..0ba1190 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/JsonMoxyTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/JsonMoxyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -50,17 +50,19 @@
 import org.glassfish.jersey.moxy.json.MoxyJsonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class JsonMoxyTest extends AbstractTypeTester {
 
     @Path("JAXBElementListResource")
@@ -97,14 +99,15 @@
                 isList ? ((List<JAXBElement<String>>) in) : Arrays.asList((JAXBElement<String>[]) in);
         final List<JAXBElement<String>> outList = isList ? ((List<JAXBElement<String>>) out) : Arrays
                 .asList((JAXBElement<String>[]) out);
-        assertEquals("Lengths differ", inList.size(), outList.size());
+        assertEquals(inList.size(), outList.size(), "Lengths differ");
         for (int i = 0; i < inList.size(); i++) {
-            assertEquals("Names of elements at index " + i + " differ", inList.get(i).getName(), outList.get(i).getName());
-            assertEquals("Values of elements at index " + i + " differ", inList.get(i).getValue(), outList.get(i).getValue());
+            assertEquals(inList.get(i).getName(), outList.get(i).getName(), "Names of elements at index " + i + " differ");
+            assertEquals(inList.get(i).getValue(), outList.get(i).getValue(), "Values of elements at index " + i + " differ");
         }
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementListJSONRepresentation() {
         _testListOrArray(true, MediaType.APPLICATION_JSON_TYPE);
     }
@@ -124,6 +127,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementArrayJSONRepresentation() {
         _testListOrArray(false, MediaType.APPLICATION_JSON_TYPE);
     }
@@ -152,6 +156,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanJSONRepresentation() {
         final WebTarget target = target("JAXBElementBeanJSONResource");
 
@@ -167,10 +172,10 @@
         final byte[] inBytes = getRequestEntity();
         final byte[] outBytes = getEntityAsByteArray(rib);
 
-        assertEquals(new String(outBytes), inBytes.length, outBytes.length);
+        assertEquals(inBytes.length, outBytes.length, new String(outBytes));
         for (int i = 0; i < inBytes.length; i++) {
             if (inBytes[i] != outBytes[i]) {
-                assertEquals("Index: " + i, inBytes[i], outBytes[i]);
+                assertEquals(inBytes[i], outBytes[i], "Index: " + i);
             }
         }
     }
@@ -182,6 +187,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentationJSON() {
         final WebTarget target = target("JaxbBeanResourceJSON");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -196,6 +202,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentationJSONMediaType() {
         final WebTarget target = target("JaxbBeanResourceJSONMediaType");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -210,6 +217,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanRepresentationJSON() {
         final WebTarget target = target("JAXBElementBeanResourceJSON");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -224,6 +232,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanRepresentationJSONMediaType() {
         final WebTarget target = target("JAXBElementBeanResourceJSONMediaType");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -243,6 +252,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBTypeRepresentationJSON() {
         final WebTarget target = target("JAXBTypeResourceJSON");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -262,6 +272,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBTypeRepresentationJSONMediaType() {
         final WebTarget target = target("JAXBTypeResourceJSONMediaType");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -336,6 +347,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationJSONCollection() throws Exception {
         final WebTarget target = target("JAXBListResourceJSON");
 
@@ -355,6 +367,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationJSONLinkedList() throws Exception {
         final WebTarget target = target("JAXBListResourceJSON");
 
@@ -371,6 +384,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationJSONSet() throws Exception {
         final WebTarget target = target("JAXBListResourceJSON");
 
@@ -397,6 +411,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationJSONStack() throws Exception {
         final WebTarget target = target("JAXBListResourceJSON");
 
@@ -414,7 +429,8 @@
     }
 
     @Test
-    @Ignore("Until JERSEY-2825 is fixed.")
+    @Execution(ExecutionMode.CONCURRENT)
+    @Disabled("Until JERSEY-2825 is fixed.")
     public void testJAXBListRepresentationJSONArrayList() throws Exception {
         final WebTarget target = target("JAXBListResourceJSON");
 
@@ -435,6 +451,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationJSONMediaType() throws Exception {
         final WebTarget target = target("JAXBListResourceJSONMediaType");
 
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MediaTypeSelectionTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MediaTypeSelectionTest.java
index 77f7df7..5464658 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MediaTypeSelectionTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MediaTypeSelectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
@@ -171,7 +171,7 @@
     }
 
     @Test
-    @Ignore("JSONB breaks this test.")
+    @Disabled("JSONB breaks this test.")
     public void testApplicationWildCard() {
         Response r = target("wildcard").request("application/*").post(Entity.text("test"));
         assertEquals(MediaType.APPLICATION_OCTET_STREAM_TYPE, r.getMediaType());
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MessageBodyProviderAnnotationsTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MessageBodyProviderAnnotationsTest.java
index 897bfe4..fff556a 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MessageBodyProviderAnnotationsTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MessageBodyProviderAnnotationsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,8 +42,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests annotations passed to message body provider.
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MultipartTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MultipartTest.java
index 449da72..bfd4ef3 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MultipartTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/MultipartTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -47,7 +47,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/NoMessageBodyWorkerTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/NoMessageBodyWorkerTest.java
index 454fac3..0dd88e6 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/NoMessageBodyWorkerTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/NoMessageBodyWorkerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.CommonProperties;
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentOrderTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentOrderTest.java
index ef7bba6..41890e4 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentOrderTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentOrderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,9 +19,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests the correct order of providers.
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentResourceReaderWriterOrderTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentResourceReaderWriterOrderTest.java
index 58aa798..fe1725c 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentResourceReaderWriterOrderTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentResourceReaderWriterOrderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,9 +19,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests the correct order of providers.
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentReversedOrderTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentReversedOrderTest.java
index 8fc826b..82183d9 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentReversedOrderTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/ParameterTypeArgumentReversedOrderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,9 +19,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests the correct order of providers.
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/RenderedImageTypeTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/RenderedImageTypeTest.java
index 1d379e0..8498aae 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/RenderedImageTypeTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/RenderedImageTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,10 +31,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.Matchers.greaterThan;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/StreamingOutputTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/StreamingOutputTest.java
index 9bdf547..c1085ed 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/StreamingOutputTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/StreamingOutputTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/SubResourceDynamicProxyTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/SubResourceDynamicProxyTest.java
index abe6088..f8d3fc0 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/SubResourceDynamicProxyTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/SubResourceDynamicProxyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,8 +40,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Reproducer for JERSEY-2541.
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XXETest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XXETest.java
index 4b9aff2..097de56 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XXETest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XXETest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,12 +39,12 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests xml security.
@@ -170,7 +170,7 @@
         assertEquals("", s);
     }
 
-    @Ignore // TODO
+    @Disabled // TODO
     @Test
     public void testJAXBListSecure() {
         final String s = target().path("jaxb/list").request("application/xml").post(Entity.entity(getListDocument(),
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XmlJaxBElementProviderTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XmlJaxBElementProviderTest.java
index beb84eb..1b62afc 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XmlJaxBElementProviderTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XmlJaxBElementProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Miroslav Fuksa
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XmlMoxyTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XmlMoxyTest.java
index 82a9f53..9e2587c 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XmlMoxyTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/XmlMoxyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -52,20 +52,22 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.moxy.xml.MoxyXmlFeature;
 import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
-import org.junit.runner.RunWith;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class XmlMoxyTest extends AbstractTypeTester {
 
     @Path("JaxbBeanResource")
@@ -75,6 +77,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentation() {
         _test(new JaxbBean("CONTENT"), JaxbBeanResource.class, MediaType.APPLICATION_XML_TYPE);
     }
@@ -86,11 +89,13 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentationMediaType() {
         _test(new JaxbBean("CONTENT"), JaxbBeanResourceMediaType.class, MediaType.valueOf("application/foo+xml"));
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanRepresentationError() {
         final WebTarget target = target("JaxbBeanResource");
 
@@ -106,6 +111,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJaxbBeanTextRepresentation() {
         _test(new JaxbBean("CONTENT"), JaxbBeanTextResource.class, MediaType.TEXT_XML_TYPE);
     }
@@ -117,6 +123,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanRepresentation() {
         _test(new JaxbBean("CONTENT"), JAXBElementBeanResource.class, MediaType.APPLICATION_XML_TYPE);
     }
@@ -132,6 +139,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementListXMLRepresentation() {
         _testListOrArray(true, MediaType.APPLICATION_XML_TYPE);
     }
@@ -150,10 +158,10 @@
                 isList ? ((List<JAXBElement<String>>) in) : Arrays.asList((JAXBElement<String>[]) in);
         final List<JAXBElement<String>> outList = isList ? ((List<JAXBElement<String>>) out) : Arrays
                 .asList((JAXBElement<String>[]) out);
-        assertEquals("Lengths differ", inList.size(), outList.size());
+        assertEquals(inList.size(), outList.size(), "Lengths differ");
         for (int i = 0; i < inList.size(); i++) {
-            assertEquals("Names of elements at index " + i + " differ", inList.get(i).getName(), outList.get(i).getName());
-            assertEquals("Values of elements at index " + i + " differ", inList.get(i).getValue(), outList.get(i).getValue());
+            assertEquals(inList.get(i).getName(), outList.get(i).getName(), "Names of elements at index " + i + " differ");
+            assertEquals(inList.get(i).getValue(), outList.get(i).getValue(), "Values of elements at index " + i + " differ");
         }
     }
 
@@ -172,6 +180,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementArrayXMLRepresentation() {
         _testListOrArray(false, MediaType.APPLICATION_XML_TYPE);
     }
@@ -183,11 +192,13 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanRepresentationMediaType() {
         _test(new JaxbBean("CONTENT"), JAXBElementBeanResourceMediaType.class, MediaType.valueOf("application/foo+xml"));
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanRepresentationError() {
         final WebTarget target = target("JAXBElementBeanResource");
 
@@ -203,6 +214,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBElementBeanTextRepresentation() {
         _test(new JaxbBean("CONTENT"), JAXBElementBeanTextResource.class, MediaType.TEXT_XML_TYPE);
     }
@@ -230,6 +242,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBTypeRepresentation() {
         final WebTarget target = target("JAXBTypeResource");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -244,6 +257,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBTypeRepresentationMediaType() {
         final WebTarget target = target("JAXBTypeResourceMediaType");
         final JaxbBean in = new JaxbBean("CONTENT");
@@ -278,6 +292,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBObjectRepresentation() {
         final WebTarget target = target("JAXBObjectResource");
         final Object in = new JaxbBean("CONTENT");
@@ -292,6 +307,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBObjectRepresentationMediaType() {
         final WebTarget target = target("JAXBObjectResourceMediaType");
         final Object in = new JaxbBean("CONTENT");
@@ -300,6 +316,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBObjectRepresentationError() {
         final WebTarget target = target("JAXBObjectResource");
 
@@ -393,6 +410,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBArrayRepresentation() {
         final WebTarget target = target("JAXBArrayResource");
 
@@ -417,6 +435,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationMediaType() {
         final WebTarget target = target("JAXBListResourceMediaType");
 
@@ -472,6 +491,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testJAXBListRepresentationError() {
         final WebTarget target = target("JAXBListResource");
 
@@ -535,6 +555,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testAdditionalClasses() throws Exception {
         final ComplexJaxbBean nonJaxbBean = target("AdditionalClassesResource").request().get(ComplexJaxbBean.class);
         final Object simpleBean = nonJaxbBean.getSimpleBean();
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EmptyEntityTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EmptyEntityTest.java
index 43c3562..0096c5a 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EmptyEntityTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EmptyEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,7 +28,7 @@
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.EmptyEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.NonEmptyEntity;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Use-cases to check whether empty class causes problems (JERSEY-2824 reproducer).
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringClientTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringClientTest.java
index 973b01a..0fa7b14 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringClientTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,19 +32,21 @@
 import org.glassfish.jersey.message.filtering.EntityFilteringFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ManyFilteringsOnClassEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.OneFilteringOnClassEntity;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class EntityFilteringClientTest extends EntityFilteringTest {
 
     public static final MediaType ENTITY_FILTERING = new MediaType("entity", "filtering");
@@ -76,6 +78,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testEntityAnnotationsPrimaryView() throws Exception {
         final ClientConfig config = new ClientConfig()
                 .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, PrimaryDetailedView.Factory.get());
@@ -95,6 +98,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testEntityAnnotationsDefaultView() throws Exception {
         final String fields = target()
                 .request()
@@ -107,6 +111,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testEntityAnnotationsInvalidView() throws Exception {
         final String fields = target()
                 .request()
@@ -120,17 +125,20 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testConfigurationPrimaryView() throws Exception {
         testConfiguration("field,accessor,property,subEntities.field2,subEntities.property2,subEntities.property1,"
                 + "subEntities.field1,defaultEntities.field,defaultEntities.property", PrimaryDetailedView.Factory.get());
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testConfigurationDefaultView() throws Exception {
         testConfiguration("", new DefaultFilteringScope());
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testConfigurationMultipleViews() throws Exception {
         testConfiguration("field,accessor,property,subEntities.field2,subEntities.property2,subEntities.property1,"
                         + "subEntities.field1,defaultEntities.field,defaultEntities.property", PrimaryDetailedView.Factory.get(),
@@ -151,6 +159,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testInvalidConfiguration() throws Exception {
         final ClientConfig config = new ClientConfig()
                 .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, "invalid_value");
@@ -166,6 +175,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testEntityAnnotationsOverConfiguration() throws Exception {
         final ClientConfig config = new ClientConfig()
                 .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, SecondaryDetailedView.Factory.get());
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringOnClassTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringOnClassTest.java
index 912c24d..16235d3 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringOnClassTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringOnClassTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,7 +32,7 @@
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ManyFilteringsOnClassEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.OneFilteringOnClassEntity;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Use-cases with entity-filtering annotations on class.
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringOnPropertiesTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringOnPropertiesTest.java
index 22603ab..bb41fdb 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringOnPropertiesTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringOnPropertiesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,7 +32,7 @@
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ManyFilteringsOnPropertiesEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.OneFilteringOnPropertiesEntity;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Use-cases with entity-filtering annotations on properties.
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringScopesTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringScopesTest.java
index 5f910fb..64a5366 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringScopesTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringScopesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,7 +28,7 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ComplexEntity;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringServerTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringServerTest.java
index 4d8303b..7e2a9ba 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringServerTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/EntityFilteringServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,15 +29,15 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ManyFilteringsOnClassEntity;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
+@Suite
+@SelectClasses({
         EntityFilteringServerTest.ConfigurationServerTest.class,
         EntityFilteringServerTest.ConfigurationDefaultViewServerTest.class,
         EntityFilteringServerTest.AnnotationsServerTest.class,
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEmptyEntityTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEmptyEntityTest.java
index b2ee42c..9f7da5a 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEmptyEntityTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEmptyEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,6 @@
 
 package org.glassfish.jersey.tests.e2e.entity.filtering.json;
 
-import java.util.Arrays;
-
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -33,30 +31,40 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.EmptyEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.NonEmptyEntity;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
 /**
  * Use-cases to check whether empty class causes problems (JERSEY-2824 reproducer).
  *
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class JsonEmptyEntityTest extends JerseyTest {
+@Suite
+@SelectClasses({
+        JsonEmptyEntityTest.JacksonFeatureJsonEmptyEntityTest.class,
+        JsonEmptyEntityTest.MoxyJsonFeatureJsonEmptyEntityTest.class
+})
+public class JsonEmptyEntityTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][] {{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static class MoxyJsonFeatureJsonEmptyEntityTest extends JsonEmptyEntityTemplateTest {
+        public MoxyJsonFeatureJsonEmptyEntityTest() {
+            super(MoxyJsonFeature.class);
+        }
+    }
+
+    public static class JacksonFeatureJsonEmptyEntityTest extends JsonEmptyEntityTemplateTest {
+        public JacksonFeatureJsonEmptyEntityTest() {
+            super(JacksonFeature.class);
+        }
     }
 
     @Path("/")
@@ -77,32 +85,35 @@
         }
     }
 
-    public JsonEmptyEntityTest(final Class<Feature> filteringProvider) {
-        super(new ResourceConfig(Resource.class, EntityFilteringFeature.class)
-                .register(filteringProvider)
-                .register(new ContextResolver<ObjectMapper>() {
-                    @Override
-                    public ObjectMapper getContext(final Class<?> type) {
-                        return new ObjectMapper()
-                                .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
-                                .setSerializationInclusion(JsonInclude.Include.NON_NULL);
-                    }
-                }));
+    public abstract static class JsonEmptyEntityTemplateTest extends JerseyTest {
 
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
-    }
+        public JsonEmptyEntityTemplateTest(final Class<? extends Feature> filteringProvider) {
+            super(new ResourceConfig(Resource.class, EntityFilteringFeature.class)
+                    .register(filteringProvider)
+                    .register(new ContextResolver<ObjectMapper>() {
+                        @Override
+                        public ObjectMapper getContext(final Class<?> type) {
+                            return new ObjectMapper()
+                                    .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
+                                    .setSerializationInclusion(JsonInclude.Include.NON_NULL);
+                        }
+                    }));
 
-    @Test
-    public void testNonEmptyEntity() throws Exception {
-        final NonEmptyEntity entity = target("nonEmptyEntity").request().get(NonEmptyEntity.class);
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
+        }
 
-        assertThat(entity.getValue(), is("foo"));
-        assertThat(entity.getEmptyEntity(), nullValue());
-    }
+        @Test
+        public void testNonEmptyEntity() throws Exception {
+            final NonEmptyEntity entity = target("nonEmptyEntity").request().get(NonEmptyEntity.class);
 
-    @Test
-    public void testEmptyEntity() throws Exception {
-        assertThat(target("emptyEntity").request().get(String.class), is("{}"));
+            assertThat(entity.getValue(), is("foo"));
+            assertThat(entity.getEmptyEntity(), nullValue());
+        }
+
+        @Test
+        public void testEmptyEntity() throws Exception {
+            assertThat(target("emptyEntity").request().get(String.class), is("{}"));
+        }
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringClientTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringClientTest.java
index 9180c2e..1741eae 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringClientTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,7 +17,6 @@
 package org.glassfish.jersey.tests.e2e.entity.filtering.json;
 
 import java.lang.annotation.Annotation;
-import java.util.Arrays;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
@@ -46,42 +45,240 @@
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ManyFilteringsSubEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.OneFilteringOnClassEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.OneFilteringSubEntity;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class JsonEntityFilteringClientTest extends JerseyTest {
+@Suite
+@SelectClasses({
+        JsonEntityFilteringClientTest.JacksonFeatureJsonEntityFilteringClientTest.class,
+        JsonEntityFilteringClientTest.JsonEntityFilteringClientTemplateTest.class,
+        JsonEntityFilteringClientTest.MoxyJsonFeatureJsonEntityFilteringClientTest.class
+})
+public class JsonEntityFilteringClientTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][] {{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static class MoxyJsonFeatureJsonEntityFilteringClientTest extends JsonEntityFilteringClientTemplateTest {
+        public MoxyJsonFeatureJsonEntityFilteringClientTest() {
+            super(MoxyJsonFeature.class);
+        }
     }
 
-    @Parameterized.Parameter
-    public Class<Feature> filteringProvider;
-
-    @Override
-    protected Application configure() {
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
-
-        return new ResourceConfig()
-                // Resources.
-                .register(Resource.class);
+    public static class JacksonFeatureJsonEntityFilteringClientTest extends JsonEntityFilteringClientTemplateTest {
+        public JacksonFeatureJsonEntityFilteringClientTest() {
+            super(JacksonFeature.class);
+        }
     }
 
-    @Override
-    protected void configureClient(final ClientConfig config) {
-        config.register(EntityFilteringFeature.class).register(filteringProvider);
+    public abstract static class JsonEntityFilteringClientTemplateTest extends JerseyTest {
+        private Class<? extends Feature> filteringProvider;
+
+        public JsonEntityFilteringClientTemplateTest(Class<? extends Feature> filteringProvider) {
+            this.filteringProvider = filteringProvider;
+        }
+
+        @Override
+        protected Application configure() {
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
+
+            return new ResourceConfig()
+                    // Resources.
+                    .register(Resource.class);
+        }
+
+        @Override
+        protected void configureClient(final ClientConfig config) {
+            config.register(EntityFilteringFeature.class).register(filteringProvider);
+        }
+
+        @Test
+        public void testEntityAnnotationsPrimaryView() throws Exception {
+            final OneFilteringOnClassEntity entity = target()
+                    .request()
+                    .post(Entity.entity(
+                                    OneFilteringOnClassEntity.INSTANCE,
+                                    MediaType.APPLICATION_JSON_TYPE,
+                                    new Annotation[] {PrimaryDetailedView.Factory.get()}),
+                            OneFilteringOnClassEntity.class);
+
+            _testPrimaryViewEntity(entity);
+        }
+
+        @Test
+        public void testEntityAnnotationsDefaultView() throws Exception {
+            final OneFilteringOnClassEntity entity = target()
+                    .request()
+                    .post(Entity.entity(
+                                    OneFilteringOnClassEntity.INSTANCE,
+                                    MediaType.APPLICATION_JSON_TYPE,
+                                    new Annotation[] {new DefaultFilteringScope()}),
+                            OneFilteringOnClassEntity.class);
+
+            _testEmptyEntity(entity);
+        }
+
+        @Test
+        public void testEntityAnnotationsInvalidView() throws Exception {
+            final OneFilteringOnClassEntity entity = target()
+                    .request()
+                    .post(Entity.entity(
+                                    OneFilteringOnClassEntity.INSTANCE,
+                                    MediaType.APPLICATION_JSON_TYPE,
+                                    new Annotation[] {CustomAnnotationLiteral.INSTANCE}),
+                            OneFilteringOnClassEntity.class);
+
+            _testEmptyEntity(entity);
+        }
+
+        @Test
+        public void testConfigurationPrimaryView() throws Exception {
+            _testPrimaryViewEntity(retrieveEntity(PrimaryDetailedView.Factory.get()));
+        }
+
+        @Test
+        public void testConfigurationDefaultView() throws Exception {
+            _testEmptyEntity(retrieveEntity(new DefaultFilteringScope()));
+        }
+
+        @Test
+        public void testConfigurationMultipleViews() throws Exception {
+            _testPrimaryViewEntity(retrieveEntity(PrimaryDetailedView.Factory.get(), CustomAnnotationLiteral.INSTANCE));
+        }
+
+        private OneFilteringOnClassEntity retrieveEntity(final Annotation... annotations) {
+            final ClientConfig config = new ClientConfig()
+                    .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE,
+                            annotations.length == 1 ? annotations[0] : annotations);
+            configureClient(config);
+
+            return ClientBuilder.newClient(config)
+                    .target(getBaseUri())
+                    .request()
+                    .post(Entity.entity(OneFilteringOnClassEntity.INSTANCE, MediaType.APPLICATION_JSON_TYPE),
+                            OneFilteringOnClassEntity.class);
+        }
+
+        @Test
+        public void testInvalidConfiguration() throws Exception {
+            final ClientConfig config = new ClientConfig()
+                    .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, "invalid_value");
+            configureClient(config);
+
+            final OneFilteringOnClassEntity entity =
+                    ClientBuilder.newClient(config)
+                            .target(getBaseUri())
+                            .request()
+                            .post(Entity.entity(OneFilteringOnClassEntity.INSTANCE, MediaType.APPLICATION_JSON_TYPE),
+                                    OneFilteringOnClassEntity.class);
+
+            _testEmptyEntity(entity);
+        }
+
+        @Test
+        public void testEntityAnnotationsOverConfiguration() throws Exception {
+            final ClientConfig config = new ClientConfig()
+                    .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, SecondaryDetailedView.Factory.get());
+            configureClient(config);
+
+            final ManyFilteringsOnClassEntity entity = ClientBuilder.newClient(config)
+                    .target(getBaseUri())
+                    .request()
+                    .post(Entity.entity(
+                                    ManyFilteringsOnClassEntity.INSTANCE,
+                                    MediaType.APPLICATION_JSON_TYPE,
+                                    new Annotation[] {PrimaryDetailedView.Factory.get()}),
+                            ManyFilteringsOnClassEntity.class);
+
+            // ManyFilteringsOnClassEntity
+            assertThat(entity.field, is(50));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.filtered;
+            assertThat(filtered, notNullValue());
+            assertThat(filtered.field, is(0));
+            assertThat(filtered.getProperty(), nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.defaultEntities, notNullValue());
+            assertThat(entity.defaultEntities.size(), is(1));
+            final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
+            assertThat(defaultFilteringSubEntity.field, is(true));
+            assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
+
+            // OneFilteringSubEntity
+            assertThat(entity.oneEntities, notNullValue());
+            assertThat(entity.oneEntities.size(), is(1));
+            final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
+            assertThat(oneFilteringSubEntity.field1, is(20));
+            assertThat(oneFilteringSubEntity.field2, is(30));
+            assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
+            assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
+
+            // ManyFilteringsSubEntity
+            assertThat(entity.manyEntities, notNullValue());
+            assertThat(entity.manyEntities.size(), is(1));
+            final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
+            assertThat(manyFilteringsSubEntity.field1, is(60));
+            assertThat(manyFilteringsSubEntity.field2, is(0));
+            assertThat(manyFilteringsSubEntity.getProperty1(), is("property1"));
+            assertThat(manyFilteringsSubEntity.getProperty2(), nullValue());
+        }
+
+        private void _testEmptyEntity(final OneFilteringOnClassEntity entity) {
+            // OneFilteringOnClassEntity
+            assertThat(entity.field, is(0));
+            assertThat(entity.accessorTransient, nullValue());
+            assertThat(entity.getProperty(), nullValue());
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.getFiltered();
+            assertThat(filtered, nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.getDefaultEntities(), nullValue());
+
+            // OneFilteringSubEntity
+            assertThat(entity.getSubEntities(), nullValue());
+        }
+
+        private void _testPrimaryViewEntity(final OneFilteringOnClassEntity entity) {
+            // OneFilteringOnClassEntity
+            assertThat(entity.field, is(10));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.getFiltered();
+            assertThat(filtered, notNullValue());
+            assertThat(filtered.field, is(0));
+            assertThat(filtered.getProperty(), nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.getDefaultEntities(), notNullValue());
+            assertThat(entity.getDefaultEntities().size(), is(1));
+            final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.getDefaultEntities().get(0);
+            assertThat(defaultFilteringSubEntity.field, is(true));
+            assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
+
+            // OneFilteringSubEntity
+            assertThat(entity.getSubEntities(), notNullValue());
+            assertThat(entity.getSubEntities().size(), is(1));
+            final OneFilteringSubEntity oneFilteringSubEntity = entity.getSubEntities().get(0);
+            assertThat(oneFilteringSubEntity.field1, is(20));
+            assertThat(oneFilteringSubEntity.field2, is(30));
+            assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
+            assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
+        }
     }
 
     @Path("/")
@@ -94,184 +291,4 @@
             return value;
         }
     }
-
-    @Test
-    public void testEntityAnnotationsPrimaryView() throws Exception {
-        final OneFilteringOnClassEntity entity = target()
-                .request()
-                .post(Entity.entity(
-                                OneFilteringOnClassEntity.INSTANCE,
-                                MediaType.APPLICATION_JSON_TYPE,
-                                new Annotation[] {PrimaryDetailedView.Factory.get()}),
-                        OneFilteringOnClassEntity.class);
-
-        _testPrimaryViewEntity(entity);
-    }
-
-    @Test
-    public void testEntityAnnotationsDefaultView() throws Exception {
-        final OneFilteringOnClassEntity entity = target()
-                .request()
-                .post(Entity.entity(
-                                OneFilteringOnClassEntity.INSTANCE,
-                                MediaType.APPLICATION_JSON_TYPE,
-                                new Annotation[] {new DefaultFilteringScope()}),
-                        OneFilteringOnClassEntity.class);
-
-        _testEmptyEntity(entity);
-    }
-
-    @Test
-    public void testEntityAnnotationsInvalidView() throws Exception {
-        final OneFilteringOnClassEntity entity = target()
-                .request()
-                .post(Entity.entity(
-                                OneFilteringOnClassEntity.INSTANCE,
-                                MediaType.APPLICATION_JSON_TYPE,
-                                new Annotation[] {CustomAnnotationLiteral.INSTANCE}),
-                        OneFilteringOnClassEntity.class);
-
-        _testEmptyEntity(entity);
-    }
-
-    @Test
-    public void testConfigurationPrimaryView() throws Exception {
-        _testPrimaryViewEntity(retrieveEntity(PrimaryDetailedView.Factory.get()));
-    }
-
-    @Test
-    public void testConfigurationDefaultView() throws Exception {
-        _testEmptyEntity(retrieveEntity(new DefaultFilteringScope()));
-    }
-
-    @Test
-    public void testConfigurationMultipleViews() throws Exception {
-        _testPrimaryViewEntity(retrieveEntity(PrimaryDetailedView.Factory.get(), CustomAnnotationLiteral.INSTANCE));
-    }
-
-    private OneFilteringOnClassEntity retrieveEntity(final Annotation... annotations) {
-        final ClientConfig config = new ClientConfig()
-                .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, annotations.length == 1 ? annotations[0] : annotations);
-        configureClient(config);
-
-        return ClientBuilder.newClient(config)
-                .target(getBaseUri())
-                .request()
-                .post(Entity.entity(OneFilteringOnClassEntity.INSTANCE, MediaType.APPLICATION_JSON_TYPE),
-                        OneFilteringOnClassEntity.class);
-    }
-
-    @Test
-    public void testInvalidConfiguration() throws Exception {
-        final ClientConfig config = new ClientConfig()
-                .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, "invalid_value");
-        configureClient(config);
-
-        final OneFilteringOnClassEntity entity =
-                ClientBuilder.newClient(config)
-                        .target(getBaseUri())
-                        .request()
-                        .post(Entity.entity(OneFilteringOnClassEntity.INSTANCE, MediaType.APPLICATION_JSON_TYPE),
-                                OneFilteringOnClassEntity.class);
-
-        _testEmptyEntity(entity);
-    }
-
-    @Test
-    public void testEntityAnnotationsOverConfiguration() throws Exception {
-        final ClientConfig config = new ClientConfig()
-                .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, SecondaryDetailedView.Factory.get());
-        configureClient(config);
-
-        final ManyFilteringsOnClassEntity entity = ClientBuilder.newClient(config)
-                .target(getBaseUri())
-                .request()
-                .post(Entity.entity(
-                                ManyFilteringsOnClassEntity.INSTANCE,
-                                MediaType.APPLICATION_JSON_TYPE,
-                                new Annotation[] {PrimaryDetailedView.Factory.get()}),
-                        ManyFilteringsOnClassEntity.class);
-
-        // ManyFilteringsOnClassEntity
-        assertThat(entity.field, is(50));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.filtered;
-        assertThat(filtered, notNullValue());
-        assertThat(filtered.field, is(0));
-        assertThat(filtered.getProperty(), nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.defaultEntities, notNullValue());
-        assertThat(entity.defaultEntities.size(), is(1));
-        final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
-        assertThat(defaultFilteringSubEntity.field, is(true));
-        assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
-
-        // OneFilteringSubEntity
-        assertThat(entity.oneEntities, notNullValue());
-        assertThat(entity.oneEntities.size(), is(1));
-        final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
-        assertThat(oneFilteringSubEntity.field1, is(20));
-        assertThat(oneFilteringSubEntity.field2, is(30));
-        assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
-        assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
-
-        // ManyFilteringsSubEntity
-        assertThat(entity.manyEntities, notNullValue());
-        assertThat(entity.manyEntities.size(), is(1));
-        final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
-        assertThat(manyFilteringsSubEntity.field1, is(60));
-        assertThat(manyFilteringsSubEntity.field2, is(0));
-        assertThat(manyFilteringsSubEntity.getProperty1(), is("property1"));
-        assertThat(manyFilteringsSubEntity.getProperty2(), nullValue());
-    }
-
-    private void _testEmptyEntity(final OneFilteringOnClassEntity entity) {
-        // OneFilteringOnClassEntity
-        assertThat(entity.field, is(0));
-        assertThat(entity.accessorTransient, nullValue());
-        assertThat(entity.getProperty(), nullValue());
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.getFiltered();
-        assertThat(filtered, nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.getDefaultEntities(), nullValue());
-
-        // OneFilteringSubEntity
-        assertThat(entity.getSubEntities(), nullValue());
-    }
-
-    private void _testPrimaryViewEntity(final OneFilteringOnClassEntity entity) {
-        // OneFilteringOnClassEntity
-        assertThat(entity.field, is(10));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.getFiltered();
-        assertThat(filtered, notNullValue());
-        assertThat(filtered.field, is(0));
-        assertThat(filtered.getProperty(), nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.getDefaultEntities(), notNullValue());
-        assertThat(entity.getDefaultEntities().size(), is(1));
-        final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.getDefaultEntities().get(0);
-        assertThat(defaultFilteringSubEntity.field, is(true));
-        assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
-
-        // OneFilteringSubEntity
-        assertThat(entity.getSubEntities(), notNullValue());
-        assertThat(entity.getSubEntities().size(), is(1));
-        final OneFilteringSubEntity oneFilteringSubEntity = entity.getSubEntities().get(0);
-        assertThat(oneFilteringSubEntity.field1, is(20));
-        assertThat(oneFilteringSubEntity.field2, is(30));
-        assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
-        assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
-    }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringOnClassTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringOnClassTest.java
index e18eeee..49fafb9 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringOnClassTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringOnClassTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,7 +17,6 @@
 package org.glassfish.jersey.tests.e2e.entity.filtering.json;
 
 import java.lang.annotation.Annotation;
-import java.util.Arrays;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
@@ -42,33 +41,277 @@
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ManyFilteringsSubEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.OneFilteringOnClassEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.OneFilteringSubEntity;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Use-cases with entity-filtering annotations on class, JSON output.
  *
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class JsonEntityFilteringOnClassTest extends JerseyTest {
+@Suite
+@SelectClasses({
+        JsonEntityFilteringOnClassTest.JacksonFeatureJsonEntityFilteringOnClassTest.class,
+        JsonEntityFilteringOnClassTest.JsonEntityFilteringOnClassTemplateTest.class,
+        JsonEntityFilteringOnClassTest.MoxyJsonFeatureJsonEntityFilteringOnClassTest.class
+})
+public class JsonEntityFilteringOnClassTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][] {{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static class MoxyJsonFeatureJsonEntityFilteringOnClassTest extends JsonEntityFilteringOnClassTemplateTest {
+        public MoxyJsonFeatureJsonEntityFilteringOnClassTest() {
+            super(MoxyJsonFeature.class);
+        }
     }
 
-    public JsonEntityFilteringOnClassTest(final Class<Feature> filteringProvider) {
-        super(new ResourceConfig(Resource.class, EntityFilteringFeature.class).register(filteringProvider));
+    public static class JacksonFeatureJsonEntityFilteringOnClassTest extends JsonEntityFilteringOnClassTemplateTest {
+        public JacksonFeatureJsonEntityFilteringOnClassTest() {
+            super(JacksonFeature.class);
+        }
+    }
 
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
+    public abstract static class JsonEntityFilteringOnClassTemplateTest extends JerseyTest {
+        public JsonEntityFilteringOnClassTemplateTest(final Class<? extends Feature> filteringProvider) {
+            super(new ResourceConfig(Resource.class, EntityFilteringFeature.class).register(filteringProvider));
+
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
+        }
+
+        @Test
+        public void testOneEntityFilteringOnClass() throws Exception {
+            final OneFilteringOnClassEntity entity = target("OneFilteringEntity").request().get(OneFilteringOnClassEntity.class);
+
+            // OneFilteringOnClassEntity
+            assertThat(entity.field, is(10));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.getFiltered();
+            assertThat(filtered, notNullValue());
+            assertThat(filtered.field, is(0));
+            assertThat(filtered.getProperty(), nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.getDefaultEntities(), notNullValue());
+            assertThat(entity.getDefaultEntities().size(), is(1));
+            final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.getDefaultEntities().get(0);
+            assertThat(defaultFilteringSubEntity.field, is(true));
+            assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
+
+            // OneFilteringSubEntity
+            assertThat(entity.getSubEntities(), notNullValue());
+            assertThat(entity.getSubEntities().size(), is(1));
+            final OneFilteringSubEntity oneFilteringSubEntity = entity.getSubEntities().get(0);
+            assertThat(oneFilteringSubEntity.field1, is(20));
+            assertThat(oneFilteringSubEntity.field2, is(30));
+            assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
+            assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
+        }
+
+        @Test
+        public void testOneEntityFilteringOnClassDefaultViewResponse() throws Exception {
+            final OneFilteringOnClassEntity entity = target("OneFilteringEntityDefaultViewResponse").request()
+                    .get(OneFilteringOnClassEntity.class);
+
+            // OneFilteringOnClassEntity
+            assertThat(entity.field, is(0));
+            assertThat(entity.accessorTransient, nullValue());
+            assertThat(entity.getProperty(), nullValue());
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.getFiltered();
+            assertThat(filtered, nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.getDefaultEntities(), nullValue());
+
+            // OneFilteringSubEntity
+            assertThat(entity.getSubEntities(), nullValue());
+        }
+
+        @Test
+        public void testOneEntityFilteringOnClassDefaultView() throws Exception {
+            final OneFilteringOnClassEntity entity = target("OneFilteringEntityDefaultView").request()
+                    .get(OneFilteringOnClassEntity.class);
+
+            // OneFilteringOnClassEntity
+            assertThat(entity.field, is(0));
+            assertThat(entity.accessorTransient, nullValue());
+            assertThat(entity.getProperty(), nullValue());
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.getFiltered();
+            assertThat(filtered, nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.getDefaultEntities(), nullValue());
+
+            // OneFilteringSubEntity
+            assertThat(entity.getSubEntities(), nullValue());
+        }
+
+        @Test
+        public void testMultipleViewsOnClass() throws Exception {
+            testOneEntityFilteringOnClass();
+            testOneEntityFilteringOnClassDefaultView();
+        }
+
+        @Test
+        public void testManyFilteringsEntityPrimaryView() throws Exception {
+            final ManyFilteringsOnClassEntity entity = target("ManyFilteringsEntityPrimaryView").request()
+                    .get(ManyFilteringsOnClassEntity.class);
+
+            // ManyFilteringsOnClassEntity
+            assertThat(entity.field, is(50));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.filtered;
+            assertThat(filtered, notNullValue());
+            assertThat(filtered.field, is(0));
+            assertThat(filtered.getProperty(), nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.defaultEntities, notNullValue());
+            assertThat(entity.defaultEntities.size(), is(1));
+            final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
+            assertThat(defaultFilteringSubEntity.field, is(true));
+            assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
+
+            // OneFilteringSubEntity
+            assertThat(entity.oneEntities, notNullValue());
+            assertThat(entity.oneEntities.size(), is(1));
+            final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
+            assertThat(oneFilteringSubEntity.field1, is(20));
+            assertThat(oneFilteringSubEntity.field2, is(30));
+            assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
+            assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
+
+            // ManyFilteringsSubEntity
+            assertThat(entity.manyEntities, notNullValue());
+            assertThat(entity.manyEntities.size(), is(1));
+            final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
+            assertThat(manyFilteringsSubEntity.field1, is(60));
+            assertThat(manyFilteringsSubEntity.field2, is(0));
+            assertThat(manyFilteringsSubEntity.getProperty1(), is("property1"));
+            assertThat(manyFilteringsSubEntity.getProperty2(), nullValue());
+        }
+
+        @Test
+        public void testManyFilteringsEntitySecondaryView() throws Exception {
+            final ManyFilteringsOnClassEntity entity = target("ManyFilteringsEntitySecondaryView").request()
+                    .get(ManyFilteringsOnClassEntity.class);
+
+            // ManyFilteringsOnClassEntity
+            assertThat(entity.field, is(50));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.filtered;
+            assertThat(filtered, notNullValue());
+            assertThat(filtered.field, is(0));
+            assertThat(filtered.getProperty(), nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.defaultEntities, notNullValue());
+            assertThat(entity.defaultEntities.size(), is(1));
+            final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
+            assertThat(defaultFilteringSubEntity.field, is(true));
+            assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
+
+            // OneFilteringSubEntity
+            assertThat(entity.oneEntities, notNullValue());
+            assertThat(entity.oneEntities.size(), is(1));
+            final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
+            assertThat(oneFilteringSubEntity.field1, is(20));
+            assertThat(oneFilteringSubEntity.field2, is(0));
+            assertThat(oneFilteringSubEntity.getProperty1(), nullValue());
+            assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
+
+            // ManyFilteringsSubEntity
+            assertThat(entity.manyEntities, notNullValue());
+            assertThat(entity.manyEntities.size(), is(1));
+            final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
+            assertThat(manyFilteringsSubEntity.field1, is(60));
+            assertThat(manyFilteringsSubEntity.field2, is(70));
+            assertThat(manyFilteringsSubEntity.getProperty1(), nullValue());
+            assertThat(manyFilteringsSubEntity.getProperty2(), is("property2"));
+        }
+
+        @Test
+        public void testManyFilteringsEntityDefaultView() throws Exception {
+            final ManyFilteringsOnClassEntity entity = target("ManyFilteringsEntityDefaultView").request()
+                    .get(ManyFilteringsOnClassEntity.class);
+
+            // ManyFilteringsOnClassEntity
+            assertThat(entity.field, is(0));
+            assertThat(entity.accessorTransient, nullValue());
+            assertThat(entity.getProperty(), nullValue());
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.filtered;
+            assertThat(filtered, nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.defaultEntities, nullValue());
+
+            // OneFilteringSubEntity
+            assertThat(entity.oneEntities, nullValue());
+
+            // ManyFilteringsSubEntity
+            assertThat(entity.manyEntities, nullValue());
+        }
+
+        @Test
+        public void testManyFilteringsEntityManyViews() throws Exception {
+            final ManyFilteringsOnClassEntity entity = target("ManyFilteringsEntityManyViews").request()
+                    .get(ManyFilteringsOnClassEntity.class);
+
+            // ManyFilteringsOnClassEntity
+            assertThat(entity.field, is(50));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.filtered;
+            assertThat(filtered, notNullValue());
+            assertThat(filtered.field, is(0));
+            assertThat(filtered.getProperty(), nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.defaultEntities, notNullValue());
+            assertThat(entity.defaultEntities.size(), is(1));
+            final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
+            assertThat(defaultFilteringSubEntity.field, is(true));
+            assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
+
+            // OneFilteringSubEntity
+            assertThat(entity.oneEntities, notNullValue());
+            assertThat(entity.oneEntities.size(), is(1));
+            final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
+            assertThat(oneFilteringSubEntity.field1, is(20));
+            assertThat(oneFilteringSubEntity.field2, is(30));
+            assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
+            assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
+
+            // ManyFilteringsSubEntity
+            assertThat(entity.manyEntities, notNullValue());
+            assertThat(entity.manyEntities.size(), is(1));
+            final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
+            assertThat(manyFilteringsSubEntity.field1, is(60));
+            assertThat(manyFilteringsSubEntity.field2, is(70));
+            assertThat(manyFilteringsSubEntity.getProperty1(), is("property1"));
+            assertThat(manyFilteringsSubEntity.getProperty2(), is("property2"));
+        }
     }
 
     @Path("/")
@@ -130,234 +373,4 @@
             return ManyFilteringsOnClassEntity.INSTANCE;
         }
     }
-
-    @Test
-    public void testOneEntityFilteringOnClass() throws Exception {
-        final OneFilteringOnClassEntity entity = target("OneFilteringEntity").request().get(OneFilteringOnClassEntity.class);
-
-        // OneFilteringOnClassEntity
-        assertThat(entity.field, is(10));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.getFiltered();
-        assertThat(filtered, notNullValue());
-        assertThat(filtered.field, is(0));
-        assertThat(filtered.getProperty(), nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.getDefaultEntities(), notNullValue());
-        assertThat(entity.getDefaultEntities().size(), is(1));
-        final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.getDefaultEntities().get(0);
-        assertThat(defaultFilteringSubEntity.field, is(true));
-        assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
-
-        // OneFilteringSubEntity
-        assertThat(entity.getSubEntities(), notNullValue());
-        assertThat(entity.getSubEntities().size(), is(1));
-        final OneFilteringSubEntity oneFilteringSubEntity = entity.getSubEntities().get(0);
-        assertThat(oneFilteringSubEntity.field1, is(20));
-        assertThat(oneFilteringSubEntity.field2, is(30));
-        assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
-        assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
-    }
-
-    @Test
-    public void testOneEntityFilteringOnClassDefaultViewResponse() throws Exception {
-        final OneFilteringOnClassEntity entity = target("OneFilteringEntityDefaultViewResponse").request()
-                .get(OneFilteringOnClassEntity.class);
-
-        // OneFilteringOnClassEntity
-        assertThat(entity.field, is(0));
-        assertThat(entity.accessorTransient, nullValue());
-        assertThat(entity.getProperty(), nullValue());
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.getFiltered();
-        assertThat(filtered, nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.getDefaultEntities(), nullValue());
-
-        // OneFilteringSubEntity
-        assertThat(entity.getSubEntities(), nullValue());
-    }
-
-    @Test
-    public void testOneEntityFilteringOnClassDefaultView() throws Exception {
-        final OneFilteringOnClassEntity entity = target("OneFilteringEntityDefaultView").request()
-                .get(OneFilteringOnClassEntity.class);
-
-        // OneFilteringOnClassEntity
-        assertThat(entity.field, is(0));
-        assertThat(entity.accessorTransient, nullValue());
-        assertThat(entity.getProperty(), nullValue());
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.getFiltered();
-        assertThat(filtered, nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.getDefaultEntities(), nullValue());
-
-        // OneFilteringSubEntity
-        assertThat(entity.getSubEntities(), nullValue());
-    }
-
-    @Test
-    public void testMultipleViewsOnClass() throws Exception {
-        testOneEntityFilteringOnClass();
-        testOneEntityFilteringOnClassDefaultView();
-    }
-
-    @Test
-    public void testManyFilteringsEntityPrimaryView() throws Exception {
-        final ManyFilteringsOnClassEntity entity = target("ManyFilteringsEntityPrimaryView").request()
-                .get(ManyFilteringsOnClassEntity.class);
-
-        // ManyFilteringsOnClassEntity
-        assertThat(entity.field, is(50));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.filtered;
-        assertThat(filtered, notNullValue());
-        assertThat(filtered.field, is(0));
-        assertThat(filtered.getProperty(), nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.defaultEntities, notNullValue());
-        assertThat(entity.defaultEntities.size(), is(1));
-        final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
-        assertThat(defaultFilteringSubEntity.field, is(true));
-        assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
-
-        // OneFilteringSubEntity
-        assertThat(entity.oneEntities, notNullValue());
-        assertThat(entity.oneEntities.size(), is(1));
-        final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
-        assertThat(oneFilteringSubEntity.field1, is(20));
-        assertThat(oneFilteringSubEntity.field2, is(30));
-        assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
-        assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
-
-        // ManyFilteringsSubEntity
-        assertThat(entity.manyEntities, notNullValue());
-        assertThat(entity.manyEntities.size(), is(1));
-        final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
-        assertThat(manyFilteringsSubEntity.field1, is(60));
-        assertThat(manyFilteringsSubEntity.field2, is(0));
-        assertThat(manyFilteringsSubEntity.getProperty1(), is("property1"));
-        assertThat(manyFilteringsSubEntity.getProperty2(), nullValue());
-    }
-
-    @Test
-    public void testManyFilteringsEntitySecondaryView() throws Exception {
-        final ManyFilteringsOnClassEntity entity = target("ManyFilteringsEntitySecondaryView").request()
-                .get(ManyFilteringsOnClassEntity.class);
-
-        // ManyFilteringsOnClassEntity
-        assertThat(entity.field, is(50));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.filtered;
-        assertThat(filtered, notNullValue());
-        assertThat(filtered.field, is(0));
-        assertThat(filtered.getProperty(), nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.defaultEntities, notNullValue());
-        assertThat(entity.defaultEntities.size(), is(1));
-        final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
-        assertThat(defaultFilteringSubEntity.field, is(true));
-        assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
-
-        // OneFilteringSubEntity
-        assertThat(entity.oneEntities, notNullValue());
-        assertThat(entity.oneEntities.size(), is(1));
-        final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
-        assertThat(oneFilteringSubEntity.field1, is(20));
-        assertThat(oneFilteringSubEntity.field2, is(0));
-        assertThat(oneFilteringSubEntity.getProperty1(), nullValue());
-        assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
-
-        // ManyFilteringsSubEntity
-        assertThat(entity.manyEntities, notNullValue());
-        assertThat(entity.manyEntities.size(), is(1));
-        final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
-        assertThat(manyFilteringsSubEntity.field1, is(60));
-        assertThat(manyFilteringsSubEntity.field2, is(70));
-        assertThat(manyFilteringsSubEntity.getProperty1(), nullValue());
-        assertThat(manyFilteringsSubEntity.getProperty2(), is("property2"));
-    }
-
-    @Test
-    public void testManyFilteringsEntityDefaultView() throws Exception {
-        final ManyFilteringsOnClassEntity entity = target("ManyFilteringsEntityDefaultView").request()
-                .get(ManyFilteringsOnClassEntity.class);
-
-        // ManyFilteringsOnClassEntity
-        assertThat(entity.field, is(0));
-        assertThat(entity.accessorTransient, nullValue());
-        assertThat(entity.getProperty(), nullValue());
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.filtered;
-        assertThat(filtered, nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.defaultEntities, nullValue());
-
-        // OneFilteringSubEntity
-        assertThat(entity.oneEntities, nullValue());
-
-        // ManyFilteringsSubEntity
-        assertThat(entity.manyEntities, nullValue());
-    }
-
-    @Test
-    public void testManyFilteringsEntityManyViews() throws Exception {
-        final ManyFilteringsOnClassEntity entity = target("ManyFilteringsEntityManyViews").request()
-                .get(ManyFilteringsOnClassEntity.class);
-
-        // ManyFilteringsOnClassEntity
-        assertThat(entity.field, is(50));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.filtered;
-        assertThat(filtered, notNullValue());
-        assertThat(filtered.field, is(0));
-        assertThat(filtered.getProperty(), nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.defaultEntities, notNullValue());
-        assertThat(entity.defaultEntities.size(), is(1));
-        final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
-        assertThat(defaultFilteringSubEntity.field, is(true));
-        assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
-
-        // OneFilteringSubEntity
-        assertThat(entity.oneEntities, notNullValue());
-        assertThat(entity.oneEntities.size(), is(1));
-        final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
-        assertThat(oneFilteringSubEntity.field1, is(20));
-        assertThat(oneFilteringSubEntity.field2, is(30));
-        assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
-        assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
-
-        // ManyFilteringsSubEntity
-        assertThat(entity.manyEntities, notNullValue());
-        assertThat(entity.manyEntities.size(), is(1));
-        final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
-        assertThat(manyFilteringsSubEntity.field1, is(60));
-        assertThat(manyFilteringsSubEntity.field2, is(70));
-        assertThat(manyFilteringsSubEntity.getProperty1(), is("property1"));
-        assertThat(manyFilteringsSubEntity.getProperty2(), is("property2"));
-    }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringOnPropertiesTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringOnPropertiesTest.java
index 2d107b3..a4abc9f 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringOnPropertiesTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringOnPropertiesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,7 +17,6 @@
 package org.glassfish.jersey.tests.e2e.entity.filtering.json;
 
 import java.lang.annotation.Annotation;
-import java.util.Arrays;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
@@ -42,33 +41,268 @@
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ManyFilteringsSubEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.OneFilteringOnPropertiesEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.OneFilteringSubEntity;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Use-cases with entity-filtering annotations on properties, JSON output.
  *
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class JsonEntityFilteringOnPropertiesTest extends JerseyTest {
+@Suite
+@SelectClasses({
+        JsonEntityFilteringOnPropertiesTest.JacksonFeatureJsonEntityFilteringOnPropertiesTest.class,
+        JsonEntityFilteringOnPropertiesTest.JsonEntityFilteringOnPropertiesTemplateTest.class,
+        JsonEntityFilteringOnPropertiesTest.MoxyJsonFeatureJsonEntityFilteringOnPropertiesTest.class
+})
+public class JsonEntityFilteringOnPropertiesTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][] {{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static class MoxyJsonFeatureJsonEntityFilteringOnPropertiesTest extends JsonEntityFilteringOnPropertiesTemplateTest {
+        public MoxyJsonFeatureJsonEntityFilteringOnPropertiesTest() {
+            super(MoxyJsonFeature.class);
+        }
     }
 
-    public JsonEntityFilteringOnPropertiesTest(final Class<Feature> filteringProvider) {
-        super(new ResourceConfig(Resource.class, EntityFilteringFeature.class).register(filteringProvider));
+    public static class JacksonFeatureJsonEntityFilteringOnPropertiesTest extends JsonEntityFilteringOnPropertiesTemplateTest {
+        public JacksonFeatureJsonEntityFilteringOnPropertiesTest() {
+            super(JacksonFeature.class);
+        }
+    }
 
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
+    public abstract static class JsonEntityFilteringOnPropertiesTemplateTest extends JerseyTest {
+        public JsonEntityFilteringOnPropertiesTemplateTest(final Class<? extends Feature> filteringProvider) {
+            super(new ResourceConfig(Resource.class, EntityFilteringFeature.class).register(filteringProvider));
+
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
+        }
+
+        @Test
+        public void testOneEntityFilteringOnProperties() throws Exception {
+            final OneFilteringOnPropertiesEntity entity = target("OneFilteringEntity").request()
+                    .get(OneFilteringOnPropertiesEntity.class);
+
+            // OneFilteringOnPropertiesEntity
+            assertThat(entity.field, is(80));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.getFiltered();
+            assertThat(filtered, notNullValue());
+            assertThat(filtered.field, is(0));
+            assertThat(filtered.getProperty(), nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.getDefaultEntities(), notNullValue());
+            assertThat(entity.getDefaultEntities().size(), is(1));
+            final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.getDefaultEntities().get(0);
+            assertThat(defaultFilteringSubEntity.field, is(true));
+            assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
+
+            // OneFilteringSubEntity
+            assertThat(entity.getSubEntities(), notNullValue());
+            assertThat(entity.getSubEntities().size(), is(1));
+            final OneFilteringSubEntity oneFilteringSubEntity = entity.getSubEntities().get(0);
+            assertThat(oneFilteringSubEntity.field1, is(20));
+            assertThat(oneFilteringSubEntity.field2, is(30));
+            assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
+            assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
+        }
+
+        @Test
+        public void testOneEntityFilteringOnPropertiesDefaultViewResponse() throws Exception {
+            final OneFilteringOnPropertiesEntity entity = target("OneFilteringEntityDefaultViewResponse").request()
+                    .get(OneFilteringOnPropertiesEntity.class);
+
+            // OneFilteringOnPropertiesEntity
+            assertThat(entity.field, is(80));
+            assertThat(entity.accessorTransient, nullValue());
+            assertThat(entity.getProperty(), nullValue());
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.getFiltered();
+            assertThat(filtered, nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.getDefaultEntities(), nullValue());
+
+            // OneFilteringSubEntity
+            assertThat(entity.getSubEntities(), nullValue());
+        }
+
+        @Test
+        public void testOneEntityFilteringOnPropertiesDefaultView() throws Exception {
+            final OneFilteringOnPropertiesEntity entity = target("OneFilteringEntityDefaultView").request()
+                    .get(OneFilteringOnPropertiesEntity.class);
+
+            // OneFilteringOnPropertiesEntity
+            assertThat(entity.field, is(80));
+            assertThat(entity.accessorTransient, nullValue());
+            assertThat(entity.getProperty(), nullValue());
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.getFiltered();
+            assertThat(filtered, nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.getDefaultEntities(), nullValue());
+
+            // OneFilteringSubEntity
+            assertThat(entity.getSubEntities(), nullValue());
+        }
+
+        @Test
+        public void testMultipleViewsOnProperties() throws Exception {
+            testOneEntityFilteringOnProperties();
+            testOneEntityFilteringOnPropertiesDefaultView();
+        }
+
+        @Test
+        public void testManyFilteringsEntityPrimaryView() throws Exception {
+            final ManyFilteringsOnPropertiesEntity entity = target("ManyFilteringsEntityPrimaryView").request()
+                    .get(ManyFilteringsOnPropertiesEntity.class);
+
+            // ManyFilteringsOnPropertiesEntity
+            assertThat(entity.field, is(90));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.filtered;
+            assertThat(filtered, notNullValue());
+            assertThat(filtered.field, is(0));
+            assertThat(filtered.getProperty(), nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.defaultEntities, notNullValue());
+            assertThat(entity.defaultEntities.size(), is(1));
+            final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
+            assertThat(defaultFilteringSubEntity.field, is(true));
+            assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
+
+            // OneFilteringSubEntity
+            assertThat(entity.oneEntities, notNullValue());
+            assertThat(entity.oneEntities.size(), is(1));
+            final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
+            assertThat(oneFilteringSubEntity.field1, is(20));
+            assertThat(oneFilteringSubEntity.field2, is(30));
+            assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
+            assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
+
+            // ManyFilteringsSubEntity
+            assertThat(entity.manyEntities, nullValue());
+        }
+
+        @Test
+        public void testManyFilteringsEntitySecondaryView() throws Exception {
+            final ManyFilteringsOnPropertiesEntity entity = target("ManyFilteringsEntitySecondaryView").request()
+                    .get(ManyFilteringsOnPropertiesEntity.class);
+
+            // ManyFilteringsOnPropertiesEntity
+            assertThat(entity.field, is(90));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.filtered;
+            assertThat(filtered, notNullValue());
+            assertThat(filtered.field, is(0));
+            assertThat(filtered.getProperty(), nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.defaultEntities, nullValue());
+
+            // OneFilteringSubEntity
+            assertThat(entity.oneEntities, notNullValue());
+            assertThat(entity.oneEntities.size(), is(1));
+            final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
+            assertThat(oneFilteringSubEntity.field1, is(20));
+            assertThat(oneFilteringSubEntity.field2, is(0));
+            assertThat(oneFilteringSubEntity.getProperty1(), nullValue());
+            assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
+
+            // ManyFilteringsSubEntity
+            assertThat(entity.manyEntities, notNullValue());
+            assertThat(entity.manyEntities.size(), is(1));
+            final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
+            assertThat(manyFilteringsSubEntity.field1, is(60));
+            assertThat(manyFilteringsSubEntity.field2, is(70));
+            assertThat(manyFilteringsSubEntity.getProperty1(), nullValue());
+            assertThat(manyFilteringsSubEntity.getProperty2(), is("property2"));
+        }
+
+        @Test
+        public void testManyFilteringsEntityDefaultView() throws Exception {
+            final ManyFilteringsOnPropertiesEntity entity = target("ManyFilteringsEntityDefaultView").request()
+                    .get(ManyFilteringsOnPropertiesEntity.class);
+
+            // ManyFilteringsOnPropertiesEntity
+            assertThat(entity.field, is(90));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), nullValue());
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.filtered;
+            assertThat(filtered, nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.defaultEntities, nullValue());
+
+            // OneFilteringSubEntity
+            assertThat(entity.oneEntities, nullValue());
+
+            // ManyFilteringsSubEntity
+            assertThat(entity.manyEntities, nullValue());
+        }
+
+        @Test
+        public void testManyFilteringsEntityManyViews() throws Exception {
+            final ManyFilteringsOnPropertiesEntity entity = target("ManyFilteringsEntityManyViews").request()
+                    .get(ManyFilteringsOnPropertiesEntity.class);
+
+            // ManyFilteringsOnPropertiesEntity
+            assertThat(entity.field, is(90));
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // FilteredClassEntity
+            final FilteredClassEntity filtered = entity.filtered;
+            assertThat(filtered, notNullValue());
+            assertThat(filtered.field, is(0));
+            assertThat(filtered.getProperty(), nullValue());
+
+            // DefaultFilteringSubEntity
+            assertThat(entity.defaultEntities, notNullValue());
+            assertThat(entity.defaultEntities.size(), is(1));
+            final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
+            assertThat(defaultFilteringSubEntity.field, is(true));
+            assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
+
+            // OneFilteringSubEntity
+            assertThat(entity.oneEntities, notNullValue());
+            assertThat(entity.oneEntities.size(), is(1));
+            final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
+            assertThat(oneFilteringSubEntity.field1, is(20));
+            assertThat(oneFilteringSubEntity.field2, is(30));
+            assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
+            assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
+
+            // ManyFilteringsSubEntity
+            assertThat(entity.manyEntities, notNullValue());
+            assertThat(entity.manyEntities.size(), is(1));
+            final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
+            assertThat(manyFilteringsSubEntity.field1, is(60));
+            assertThat(manyFilteringsSubEntity.field2, is(70));
+            assertThat(manyFilteringsSubEntity.getProperty1(), is("property1"));
+            assertThat(manyFilteringsSubEntity.getProperty2(), is("property2"));
+        }
     }
 
     @Path("/")
@@ -130,225 +364,4 @@
             return ManyFilteringsOnPropertiesEntity.INSTANCE;
         }
     }
-
-    @Test
-    public void testOneEntityFilteringOnProperties() throws Exception {
-        final OneFilteringOnPropertiesEntity entity = target("OneFilteringEntity").request()
-                .get(OneFilteringOnPropertiesEntity.class);
-
-        // OneFilteringOnPropertiesEntity
-        assertThat(entity.field, is(80));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.getFiltered();
-        assertThat(filtered, notNullValue());
-        assertThat(filtered.field, is(0));
-        assertThat(filtered.getProperty(), nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.getDefaultEntities(), notNullValue());
-        assertThat(entity.getDefaultEntities().size(), is(1));
-        final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.getDefaultEntities().get(0);
-        assertThat(defaultFilteringSubEntity.field, is(true));
-        assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
-
-        // OneFilteringSubEntity
-        assertThat(entity.getSubEntities(), notNullValue());
-        assertThat(entity.getSubEntities().size(), is(1));
-        final OneFilteringSubEntity oneFilteringSubEntity = entity.getSubEntities().get(0);
-        assertThat(oneFilteringSubEntity.field1, is(20));
-        assertThat(oneFilteringSubEntity.field2, is(30));
-        assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
-        assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
-    }
-
-    @Test
-    public void testOneEntityFilteringOnPropertiesDefaultViewResponse() throws Exception {
-        final OneFilteringOnPropertiesEntity entity = target("OneFilteringEntityDefaultViewResponse").request()
-                .get(OneFilteringOnPropertiesEntity.class);
-
-        // OneFilteringOnPropertiesEntity
-        assertThat(entity.field, is(80));
-        assertThat(entity.accessorTransient, nullValue());
-        assertThat(entity.getProperty(), nullValue());
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.getFiltered();
-        assertThat(filtered, nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.getDefaultEntities(), nullValue());
-
-        // OneFilteringSubEntity
-        assertThat(entity.getSubEntities(), nullValue());
-    }
-
-    @Test
-    public void testOneEntityFilteringOnPropertiesDefaultView() throws Exception {
-        final OneFilteringOnPropertiesEntity entity = target("OneFilteringEntityDefaultView").request()
-                .get(OneFilteringOnPropertiesEntity.class);
-
-        // OneFilteringOnPropertiesEntity
-        assertThat(entity.field, is(80));
-        assertThat(entity.accessorTransient, nullValue());
-        assertThat(entity.getProperty(), nullValue());
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.getFiltered();
-        assertThat(filtered, nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.getDefaultEntities(), nullValue());
-
-        // OneFilteringSubEntity
-        assertThat(entity.getSubEntities(), nullValue());
-    }
-
-    @Test
-    public void testMultipleViewsOnProperties() throws Exception {
-        testOneEntityFilteringOnProperties();
-        testOneEntityFilteringOnPropertiesDefaultView();
-    }
-
-    @Test
-    public void testManyFilteringsEntityPrimaryView() throws Exception {
-        final ManyFilteringsOnPropertiesEntity entity = target("ManyFilteringsEntityPrimaryView").request()
-                .get(ManyFilteringsOnPropertiesEntity.class);
-
-        // ManyFilteringsOnPropertiesEntity
-        assertThat(entity.field, is(90));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.filtered;
-        assertThat(filtered, notNullValue());
-        assertThat(filtered.field, is(0));
-        assertThat(filtered.getProperty(), nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.defaultEntities, notNullValue());
-        assertThat(entity.defaultEntities.size(), is(1));
-        final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
-        assertThat(defaultFilteringSubEntity.field, is(true));
-        assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
-
-        // OneFilteringSubEntity
-        assertThat(entity.oneEntities, notNullValue());
-        assertThat(entity.oneEntities.size(), is(1));
-        final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
-        assertThat(oneFilteringSubEntity.field1, is(20));
-        assertThat(oneFilteringSubEntity.field2, is(30));
-        assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
-        assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
-
-        // ManyFilteringsSubEntity
-        assertThat(entity.manyEntities, nullValue());
-    }
-
-    @Test
-    public void testManyFilteringsEntitySecondaryView() throws Exception {
-        final ManyFilteringsOnPropertiesEntity entity = target("ManyFilteringsEntitySecondaryView").request()
-                .get(ManyFilteringsOnPropertiesEntity.class);
-
-        // ManyFilteringsOnPropertiesEntity
-        assertThat(entity.field, is(90));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.filtered;
-        assertThat(filtered, notNullValue());
-        assertThat(filtered.field, is(0));
-        assertThat(filtered.getProperty(), nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.defaultEntities, nullValue());
-
-        // OneFilteringSubEntity
-        assertThat(entity.oneEntities, notNullValue());
-        assertThat(entity.oneEntities.size(), is(1));
-        final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
-        assertThat(oneFilteringSubEntity.field1, is(20));
-        assertThat(oneFilteringSubEntity.field2, is(0));
-        assertThat(oneFilteringSubEntity.getProperty1(), nullValue());
-        assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
-
-        // ManyFilteringsSubEntity
-        assertThat(entity.manyEntities, notNullValue());
-        assertThat(entity.manyEntities.size(), is(1));
-        final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
-        assertThat(manyFilteringsSubEntity.field1, is(60));
-        assertThat(manyFilteringsSubEntity.field2, is(70));
-        assertThat(manyFilteringsSubEntity.getProperty1(), nullValue());
-        assertThat(manyFilteringsSubEntity.getProperty2(), is("property2"));
-    }
-
-    @Test
-    public void testManyFilteringsEntityDefaultView() throws Exception {
-        final ManyFilteringsOnPropertiesEntity entity = target("ManyFilteringsEntityDefaultView").request()
-                .get(ManyFilteringsOnPropertiesEntity.class);
-
-        // ManyFilteringsOnPropertiesEntity
-        assertThat(entity.field, is(90));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), nullValue());
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.filtered;
-        assertThat(filtered, nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.defaultEntities, nullValue());
-
-        // OneFilteringSubEntity
-        assertThat(entity.oneEntities, nullValue());
-
-        // ManyFilteringsSubEntity
-        assertThat(entity.manyEntities, nullValue());
-    }
-
-    @Test
-    public void testManyFilteringsEntityManyViews() throws Exception {
-        final ManyFilteringsOnPropertiesEntity entity = target("ManyFilteringsEntityManyViews").request()
-                .get(ManyFilteringsOnPropertiesEntity.class);
-
-        // ManyFilteringsOnPropertiesEntity
-        assertThat(entity.field, is(90));
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // FilteredClassEntity
-        final FilteredClassEntity filtered = entity.filtered;
-        assertThat(filtered, notNullValue());
-        assertThat(filtered.field, is(0));
-        assertThat(filtered.getProperty(), nullValue());
-
-        // DefaultFilteringSubEntity
-        assertThat(entity.defaultEntities, notNullValue());
-        assertThat(entity.defaultEntities.size(), is(1));
-        final DefaultFilteringSubEntity defaultFilteringSubEntity = entity.defaultEntities.get(0);
-        assertThat(defaultFilteringSubEntity.field, is(true));
-        assertThat(defaultFilteringSubEntity.getProperty(), is(20L));
-
-        // OneFilteringSubEntity
-        assertThat(entity.oneEntities, notNullValue());
-        assertThat(entity.oneEntities.size(), is(1));
-        final OneFilteringSubEntity oneFilteringSubEntity = entity.oneEntities.get(0);
-        assertThat(oneFilteringSubEntity.field1, is(20));
-        assertThat(oneFilteringSubEntity.field2, is(30));
-        assertThat(oneFilteringSubEntity.getProperty1(), is("property1"));
-        assertThat(oneFilteringSubEntity.getProperty2(), is("property2"));
-
-        // ManyFilteringsSubEntity
-        assertThat(entity.manyEntities, notNullValue());
-        assertThat(entity.manyEntities.size(), is(1));
-        final ManyFilteringsSubEntity manyFilteringsSubEntity = entity.manyEntities.get(0);
-        assertThat(manyFilteringsSubEntity.field1, is(60));
-        assertThat(manyFilteringsSubEntity.field2, is(70));
-        assertThat(manyFilteringsSubEntity.getProperty1(), is("property1"));
-        assertThat(manyFilteringsSubEntity.getProperty2(), is("property2"));
-    }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringScopesTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringScopesTest.java
index 4dba516..f861d27 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringScopesTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringScopesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,6 @@
 
 package org.glassfish.jersey.tests.e2e.entity.filtering.json;
 
-import java.util.Arrays;
-
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -34,31 +32,68 @@
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ComplexEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ComplexSubEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ComplexSubSubEntity;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class JsonEntityFilteringScopesTest extends JerseyTest {
+@Suite
+@SelectClasses({
+        JsonEntityFilteringScopesTest.JacksonFeatureJsonEntityFilteringScopesTest.class,
+        JsonEntityFilteringScopesTest.MoxyJsonFeatureJsonEntityFilteringScopesTest.class
+})
+public class JsonEntityFilteringScopesTest {
 
-    @Parameterized.Parameters(name = "Provider: {0}")
-    public static Iterable<Class[]> providers() {
-        return Arrays.asList(new Class[][]{{MoxyJsonFeature.class}, {JacksonFeature.class}});
+    public static class MoxyJsonFeatureJsonEntityFilteringScopesTest extends JsonEntityFilteringScopesTemplateTest {
+        public MoxyJsonFeatureJsonEntityFilteringScopesTest() {
+            super(MoxyJsonFeature.class);
+        }
     }
 
-    public JsonEntityFilteringScopesTest(final Class<Feature> filteringProvider) {
-        super(new ResourceConfig(Resource.class, EntityFilteringFeature.class).register(filteringProvider));
+    public static class JacksonFeatureJsonEntityFilteringScopesTest extends JsonEntityFilteringScopesTemplateTest {
+        public JacksonFeatureJsonEntityFilteringScopesTest() {
+            super(JacksonFeature.class);
+        }
+    }
 
-        enable(TestProperties.DUMP_ENTITY);
-        enable(TestProperties.LOG_TRAFFIC);
+    public abstract static class JsonEntityFilteringScopesTemplateTest extends JerseyTest {
+        public JsonEntityFilteringScopesTemplateTest(Class<? extends Feature> filteringProvider) {
+            super(new ResourceConfig(Resource.class, EntityFilteringFeature.class).register(filteringProvider));
+
+            enable(TestProperties.DUMP_ENTITY);
+            enable(TestProperties.LOG_TRAFFIC);
+        }
+
+        /**
+         * Primary -> Default -> Primary.
+         */
+        @Test
+        public void testEntityFilteringScopes() throws Exception {
+            final ComplexEntity entity = target().request().get(ComplexEntity.class);
+
+            // ComplexEntity
+            assertThat(entity.accessorTransient, is("propertyproperty"));
+            assertThat(entity.getProperty(), is("property"));
+
+            // ComplexSubEntity
+            final ComplexSubEntity subEntity = entity.field;
+            assertThat(subEntity, notNullValue());
+            assertThat(subEntity.accessorTransient, is("fieldfield"));
+            assertThat(subEntity.field, is("field"));
+
+            // ComplexSubSubEntity
+            final ComplexSubSubEntity subSubEntity = entity.field.getProperty();
+            assertThat(subSubEntity.accessorTransient, is("fieldfield"));
+            assertThat(subSubEntity.getProperty(), is("property"));
+            assertThat(subSubEntity.field, nullValue());
+        }
     }
 
     @Path("/")
@@ -72,28 +107,4 @@
             return ComplexEntity.INSTANCE;
         }
     }
-
-    /**
-     * Primary -> Default -> Primary.
-     */
-    @Test
-    public void testEntityFilteringScopes() throws Exception {
-        final ComplexEntity entity = target().request().get(ComplexEntity.class);
-
-        // ComplexEntity
-        assertThat(entity.accessorTransient, is("propertyproperty"));
-        assertThat(entity.getProperty(), is("property"));
-
-        // ComplexSubEntity
-        final ComplexSubEntity subEntity = entity.field;
-        assertThat(subEntity, notNullValue());
-        assertThat(subEntity.accessorTransient, is("fieldfield"));
-        assertThat(subEntity.field, is("field"));
-
-        // ComplexSubSubEntity
-        final ComplexSubSubEntity subSubEntity = entity.field.getProperty();
-        assertThat(subSubEntity.accessorTransient, is("fieldfield"));
-        assertThat(subSubEntity.getProperty(), is("property"));
-        assertThat(subSubEntity.field, nullValue());
-    }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringServerTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringServerTest.java
index 5ae7b7f..d8078f5 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringServerTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/JsonEntityFilteringServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,7 +17,9 @@
 package org.glassfish.jersey.tests.e2e.entity.filtering.json;
 
 import java.lang.annotation.Annotation;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -31,6 +33,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
+import org.glassfish.jersey.test.spi.TestHelper;
 import org.glassfish.jersey.tests.e2e.entity.filtering.DefaultFilteringScope;
 import org.glassfish.jersey.tests.e2e.entity.filtering.PrimaryDetailedView;
 import org.glassfish.jersey.tests.e2e.entity.filtering.SecondaryDetailedView;
@@ -39,26 +42,18 @@
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ManyFilteringsOnClassEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.ManyFilteringsSubEntity;
 import org.glassfish.jersey.tests.e2e.entity.filtering.domain.OneFilteringSubEntity;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Suite;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
-        JsonEntityFilteringServerTest.ConfigurationServerTest.class,
-        JsonEntityFilteringServerTest.ConfigurationDefaultViewServerTest.class,
-        JsonEntityFilteringServerTest.AnnotationsServerTest.class,
-        JsonEntityFilteringServerTest.AnnotationsOverConfigurationServerTest.class
-})
 public class JsonEntityFilteringServerTest {
 
     @Path("/")
@@ -117,15 +112,37 @@
         }
     }
 
-    @RunWith(Parameterized.class)
-    public static class ConfigurationServerTest extends JerseyTest {
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
+    }
 
-        @Parameterized.Parameters(name = "Provider: {0}")
-        public static Iterable<Class[]> providers() {
-            return Arrays.asList(new Class[][] {{MoxyJsonFeature.class}, {JacksonFeature.class}});
-        }
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        providers().forEach(filteringProvider -> {
+            ConfigurationServerTest test1 = new ConfigurationServerTest(filteringProvider) {};
+            tests.add(TestHelper.toTestContainer(test1,
+                    ConfigurationServerTest.class.getSimpleName() + " (" + filteringProvider.getSimpleName() + ")"));
 
-        public ConfigurationServerTest(final Class<Feature> filteringProvider) {
+            ConfigurationDefaultViewServerTest test2 = new ConfigurationDefaultViewServerTest(filteringProvider) {};
+            tests.add(TestHelper.toTestContainer(test2,
+                    ConfigurationDefaultViewServerTest.class.getSimpleName() + " (" + filteringProvider.getSimpleName() + ")"));
+
+            AnnotationsServerTest test3 = new AnnotationsServerTest(filteringProvider) {};
+            tests.add(TestHelper.toTestContainer(test3,
+                    AnnotationsServerTest.class.getSimpleName() + " (" + filteringProvider.getSimpleName() + ")"));
+
+            AnnotationsOverConfigurationServerTest test4 = new AnnotationsOverConfigurationServerTest(filteringProvider) {};
+            tests.add(TestHelper.toTestContainer(test4,
+                    AnnotationsOverConfigurationServerTest.class.getSimpleName()
+                    + " (" + filteringProvider.getSimpleName() + ")"));
+        });
+        return tests;
+    }
+
+    public abstract static class ConfigurationServerTest extends JerseyTest {
+
+        public ConfigurationServerTest(Class<? extends Feature> filteringProvider) {
             super(new ResourceConfig(Resource.class, EntityFilteringFeature.class)
                     .register(filteringProvider)
                     .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, PrimaryDetailedView.Factory.get()));
@@ -145,15 +162,9 @@
         }
     }
 
-    @RunWith(Parameterized.class)
-    public static class ConfigurationDefaultViewServerTest extends JerseyTest {
+    public abstract static class ConfigurationDefaultViewServerTest extends JerseyTest {
 
-        @Parameterized.Parameters(name = "Provider: {0}")
-        public static Iterable<Class[]> providers() {
-            return Arrays.asList(new Class[][] {{MoxyJsonFeature.class}, {JacksonFeature.class}});
-        }
-
-        public ConfigurationDefaultViewServerTest(final Class<Feature> filteringProvider) {
+        public ConfigurationDefaultViewServerTest(final Class<? extends Feature> filteringProvider) {
             super(new ResourceConfig(Resource.class, EntityFilteringFeature.class).register(filteringProvider));
 
             enable(TestProperties.DUMP_ENTITY);
@@ -184,15 +195,9 @@
         }
     }
 
-    @RunWith(Parameterized.class)
-    public static class AnnotationsServerTest extends JerseyTest {
+    public abstract static class AnnotationsServerTest extends JerseyTest {
 
-        @Parameterized.Parameters(name = "Provider: {0}")
-        public static Iterable<Class[]> providers() {
-            return Arrays.asList(new Class[][] {{MoxyJsonFeature.class}, {JacksonFeature.class}});
-        }
-
-        public AnnotationsServerTest(final Class<Feature> filteringProvider) {
+        public AnnotationsServerTest(final Class<? extends Feature> filteringProvider) {
             super(new ResourceConfig(Resource.class, EntityFilteringFeature.class).register(filteringProvider));
 
             enable(TestProperties.DUMP_ENTITY);
@@ -210,15 +215,9 @@
         }
     }
 
-    @RunWith(Parameterized.class)
-    public static class AnnotationsOverConfigurationServerTest extends JerseyTest {
+    public abstract static class AnnotationsOverConfigurationServerTest extends JerseyTest {
 
-        @Parameterized.Parameters(name = "Provider: {0}")
-        public static Iterable<Class[]> providers() {
-            return Arrays.asList(new Class[][] {{MoxyJsonFeature.class}, {JacksonFeature.class}});
-        }
-
-        public AnnotationsOverConfigurationServerTest(final Class<Feature> filteringProvider) {
+        public AnnotationsOverConfigurationServerTest(final Class<? extends Feature> filteringProvider) {
             super(new ResourceConfig(Resource.class, EntityFilteringFeature.class)
                     .register(filteringProvider)
                     .property(EntityFilteringFeature.ENTITY_FILTERING_SCOPE, new DefaultFilteringScope()));
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/MoxyEntityFilteringTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/MoxyEntityFilteringTest.java
index aefabf4..f2ded4f 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/MoxyEntityFilteringTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/entity/filtering/json/MoxyEntityFilteringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,7 +30,7 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/HeaderDelegateProviderTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/HeaderDelegateProviderTest.java
index 8bc9fb0..9d118a5 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/HeaderDelegateProviderTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/HeaderDelegateProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.message.internal.InboundMessageContext;
 import org.glassfish.jersey.message.internal.OutboundMessageContext;
 import org.glassfish.jersey.spi.HeaderDelegateProvider;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -48,7 +48,7 @@
 import java.util.List;
 import java.util.Map;
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
 
 public class HeaderDelegateProviderTest {
     static final String HEADER_NAME = "BEAN_HEADER";
@@ -148,7 +148,7 @@
                 found++;
             }
         }
-        Assert.assertEquals(2, found);
+        Assertions.assertEquals(2, found);
     }
 
     @Test
@@ -203,7 +203,7 @@
         };
         inboundMessageContext.header(HttpHeaders.CONTENT_TYPE, "");
         MediaType mediaType = inboundMessageContext.getMediaType();
-        Assert.assertEquals(MediaType.APPLICATION_OCTET_STREAM_TYPE, mediaType);
+        Assertions.assertEquals(MediaType.APPLICATION_OCTET_STREAM_TYPE, mediaType);
     }
 
     @Test
@@ -222,13 +222,13 @@
         outboundMessageContext = new OutboundMessageContext(config.getConfiguration());
         outboundMessageContext.getHeaders().add(HttpHeaders.CONTENT_TYPE, "");
         MediaType mediaType = outboundMessageContext.getMediaType();
-        Assert.assertEquals(MediaType.APPLICATION_OCTET_STREAM_TYPE, mediaType);
+        Assertions.assertEquals(MediaType.APPLICATION_OCTET_STREAM_TYPE, mediaType);
     }
 
     private void testMap(MultivaluedMap<String, String> map, String expectedValue) {
         for (Map.Entry<String, List<String>> entry : map.entrySet()) {
-            Assert.assertEquals(HEADER_NAME, entry.getKey());
-            Assert.assertEquals(expectedValue, entry.getValue().iterator().next());
+            Assertions.assertEquals(HEADER_NAME, entry.getKey());
+            Assertions.assertEquals(expectedValue, entry.getValue().iterator().next());
         }
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/RuntimeDelegateProviderDisabledTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/RuntimeDelegateProviderDisabledTest.java
index d2a03d7..29994b2 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/RuntimeDelegateProviderDisabledTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/RuntimeDelegateProviderDisabledTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,8 +19,8 @@
 import org.glassfish.jersey.CommonProperties;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -39,11 +39,11 @@
     @Test
     public void testClientResponseHeaders() {
         try (Response response = target("/simple").request().get()) {
-            Assert.assertEquals(
+            Assertions.assertEquals(
                     DISABLED_VALUE,
                     response.getHeaderString(HeaderDelegateProviderTest.HeaderContainerResponseFilter.class.getSimpleName())
             );
-            Assert.assertEquals(
+            Assertions.assertEquals(
                     DISABLED_VALUE,
                     response.getStringHeaders().getFirst(HEADER_NAME)
             );
@@ -53,7 +53,7 @@
     @Test
     public void testContainerResponseFilter() {
         try (Response response = target("/simple").request().get()) {
-            Assert.assertEquals(DISABLED_VALUE, response.getHeaderString(HEADER_NAME));
+            Assertions.assertEquals(DISABLED_VALUE, response.getHeaderString(HEADER_NAME));
         }
     }
 
@@ -63,7 +63,7 @@
                 .property(CommonProperties.METAINF_SERVICES_LOOKUP_DISABLE_CLIENT, true).request()
                 .header(HEADER_NAME, new HeaderDelegateProviderTest.BeanForHeaderDelegateProviderTest())
                 .get()) {
-            Assert.assertEquals(
+            Assertions.assertEquals(
                     DISABLED_VALUE,
                     response.getHeaderString(HeaderDelegateProviderTest.HeaderSettingResource.class.getSimpleName())
             );
@@ -76,7 +76,7 @@
                 .property(CommonProperties.METAINF_SERVICES_LOOKUP_DISABLE_CLIENT, true)
                 .register(HeaderDelegateProviderTest.HeaderClientRequestFilter.class)
                 .request().get()) {
-            Assert.assertEquals(
+            Assertions.assertEquals(
                     DISABLED_VALUE,
                     response.readEntity(String.class)
             );
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/RuntimeDelegateProviderEnabledTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/RuntimeDelegateProviderEnabledTest.java
index 2f3c73d..109c229 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/RuntimeDelegateProviderEnabledTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/header/RuntimeDelegateProviderEnabledTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,8 +19,8 @@
 import org.glassfish.jersey.CommonProperties;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -37,11 +37,11 @@
     @Test
     public void testClientResponseHeaders() {
         try (Response response = target("/simple").request().get()) {
-            Assert.assertEquals(
+            Assertions.assertEquals(
                     HeaderDelegateProviderTest.BeanForHeaderDelegateProviderTest.getValue(),
                     response.getHeaderString(HeaderDelegateProviderTest.HeaderContainerResponseFilter.class.getSimpleName())
             );
-            Assert.assertEquals(
+            Assertions.assertEquals(
                     HeaderDelegateProviderTest.BeanForHeaderDelegateProviderTest.getValue(),
                     response.getStringHeaders().getFirst(HEADER_NAME)
             );
@@ -51,7 +51,7 @@
     @Test
     public void testContainerResponseFilter() {
         try (Response response = target("/simple").request().get()) {
-            Assert.assertEquals(
+            Assertions.assertEquals(
                     HeaderDelegateProviderTest.BeanForHeaderDelegateProviderTest.getValue(),
                     response.getHeaderString(HEADER_NAME)
             );
@@ -62,7 +62,7 @@
     public void testProviderOnClient() {
         try (Response response = target("/headers").request()
                 .header(HEADER_NAME, new HeaderDelegateProviderTest.BeanForHeaderDelegateProviderTest()).get()) {
-            Assert.assertEquals(
+            Assertions.assertEquals(
                     HeaderDelegateProviderTest.BeanForHeaderDelegateProviderTest.getValue(),
                     response.getHeaderString(HeaderDelegateProviderTest.HeaderSettingResource.class.getSimpleName())
             );
@@ -74,7 +74,7 @@
         try (Response response = target("/clientfilter")
                 .register(HeaderDelegateProviderTest.HeaderClientRequestFilter.class)
                 .request().get()) {
-            Assert.assertEquals(
+            Assertions.assertEquals(
                     HeaderDelegateProviderTest.BeanForHeaderDelegateProviderTest.getValue(),
                     response.readEntity(String.class)
             );
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/GenericTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/GenericTest.java
index 5f7f5b9..2deec5f 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/GenericTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/GenericTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,40 +16,30 @@
 
 package org.glassfish.jersey.tests.e2e.json;
 
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.glassfish.jersey.tests.e2e.json.JsonTest.JsonTestSetup;
 import org.glassfish.jersey.tests.e2e.json.entity.ColorHolder;
 import org.glassfish.jersey.tests.e2e.json.entity.Jersey1199List;
 
-import org.junit.Ignore;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.TestFactory;
 
 /**
  * Unignore when you need to run a specific test.
  *
  * @author Michal Gajdos
  */
-@Ignore("Unignore only when you need to run a specific test.")
-@RunWith(Parameterized.class)
-public class GenericTest extends AbstractJsonTest {
+@Disabled("Unignore only when you need to run a specific test.")
+public class GenericTest {
 
-    @Parameterized.Parameters()
-    public static Collection<JsonTestSetup[]> generateTestCases() throws Exception {
-        final List<JsonTestSetup[]> jsonTestSetups = new LinkedList<JsonTestSetup[]>();
+    @TestFactory
+    public DynamicContainer generateTests() throws Exception {
         final Class<?>[] classes = {Jersey1199List.class, ColorHolder.class};
 
-        for (JsonTestProvider jsonProvider : new JsonTestProvider[]{new JsonTestProvider.MoxyJsonTestProvider()}) {
-            jsonTestSetups.add(new JsonTestSetup[]{new JsonTestSetup(classes, jsonProvider)});
-        }
-
-        return jsonTestSetups;
+        JsonTestProvider jsonProvider = new JsonTestProvider.MoxyJsonTestProvider();
+        JsonTestSetup setupTest = new JsonTestSetup(classes, jsonProvider);
+        JsonTest jsonTest = new JsonTest(setupTest) {};
+        return TestHelper.toTestContainer(jsonTest, String.format("genTest (%s)", jsonProvider.getClass().getSimpleName()));
     }
-
-    public GenericTest(final JsonTestSetup jsonTestSetup) throws Exception {
-        super(jsonTestSetup);
-    }
-
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/InheritanceTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/InheritanceTest.java
index 881d15d..27a1ede 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/InheritanceTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/InheritanceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,41 +16,38 @@
 
 package org.glassfish.jersey.tests.e2e.json;
 
+import java.util.ArrayList;
 import java.util.Collection;
-import java.util.LinkedList;
 import java.util.List;
 
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.glassfish.jersey.tests.e2e.json.JsonTest.JsonTestSetup;
 import org.glassfish.jersey.tests.e2e.json.entity.Animal;
 import org.glassfish.jersey.tests.e2e.json.entity.AnimalList;
 import org.glassfish.jersey.tests.e2e.json.entity.Cat;
 import org.glassfish.jersey.tests.e2e.json.entity.Dog;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.TestFactory;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class InheritanceTest extends AbstractJsonTest {
+public class InheritanceTest {
 
-    @Parameterized.Parameters()
-    public static Collection<JsonTestSetup[]> generateTestCases() throws Exception {
-        final List<JsonTestSetup[]> jsonTestSetups = new LinkedList<JsonTestSetup[]>();
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() throws Exception {
+        List<DynamicContainer> tests = new ArrayList<>();
         final Class<?>[] classes = {AnimalList.class, Animal.class, Dog.class, Cat.class};
 
         for (final JsonTestProvider jsonProvider : JsonTestProvider.JAXB_PROVIDERS) {
             // TODO - remove the condition after jsonb polymorphic adapter is implemented
             if (!(jsonProvider instanceof JsonTestProvider.JsonbTestProvider)) {
-                jsonTestSetups.add(new JsonTestSetup[]{new JsonTestSetup(classes, jsonProvider)});
+                JsonTestSetup setupTest = new JsonTestSetup(classes, jsonProvider);
+                JsonTest jsonTest = new JsonTest(setupTest) {};
+                tests.add(TestHelper.toTestContainer(jsonTest,
+                        String.format("inheritanceTest (%s)", jsonProvider.getClass().getSimpleName())));
             }
         }
-
-        return jsonTestSetups;
+        return tests;
     }
-
-    public InheritanceTest(final JsonTestSetup jsonTestSetup) throws Exception {
-        super(jsonTestSetup);
-    }
-
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jackson1JsonViewTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jackson1JsonViewTest.java
index d71dd56..5219c2e 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jackson1JsonViewTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jackson1JsonViewTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,7 +33,7 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.codehaus.jackson.map.annotate.JsonView;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JacksonJsonViewTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JacksonJsonViewTest.java
index c4c8dd9..7e32536 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JacksonJsonViewTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JacksonJsonViewTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,7 +32,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JaxbTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JaxbTest.java
index 7733e23..49e4703 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JaxbTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JaxbTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,12 +16,14 @@
 
 package org.glassfish.jersey.tests.e2e.json;
 
+import java.util.ArrayList;
 import java.util.Collection;
-import java.util.LinkedList;
 import java.util.List;
 
 import org.glassfish.grizzly.utils.ArrayUtils;
 import org.glassfish.jersey.internal.util.PropertiesHelper;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.glassfish.jersey.tests.e2e.json.JsonTest.JsonTestSetup;
 import org.glassfish.jersey.tests.e2e.json.entity.AnotherArrayTestBean;
 import org.glassfish.jersey.tests.e2e.json.entity.AttrAndCharDataBean;
 import org.glassfish.jersey.tests.e2e.json.entity.ComplexBeanWithAttributes;
@@ -51,15 +53,13 @@
 import org.glassfish.jersey.tests.e2e.json.entity.TwoListsWrapperBean;
 import org.glassfish.jersey.tests.e2e.json.entity.User;
 import org.glassfish.jersey.tests.e2e.json.entity.UserTable;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.TestFactory;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class JaxbTest extends AbstractJsonTest {
+public class JaxbTest {
 
     private static final Class<?>[] CLASSES = {
             AnotherArrayTestBean.class,
@@ -93,10 +93,6 @@
             UserTable.class
     };
 
-    public JaxbTest(final JsonTestSetup jsonTestSetup) throws Exception {
-        super(jsonTestSetup);
-    }
-
     /**
      * checks provided string to be a number
      *
@@ -130,18 +126,21 @@
         return  true;
     }
 
-    @Parameterized.Parameters()
-    public static Collection<JsonTestSetup[]> getJsonProviders() throws Exception {
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() throws Exception {
+        List<DynamicContainer> tests = new ArrayList<>();
         final Class<?>[]
                 filteredClasses = (isJavaVersionSupported()) ? CLASSES : ArrayUtils.remove(CLASSES, EncodedContentBean.class);
-        final List<JsonTestSetup[]> jsonTestSetups = new LinkedList<>();
 
         for (final JsonTestProvider jsonProvider : JsonTestProvider.JAXB_PROVIDERS) {
             for (final Class<?> entityClass : filteredClasses) {
-                jsonTestSetups.add(new JsonTestSetup[]{new JsonTestSetup(entityClass, jsonProvider)});
+                JsonTestSetup setupTest = new JsonTestSetup(entityClass, jsonProvider);
+                JsonTest jsonTest = new JsonTest(setupTest) {};
+                tests.add(TestHelper.toTestContainer(jsonTest,
+                    String.format("jaxbTest (%s, %s)", entityClass.getSimpleName(), jsonProvider.getClass().getSimpleName())));
             }
         }
 
-        return jsonTestSetups;
+        return tests;
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jersey1199Test.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jersey1199Test.java
index b3dec8d..0aaad3e 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jersey1199Test.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jersey1199Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,39 +16,38 @@
 
 package org.glassfish.jersey.tests.e2e.json;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.LinkedList;
 import java.util.List;
 
 import javax.json.bind.adapter.JsonbAdapter;
 
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.glassfish.jersey.tests.e2e.json.JsonTest.JsonTestSetup;
 import org.glassfish.jersey.tests.e2e.json.entity.ColorHolder;
 import org.glassfish.jersey.tests.e2e.json.entity.Jersey1199List;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.TestFactory;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class Jersey1199Test extends AbstractJsonTest {
+public class Jersey1199Test {
 
-    @Parameterized.Parameters()
-    public static Collection<JsonTestSetup[]> generateTestCases() throws Exception {
-        final List<JsonTestSetup[]> jsonTestSetups = new LinkedList<>();
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() throws Exception {
+        List<DynamicContainer> tests = new ArrayList<>();
         final Class<?>[] classes = {Jersey1199List.class, ColorHolder.class};
 
         for (final JsonTestProvider jsonProvider : JsonTestProvider.JAXB_PROVIDERS) {
-            jsonTestSetups.add(new JsonTestSetup[]{new JsonTestSetup(classes, jsonProvider)});
+            JsonTestSetup setupTest = new JsonTestSetup(classes, jsonProvider);
+            JsonTest jsonTest = new JsonTest(setupTest) {};
+            tests.add(TestHelper.toTestContainer(jsonTest,
+                    String.format("jersey1199Test (%s)", jsonProvider.getClass().getSimpleName())));
         }
 
-        return jsonTestSetups;
-    }
-
-    public Jersey1199Test(final JsonTestSetup jsonTestSetup) throws Exception {
-        super(jsonTestSetup);
+        return tests;
     }
 
     /**
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jersey1835Test.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jersey1835Test.java
index fa291d5..881a362 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jersey1835Test.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/Jersey1835Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,32 +16,24 @@
 
 package org.glassfish.jersey.tests.e2e.json;
 
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.glassfish.jersey.tests.e2e.json.JsonTest.JsonTestSetup;
 import org.glassfish.jersey.tests.e2e.json.entity.SingleItemListWrapperBean;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.TestFactory;
 
 /**
  * Reproducible test case for JERSEY-1835.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
-public class Jersey1835Test extends AbstractJsonTest {
+public class Jersey1835Test {
 
-    @Parameterized.Parameters()
-    public static Collection<JsonTestSetup[]> generateTestCases() throws Exception {
-        final List<JsonTestSetup[]> result = new LinkedList<JsonTestSetup[]>();
-        result.add(new JsonTestSetup[] {new JsonTestSetup(new Class<?>[] {SingleItemListWrapperBean.class},
-                new JsonTestProvider.JettisonMappedJsonTestProvider())});
-        return result;
-    }
-
-    public Jersey1835Test(final JsonTestSetup jsonTestSetup) throws Exception {
-        super(jsonTestSetup);
+    @TestFactory
+    public DynamicContainer generateTests() throws Exception {
+        JsonTestSetup setupTest = new JsonTestSetup(new Class<?>[]
+                {SingleItemListWrapperBean.class}, new JsonTestProvider.JettisonMappedJsonTestProvider());
+        JsonTest jsonTest = new JsonTest(setupTest) {};
+        return TestHelper.toTestContainer(jsonTest, "jersey1835Test");
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonProcessingDisabledTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonProcessingDisabledTest.java
index 57a4e66..1d6b094 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonProcessingDisabledTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonProcessingDisabledTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,8 +36,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonProcessingTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonProcessingTest.java
index ab9f523..90c5604 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonProcessingTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonProcessingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,15 +42,15 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-// @RunWith(ConcurrentRunner.class)
 public class JsonProcessingTest extends JerseyTest {
 
     private static final String JSON_OBJECT_STR1 = "{\"foo\":\"bar\"}";
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/AbstractJsonTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonTest.java
similarity index 96%
rename from tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/AbstractJsonTest.java
rename to tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonTest.java
index f3bdcec..ed04c64 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/AbstractJsonTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -49,18 +49,18 @@
 import org.glassfish.jersey.test.TestProperties;
 
 import org.eclipse.persistence.jaxb.JAXBContextFactory;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Common functionality for JSON tests that are using multiple JSON providers (e.g. MOXy, Jackson, Jettison).
  *
  * @author Michal Gajdos
  */
-public abstract class AbstractJsonTest extends JerseyTest {
+public abstract class JsonTest extends JerseyTest {
 
     private static final String PKG_NAME = "org/glassfish/jersey/tests/e2e/json/entity/";
-    private static final Logger LOGGER = Logger.getLogger(AbstractJsonTest.class.getName());
+    private static final Logger LOGGER = Logger.getLogger(JsonTest.class.getName());
 
     /**
      * Helper class representing configuration for one test case.
@@ -259,7 +259,7 @@
                 jsonProvider instanceof JsonTestProvider.MoxyJsonTestProvider);
     }
 
-    protected AbstractJsonTest(final JsonTestSetup jsonTestSetup) throws Exception {
+    JsonTest(final JsonTestSetup jsonTestSetup) throws Exception {
         super(configureJaxrsApplication(jsonTestSetup));
         enable(TestProperties.LOG_TRAFFIC);
         enable(TestProperties.DUMP_ENTITY);
@@ -326,8 +326,9 @@
         // TODO remove once JUnit supports parameterized tests with custom names
         // TODO (see http://stackoverflow.com/questions/650894/change-test-name-of-parameterized-tests
         // TODO or https://github.com/KentBeck/junit/pull/393)
-        assertEquals(String.format("%s - %s: Received JSON entity content does not match expected JSON entity content.",
+        assertEquals(entity, receivedEntity,
+                String.format("%s - %s: Received JSON entity content does not match expected JSON entity content.",
                 getJsonTestSetup().getJsonProvider().getClass().getSimpleName(),
-                getJsonTestSetup().getEntityClass().getSimpleName()), entity, receivedEntity);
+                getJsonTestSetup().getEntityClass().getSimpleName()));
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithPaddingEncodingFilterTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithPaddingEncodingFilterTest.java
index 4d681da..0c2759d 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithPaddingEncodingFilterTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithPaddingEncodingFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,9 +33,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests, that JSONP callback wrapping takes places before the eventual entity compression.
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithPaddingTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithPaddingTest.java
index 17f35df..0201604 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithPaddingTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithPaddingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,9 +16,8 @@
 
 package org.glassfish.jersey.tests.e2e.json;
 
+import java.util.ArrayList;
 import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -35,25 +34,23 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-
+import org.glassfish.jersey.test.spi.TestHelper;
 import org.hamcrest.Matcher;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 import static org.hamcrest.CoreMatchers.allOf;
 import static org.hamcrest.CoreMatchers.endsWith;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.startsWith;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class JsonWithPaddingTest extends JerseyTest {
+public class JsonWithPaddingTest {
 
-    @SuppressWarnings("UnusedDeclaration")
     @XmlRootElement
     public static class JsonBean {
 
@@ -118,33 +115,153 @@
         }
     }
 
-    @Parameterized.Parameters(name = "{0}")
-    public static Collection<JsonTestProvider[]> getJsonProviders() throws Exception {
-        final List<JsonTestProvider[]> testProviders = new LinkedList<>();
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        JsonTestProvider.JAXB_PROVIDERS.forEach(jsonProvider -> {
+            JsonWithPaddingTemplateTest test = new JsonWithPaddingTemplateTest(jsonProvider) {};
+            tests.add(TestHelper.toTestContainer(test, jsonProvider.getClass().getSimpleName()));
+        });
+        return tests;
+    }
 
-        for (final JsonTestProvider jsonProvider : JsonTestProvider.JAXB_PROVIDERS) {
-            testProviders.add(new JsonTestProvider[] {jsonProvider});
+    public abstract static class JsonWithPaddingTemplateTest extends JerseyTest {
+        private final JsonTestProvider jsonTestProvider;
+        private final String errorMessage;
+
+        public JsonWithPaddingTemplateTest(final JsonTestProvider jsonTestProvider) {
+            super(configureJaxrsApplication(jsonTestProvider));
+            enable(TestProperties.LOG_TRAFFIC);
+            enable(TestProperties.DUMP_ENTITY);
+
+            this.jsonTestProvider = jsonTestProvider;
+            this.errorMessage = String.format("%s: Received JSON entity content does not match expected JSON entity content.",
+                    jsonTestProvider.getClass().getSimpleName());
         }
 
-        return testProviders;
-    }
+        @Override
+        protected void configureClient(final ClientConfig config) {
+            config.register(jsonTestProvider.getFeature());
+        }
 
-    private final JsonTestProvider jsonTestProvider;
-    private final String errorMessage;
+        @Test
+        public void testJson() throws Exception {
+            final Response response = target("jsonp").path("PureJson").request("application/json").get();
 
-    public JsonWithPaddingTest(final JsonTestProvider jsonTestProvider) throws Exception {
-        super(configureJaxrsApplication(jsonTestProvider));
-        enable(TestProperties.LOG_TRAFFIC);
-        enable(TestProperties.DUMP_ENTITY);
+            assertThat(response.getStatus(), equalTo(200));
+            assertThat(response.getMediaType().toString(), equalTo("application/json"));
 
-        this.jsonTestProvider = jsonTestProvider;
-        this.errorMessage = String.format("%s: Received JSON entity content does not match expected JSON entity content.",
-                jsonTestProvider.getClass().getSimpleName());
-    }
+            final String entity = response.readEntity(String.class);
 
-    @Override
-    protected void configureClient(final ClientConfig config) {
-        config.register(jsonTestProvider.getFeature());
+            assertThat(errorMessage, entity, allOf(not(startsWith("callback(")), not(endsWith(")"))));
+        }
+
+        @Test
+        public void testJsonWithJavaScriptMediaType() throws Exception {
+            final Response response = target("jsonp").path("PureJson").request("application/x-javascript").get();
+
+            // Method is invoked but we do not have a MBW for application/x-javascript.
+            if (jsonTestProvider.getFeature().getClass() == JacksonFeature.class) {
+                assertThat(response.getStatus(), equalTo(200));
+            } else {
+                assertThat(response.getStatus(), equalTo(500));
+            }
+        }
+
+        @Test
+        public void testJsonWithPaddingDefault() throws Exception {
+            test("JsonWithPaddingDefault", "callback");
+        }
+
+        @Test
+        public void testJsonWithPaddingQueryCallbackParam() throws Exception {
+            test("JsonWithPaddingQueryCallbackParam", "eval", "parse");
+        }
+
+        @Test
+        public void testJsonWithPaddingQueryCallbackParamDefaultQueryParam() throws Exception {
+            test("JsonWithPaddingQueryCallbackParam", "callback", "parse", "callback");
+        }
+
+        @Test
+        public void testJsonWithPaddingQueryCallbackParamDefaultCallback() throws Exception {
+            test("JsonWithPaddingQueryCallbackParam", null, "callback");
+        }
+
+        @Test
+        public void testJsonWithPaddingQueryCallbackParamNegative() throws Exception {
+            test("JsonWithPaddingQueryCallbackParam", "call", "parse", true);
+        }
+
+        @Test
+        public void testJsonWithPaddingCallbackAndQueryCallbackParam() throws Exception {
+            test("JsonWithPaddingCallbackAndQueryCallbackParam", "eval", "run");
+        }
+
+        @Test
+        public void testJsonWithPaddingCallbackAndQueryCallbackParamNegative() throws Exception {
+            test("JsonWithPaddingCallbackAndQueryCallbackParam", "eval", "run", "parse", true);
+        }
+
+        @Test
+        public void testJsonWithPaddingCallbackAndQueryCallbackParamDefault() throws Exception {
+            test("JsonWithPaddingCallbackAndQueryCallbackParam", "evalx", "parse");
+        }
+
+        @Test
+        public void testJsonWithPaddingCallbackAndQueryCallbackParamDefaultNegative() throws Exception {
+            test("JsonWithPaddingCallbackAndQueryCallbackParam", "evalx", "xlave", "eval", true);
+        }
+
+        @Test
+        public void testJsonWithPaddingCallback() throws Exception {
+            test("JsonWithPaddingCallback", "eval", "eval");
+        }
+
+        @Test
+        public void testJsonWithPaddingCallbackNegative() throws Exception {
+            test("JsonWithPaddingCallback", "eval", "lave", true);
+        }
+
+        private void test(final String path, final String callback) {
+            test(path, null, null, callback);
+        }
+
+        private void test(final String path, final String queryParamName, final String callback) {
+            test(path, queryParamName, callback, callback, false);
+        }
+
+        private void test(final String path, final String queryParamName, final String callback, final boolean isNegative) {
+            test(path, queryParamName, callback, callback, isNegative);
+        }
+
+        private void test(final String path, final String queryParamName, final String queryParamValue, final String callback) {
+            test(path, queryParamName, queryParamValue, callback, false);
+        }
+
+        private void test(final String path, final String queryParamName, final String queryParamValue, final String callback,
+                          final boolean isNegative) {
+
+            WebTarget tempTarget = target("jsonp").path(path);
+            if (queryParamName != null) {
+                tempTarget = tempTarget.queryParam(queryParamName, queryParamValue);
+            }
+
+            final Response response = tempTarget.request("application/x-javascript").get();
+
+            assertThat(response.getStatus(), equalTo(200));
+            assertThat(response.getMediaType().toString(), equalTo("application/x-javascript"));
+
+            final String entity = response.readEntity(String.class);
+
+            // Check the entity.
+            final Matcher<String> startsWith = startsWith(callback + "(");
+            final Matcher<String> endsWith = endsWith(")");
+
+            final Matcher<String> callbackMatcher = isNegative ? not(startsWith) : startsWith;
+
+            assertThat(errorMessage, entity, allOf(callbackMatcher, endsWith));
+        }
     }
 
     private static Application configureJaxrsApplication(final JsonTestProvider jsonTestProvider) {
@@ -159,123 +276,4 @@
         return resourceConfig;
     }
 
-    @Test
-    public void testJson() throws Exception {
-        final Response response = target("jsonp").path("PureJson").request("application/json").get();
-
-        assertThat(response.getStatus(), equalTo(200));
-        assertThat(response.getMediaType().toString(), equalTo("application/json"));
-
-        final String entity = response.readEntity(String.class);
-
-        assertThat(errorMessage, entity, allOf(not(startsWith("callback(")), not(endsWith(")"))));
-    }
-
-    @Test
-    public void testJsonWithJavaScriptMediaType() throws Exception {
-        final Response response = target("jsonp").path("PureJson").request("application/x-javascript").get();
-
-        // Method is invoked but we do not have a MBW for application/x-javascript.
-        if (jsonTestProvider.getFeature().getClass() == JacksonFeature.class) {
-            assertThat(response.getStatus(), equalTo(200));
-        } else {
-            assertThat(response.getStatus(), equalTo(500));
-        }
-    }
-
-    @Test
-    public void testJsonWithPaddingDefault() throws Exception {
-        test("JsonWithPaddingDefault", "callback");
-    }
-
-    @Test
-    public void testJsonWithPaddingQueryCallbackParam() throws Exception {
-        test("JsonWithPaddingQueryCallbackParam", "eval", "parse");
-    }
-
-    @Test
-    public void testJsonWithPaddingQueryCallbackParamDefaultQueryParam() throws Exception {
-        test("JsonWithPaddingQueryCallbackParam", "callback", "parse", "callback");
-    }
-
-    @Test
-    public void testJsonWithPaddingQueryCallbackParamDefaultCallback() throws Exception {
-        test("JsonWithPaddingQueryCallbackParam", null, "callback");
-    }
-
-    @Test
-    public void testJsonWithPaddingQueryCallbackParamNegative() throws Exception {
-        test("JsonWithPaddingQueryCallbackParam", "call", "parse", true);
-    }
-
-    @Test
-    public void testJsonWithPaddingCallbackAndQueryCallbackParam() throws Exception {
-        test("JsonWithPaddingCallbackAndQueryCallbackParam", "eval", "run");
-    }
-
-    @Test
-    public void testJsonWithPaddingCallbackAndQueryCallbackParamNegative() throws Exception {
-        test("JsonWithPaddingCallbackAndQueryCallbackParam", "eval", "run", "parse", true);
-    }
-
-    @Test
-    public void testJsonWithPaddingCallbackAndQueryCallbackParamDefault() throws Exception {
-        test("JsonWithPaddingCallbackAndQueryCallbackParam", "evalx", "parse");
-    }
-
-    @Test
-    public void testJsonWithPaddingCallbackAndQueryCallbackParamDefaultNegative() throws Exception {
-        test("JsonWithPaddingCallbackAndQueryCallbackParam", "evalx", "xlave", "eval", true);
-    }
-
-    @Test
-    public void testJsonWithPaddingCallback() throws Exception {
-        test("JsonWithPaddingCallback", "eval", "eval");
-    }
-
-    @Test
-    public void testJsonWithPaddingCallbackNegative() throws Exception {
-        test("JsonWithPaddingCallback", "eval", "lave", true);
-    }
-
-    private void test(final String path, final String callback) {
-        test(path, null, null, callback);
-    }
-
-    private void test(final String path, final String queryParamName, final String callback) {
-        test(path, queryParamName, callback, callback, false);
-    }
-
-    private void test(final String path, final String queryParamName, final String callback, final boolean isNegative) {
-        test(path, queryParamName, callback, callback, isNegative);
-    }
-
-    private void test(final String path, final String queryParamName, final String queryParamValue, final String callback) {
-        test(path, queryParamName, queryParamValue, callback, false);
-    }
-
-    private void test(final String path, final String queryParamName, final String queryParamValue, final String callback,
-                      final boolean isNegative) {
-
-        WebTarget tempTarget = target("jsonp").path(path);
-        if (queryParamName != null) {
-            tempTarget = tempTarget.queryParam(queryParamName, queryParamValue);
-        }
-
-        final Response response = tempTarget.request("application/x-javascript").get();
-
-        assertThat(response.getStatus(), equalTo(200));
-        assertThat(response.getMediaType().toString(), equalTo("application/x-javascript"));
-
-        final String entity = response.readEntity(String.class);
-
-        // Check the entity.
-        final Matcher<String> startsWith = startsWith(callback + "(");
-        final Matcher<String> endsWith = endsWith(")");
-
-        final Matcher<String> callbackMatcher = isNegative ? not(startsWith) : startsWith;
-
-        assertThat(errorMessage, entity, allOf(callbackMatcher, endsWith));
-    }
-
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithoutExceptionMapperTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithoutExceptionMapperTest.java
index dfb07f7..1db9c6f 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithoutExceptionMapperTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/JsonWithoutExceptionMapperTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,8 +19,8 @@
 import org.glassfish.jersey.jackson.JacksonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.annotation.Priority;
 import javax.ws.rs.client.Entity;
@@ -64,7 +64,7 @@
     public void testZullBooleanValue() {
         String response = target().request(MediaType.APPLICATION_JSON)
                 .buildPost(Entity.entity("zull", MediaType.APPLICATION_JSON_TYPE)).invoke().readEntity(String.class);
-        Assert.assertFalse(response.contains("zull"));
-        Assert.assertTrue(response.equals(LowPriorityExceptionMapper.class.getSimpleName()));
+        Assertions.assertFalse(response.contains("zull"));
+        Assertions.assertTrue(response.equals(LowPriorityExceptionMapper.class.getSimpleName()));
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/PojoTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/PojoTest.java
index 26475b4..84fb2ce 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/PojoTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/json/PojoTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,40 +16,36 @@
 
 package org.glassfish.jersey.tests.e2e.json;
 
+import java.util.ArrayList;
 import java.util.Collection;
-import java.util.LinkedList;
 import java.util.List;
 
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.glassfish.jersey.tests.e2e.json.JsonTest.JsonTestSetup;
 import org.glassfish.jersey.tests.e2e.json.entity.pojo.PojoAnimal;
 import org.glassfish.jersey.tests.e2e.json.entity.pojo.PojoAnimalList;
 import org.glassfish.jersey.tests.e2e.json.entity.pojo.PojoCat;
 import org.glassfish.jersey.tests.e2e.json.entity.pojo.PojoDog;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.TestFactory;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class PojoTest extends AbstractJsonTest {
+public class PojoTest {
 
-    @Parameterized.Parameters(name = "{0}")
-    public static Collection<JsonTestSetup[]> generateTestCases() throws Exception {
-        final List<JsonTestSetup[]> jsonTestSetups = new LinkedList<>();
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() throws Exception {
+        List<DynamicContainer> tests = new ArrayList<>();
         final Class<?>[] classes = {PojoAnimalList.class, PojoAnimal.class, PojoDog.class, PojoCat.class};
 
         for (final JsonTestProvider jsonProvider : JsonTestProvider.POJO_PROVIDERS) {
-            jsonTestSetups.add(new JsonTestSetup[]{
-                    new JsonTestSetup(classes, jsonProvider)
-            });
+            JsonTestSetup setupTest = new JsonTestSetup(classes, jsonProvider);
+            JsonTest jsonTest = new JsonTest(setupTest) {};
+            tests.add(TestHelper.toTestContainer(jsonTest,
+                    String.format("pojoTest (%s)", jsonProvider.getClass().getSimpleName())));
         }
 
-        return jsonTestSetups;
+        return tests;
     }
-
-    public PojoTest(final JsonTestSetup jsonTestSetup) throws Exception {
-        super(jsonTestSetup);
-    }
-
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterCloseTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterCloseTest.java
index 3edcf33..866f8f7 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterCloseTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterCloseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,8 +43,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test broadcaster behaviour when closing.
@@ -140,12 +140,12 @@
                     .resolveTemplate("msg", "msg" + i)
                     .request()
                     .get();
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         });
 
         // instruct broadcaster to close
         final Response response = target().path("events/close").request().get();
-        Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+        Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
 
         // send one more message (should be rejected -> request will fail)
         final Response badResponse = target()
@@ -153,19 +153,19 @@
                                         .resolveTemplate("msg", "too-late")
                                         .request()
                                         .get();
-        Assert.assertNotEquals(Response.Status.OK.getStatusCode(), badResponse.getStatus());
+        Assertions.assertNotEquals(Response.Status.OK.getStatusCode(), badResponse.getStatus());
 
         // wait up to latency * msgcount (+1 as reserve) before the server shuts down
-        Assert.assertTrue(onCompleteLatch.await(SLOW_SUBSCRIBER_LATENCY * (MSG_COUNT + 1), TimeUnit.MILLISECONDS));
+        Assertions.assertTrue(onCompleteLatch.await(SLOW_SUBSCRIBER_LATENCY * (MSG_COUNT + 1), TimeUnit.MILLISECONDS));
 
         // get data gathered by the slow subsciber
         String result = target().path("events/result").request().get(String.class);
         final String[] resultArray = result.split(",");
 
         // check, that broadcaster sent all the buffered events to the subscriber before completely closing
-        Assert.assertEquals(MSG_COUNT, resultArray.length);
+        Assertions.assertEquals(MSG_COUNT, resultArray.length);
         for (int i = 0; i < MSG_COUNT; i++) {
-            Assert.assertEquals("msg" + i, resultArray[i]);
+            Assertions.assertEquals("msg" + i, resultArray[i]);
         }
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterExecutorTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterExecutorTest.java
index 9d1249c..2a6caf4 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterExecutorTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterExecutorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,8 +44,8 @@
 import org.glassfish.jersey.spi.ThreadPoolExecutorProvider;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Managed executor service injection and propagation into broadcaster test.
@@ -166,15 +166,15 @@
 
         target().path("sse/push/firstBroadcast").request().get(String.class);
         target().path("sse/push/secondBroadcast").request().get(String.class);
-        Assert.assertTrue("txLatch time-outed.", txLatch.await(2000, TimeUnit.MILLISECONDS));
+        Assertions.assertTrue(txLatch.await(2000, TimeUnit.MILLISECONDS), "txLatch time-outed.");
 
         target().path("sse/close").request().get();
-        Assert.assertTrue("closeLatch time-outed.", closeLatch.await(2000, TimeUnit.MILLISECONDS));
+        Assertions.assertTrue(closeLatch.await(2000, TimeUnit.MILLISECONDS), "closeLatch time-outed.");
 
-        Assert.assertTrue("send either not invoked at all or from wrong thread", sendThreadOk);
-        Assert.assertTrue("onComplete either not invoked at all or from wrong thread", onCompleteThreadOk);
+        Assertions.assertTrue(sendThreadOk, "send either not invoked at all or from wrong thread");
+        Assertions.assertTrue(onCompleteThreadOk, "onComplete either not invoked at all or from wrong thread");
 
-        Assert.assertTrue("Client event called from wrong thread ( " + onEventThreadName[0] + ")",
-               onEventThreadName[0].startsWith("custom-client-executor"));
+        Assertions.assertTrue(onEventThreadName[0].startsWith("custom-client-executor"),
+                "Client event called from wrong thread ( " + onEventThreadName[0] + ")");
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterTest.java
index 0fc1d28..9cf94cc 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/BroadcasterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,8 +19,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.inject.Singleton;
 import javax.ws.rs.GET;
@@ -166,8 +166,8 @@
         eventSourceA.register(event -> resultsA2.add(event.readData()));
         eventSourceA.open();
 
-        Assert.assertTrue(resultsA1.waitBroadcast()); //some delay is required to process consumer and producer
-        Assert.assertTrue(resultsA2.waitBroadcast()); //some delay is required to process consumer and producer
+        Assertions.assertTrue(resultsA1.waitBroadcast()); //some delay is required to process consumer and producer
+        Assertions.assertTrue(resultsA2.waitBroadcast()); //some delay is required to process consumer and producer
 
         target().path("sse/push/firstBroadcast").request().get(String.class);
 
@@ -180,56 +180,56 @@
         eventSourceB.register(event -> resultsB2.add(event.readData()));
         eventSourceB.open();
 
-        Assert.assertTrue(resultsB1.waitBroadcast()); //some delay is required to process consumer and producer
-        Assert.assertTrue(resultsB2.waitBroadcast()); //some delay is required to process consumer and producer
+        Assertions.assertTrue(resultsB1.waitBroadcast()); //some delay is required to process consumer and producer
+        Assertions.assertTrue(resultsB2.waitBroadcast()); //some delay is required to process consumer and producer
 
         target().path("sse/push/secondBroadcast").request().get(String.class);
 
-        Assert.assertTrue("Waiting for resultsA1 to be complete failed.",
-                resultsA1.getEventCountDown().await(ASYNC_WAIT_TIMEOUT, TimeUnit.MILLISECONDS));
-        Assert.assertTrue("Waiting for resultsA2 to be complete failed.",
-                resultsA2.getEventCountDown().await(ASYNC_WAIT_TIMEOUT, TimeUnit.MILLISECONDS));
+        Assertions.assertTrue(resultsA1.getEventCountDown().await(ASYNC_WAIT_TIMEOUT, TimeUnit.MILLISECONDS),
+                "Waiting for resultsA1 to be complete failed.");
+        Assertions.assertTrue(resultsA2.getEventCountDown().await(ASYNC_WAIT_TIMEOUT, TimeUnit.MILLISECONDS),
+                "Waiting for resultsA2 to be complete failed.");
 
-        Assert.assertTrue("Waiting for resultsB1 to be complete failed.",
-                resultsB1.getEventCountDown().await(ASYNC_WAIT_TIMEOUT, TimeUnit.MILLISECONDS));
-        Assert.assertTrue("Waiting for resultsB2 to be complete failed.",
-                resultsB2.getEventCountDown().await(ASYNC_WAIT_TIMEOUT, TimeUnit.MILLISECONDS));
+        Assertions.assertTrue(resultsB1.getEventCountDown().await(ASYNC_WAIT_TIMEOUT, TimeUnit.MILLISECONDS),
+                "Waiting for resultsB1 to be complete failed.");
+        Assertions.assertTrue(resultsB2.getEventCountDown().await(ASYNC_WAIT_TIMEOUT, TimeUnit.MILLISECONDS),
+                "Waiting for resultsB2 to be complete failed.");
 
-        Assert.assertTrue(txLatch.await(5000, TimeUnit.MILLISECONDS));
+        Assertions.assertTrue(txLatch.await(5000, TimeUnit.MILLISECONDS));
 
         // Event1, Event2, Event3, firstBroadcast, secondBroadcast
-        Assert.assertEquals("resultsA1 does not contain 5 elements.", 5, resultsA1.size());
-        Assert.assertEquals("resultsA2 does not contain 5 elements.", 5, resultsA2.size());
-        Assert.assertTrue("resultsA1 does not contain expected data",
-                resultsA1.get(0).equals("Event1")
+        Assertions.assertEquals(5, resultsA1.size(), "resultsA1 does not contain 5 elements.");
+        Assertions.assertEquals(5, resultsA2.size(), "resultsA2 does not contain 5 elements.");
+        Assertions.assertTrue(resultsA1.get(0).equals("Event1")
                         && resultsA1.get(1).equals("Event2")
                         && resultsA1.get(2).equals("Event3")
                         && resultsA1.get(3).equals("firstBroadcast")
-                        && resultsA1.get(4).equals("secondBroadcast"));
+                        && resultsA1.get(4).equals("secondBroadcast"),
+                        "resultsA1 does not contain expected data");
 
-        Assert.assertTrue("resultsA2 does not contain expected data",
-                resultsA2.get(0).equals("Event1")
+        Assertions.assertTrue(resultsA2.get(0).equals("Event1")
                         && resultsA2.get(1).equals("Event2")
                         && resultsA2.get(2).equals("Event3")
                         && resultsA2.get(3).equals("firstBroadcast")
-                        && resultsA2.get(4).equals("secondBroadcast"));
+                        && resultsA2.get(4).equals("secondBroadcast"),
+                        "resultsA2 does not contain expected data");
 
-        Assert.assertEquals("resultsB1 does not contain 4 elements.", 4, resultsB1.size());
-        Assert.assertEquals("resultsB2 does not contain 4 elements.", 4, resultsB2.size());
-        Assert.assertTrue("resultsB1 does not contain expected data",
-                resultsB1.get(0).equals("Event1")
+        Assertions.assertEquals(4, resultsB1.size(), "resultsB1 does not contain 4 elements.");
+        Assertions.assertEquals(4, resultsB2.size(), "resultsB2 does not contain 4 elements.");
+        Assertions.assertTrue(resultsB1.get(0).equals("Event1")
                         && resultsB1.get(1).equals("Event2")
                         && resultsB1.get(2).equals("Event3")
-                        && resultsB1.get(3).equals("secondBroadcast"));
+                        && resultsB1.get(3).equals("secondBroadcast"),
+                        "resultsB1 does not contain expected data");
 
-        Assert.assertTrue("resultsB2 does not contain expected data",
-                resultsB2.get(0).equals("Event1")
+        Assertions.assertTrue(resultsB2.get(0).equals("Event1")
                         && resultsB2.get(1).equals("Event2")
                         && resultsB2.get(2).equals("Event3")
-                        && resultsB2.get(3).equals("secondBroadcast"));
+                        && resultsB2.get(3).equals("secondBroadcast"),
+                        "resultsB2 does not contain expected data");
         target().path("sse/close").request().get();
         closeLatch.await();
-        Assert.assertTrue("Sse instances injected into resource and constructor differ. Sse should have been injected"
-                + "as a singleton", isSingleton);
+        Assertions.assertTrue(isSingleton, "Sse instances injected into resource and constructor differ. "
+                + "Sse should have been injected as a singleton");
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/EventOutputTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/EventOutputTest.java
index 6f43bda..5eb2071 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/EventOutputTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/EventOutputTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,12 +46,12 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.Matchers.containsString;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Event output tests.
@@ -178,12 +178,12 @@
             closeTimedOut = es.close(5, TimeUnit.SECONDS);
         }
 
-        assertEquals("Unexpected event count", 2, eventComments.size());
+        assertEquals(2, eventComments.size(), "Unexpected event count");
         for (int i = 1; i <= 2; i++) {
-            assertEquals("Unexpected comment data on event #" + i, "No comment #" + i, eventComments.poll());
+            assertEquals("No comment #" + i, eventComments.poll(), "Unexpected comment data on event #" + i);
         }
-        assertTrue("Event latch has timed out", latchTimedOut);
-        assertTrue("EventSource.close() has timed out", closeTimedOut);
+        assertTrue(latchTimedOut, "Event latch has timed out");
+        assertTrue(closeTimedOut, "EventSource.close() has timed out");
     }
 
     @Test
@@ -263,9 +263,9 @@
             closeTimedOut = es.close(5, TimeUnit.SECONDS);
         }
 
-        assertEquals("Unexpected event count", 1, counter.get());
-        assertEquals("Unexpected event data", "single", eventData.get());
-        assertTrue("Event latch has timed out", latchTimedOut);
-        assertTrue("EventSource.close() has timed out", closeTimedOut);
+        assertEquals(1, counter.get(), "Unexpected event count");
+        assertEquals("single", eventData.get(), "Unexpected event data");
+        assertTrue(latchTimedOut, "Event latch has timed out");
+        assertTrue(closeTimedOut, "EventSource.close() has timed out");
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/EventSourceWithNamedEventsTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/EventSourceWithNamedEventsTest.java
index 28f9edf..64b3c28 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/EventSourceWithNamedEventsTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/EventSourceWithNamedEventsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,8 +40,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests handling of SSEs with name defined in {@link EventSource}.
@@ -128,8 +128,8 @@
                 try {
                     final Integer data = inboundEvent.readData(Integer.class);
                     System.out.println(inboundEvent.getName() + "; " + data);
-                    Assert.assertEquals(SSE_NAME, inboundEvent.getName());
-                    Assert.assertEquals(MSG_COUNT - count.getCount(), data.intValue());
+                    Assertions.assertEquals(SSE_NAME, inboundEvent.getName());
+                    Assertions.assertEquals(MSG_COUNT - count.getCount(), data.intValue());
                     count.countDown();
                 } catch (ProcessingException ex) {
                     throw new RuntimeException("Error when deserializing of data.", ex);
@@ -139,8 +139,8 @@
         eventSource.register(listener, "message-to-client");
         eventSource.open();
         final boolean sent = latch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS);
-        Assert.assertTrue("Awaiting for SSE message has timeout. Not all message were sent.", sent);
+        Assertions.assertTrue(sent, "Awaiting for SSE message has timeout. Not all message were sent.");
         final boolean handled = count.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS);
-        Assert.assertTrue("Awaiting for SSE message has timeout. Not all message were handled by the listener.", handled);
+        Assertions.assertTrue(handled, "Awaiting for SSE message has timeout. Not all message were handled by the listener.");
     }
 }
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/GenericEntityTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/GenericEntityTest.java
index a19e16c..f481d07 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/GenericEntityTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/GenericEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,7 +19,7 @@
 import java.util.Objects;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.inject.Singleton;
 import javax.ws.rs.GET;
@@ -49,8 +49,9 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class GenericEntityTest extends JerseyTest {
     private static final int BUFFER_SIZE = 20;
@@ -107,10 +108,12 @@
     }
 
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testRegisterNull() {
-        final SseEventSource source = SseEventSource.target(target("genericentityresource/string")).build();
-        source.register(null);
+        assertThrows(IllegalArgumentException.class, () -> {
+            final SseEventSource source = SseEventSource.target(target("genericentityresource/string")).build();
+            source.register(null);
+        });
     }
 
     @Singleton
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/SseCustomEventImplTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/SseCustomEventImplTest.java
index 61abaa5..d15ab70 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/SseCustomEventImplTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/SseCustomEventImplTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,8 +44,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test that {@link org.glassfish.jersey.media.sse.OutboundEventWriter} works with custom
@@ -91,11 +91,11 @@
 
             eventSource.open();
             final boolean allReceived = receivedLatch.await(5000, TimeUnit.MILLISECONDS);
-            Assert.assertTrue(allReceived);
-            Assert.assertEquals(3, results.size());
-            Assert.assertEquals("foo", results.get(0).readData());
-            Assert.assertEquals("bar", results.get(1).readData());
-            Assert.assertEquals("baz", results.get(2).readData());
+            Assertions.assertTrue(allReceived);
+            Assertions.assertEquals(3, results.size());
+            Assertions.assertEquals("foo", results.get(0).readData());
+            Assertions.assertEquals("bar", results.get(1).readData());
+            Assertions.assertEquals("baz", results.get(2).readData());
         } catch (final InterruptedException e) {
             e.printStackTrace();
         }
@@ -112,18 +112,18 @@
             try {
                 results.add(inboundEvent.readData());
                 receiveLatch.countDown();
-                Assert.assertEquals(SSE_EVENT_NAME, inboundEvent.getName());
+                Assertions.assertEquals(SSE_EVENT_NAME, inboundEvent.getName());
             } catch (ProcessingException ex) {
                 throw new RuntimeException("Error when deserializing of data.", ex);
             }
         };
         eventSource.register(listener, SSE_EVENT_NAME);
         eventSource.open();
-        Assert.assertTrue(receiveLatch.await(5000, TimeUnit.MILLISECONDS));
-        Assert.assertEquals(3, results.size());
-        Assert.assertEquals("foo", results.get(0));
-        Assert.assertEquals("bar", results.get(1));
-        Assert.assertEquals("baz", results.get(2));
+        Assertions.assertTrue(receiveLatch.await(5000, TimeUnit.MILLISECONDS));
+        Assertions.assertEquals(3, results.size());
+        Assertions.assertEquals("foo", results.get(0));
+        Assertions.assertEquals("bar", results.get(1));
+        Assertions.assertEquals("baz", results.get(2));
     }
 
     static class MyOutboundEvent implements OutboundSseEvent {
diff --git a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/SseEventSinkToEventSourceTest.java b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/SseEventSinkToEventSourceTest.java
index 53a9f45..4e86ec1 100644
--- a/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/SseEventSinkToEventSourceTest.java
+++ b/tests/e2e-entity/src/test/java/org/glassfish/jersey/tests/e2e/sse/SseEventSinkToEventSourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -45,8 +45,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * JAX-RS {@link SseEventSource} and {@link SseEventSink} test.
@@ -117,9 +117,9 @@
             eventSource.open();
             final boolean allTransmitted = transmitLatch.await(5000, TimeUnit.MILLISECONDS);
             final boolean allReceived = receivedLatch.await(5000, TimeUnit.MILLISECONDS);
-            Assert.assertTrue(allTransmitted);
-            Assert.assertTrue(allReceived);
-            Assert.assertEquals(30, results.size());
+            Assertions.assertTrue(allTransmitted);
+            Assertions.assertTrue(allReceived);
+            Assertions.assertEquals(30, results.size());
         } catch (final InterruptedException e) {
             e.printStackTrace();
         }
@@ -137,16 +137,16 @@
             try {
                 results.add(inboundEvent.readData(Integer.class));
                 receiveLatch.countDown();
-                Assert.assertEquals(INTEGER_SSE_NAME, inboundEvent.getName());
+                Assertions.assertEquals(INTEGER_SSE_NAME, inboundEvent.getName());
             } catch (ProcessingException ex) {
                 throw new RuntimeException("Error when deserializing of data.", ex);
             }
         };
         eventSource.register(listener, INTEGER_SSE_NAME);
         eventSource.open();
-        Assert.assertTrue(transmitLatch.await(5000, TimeUnit.MILLISECONDS));
-        Assert.assertTrue(receiveLatch.await(5000, TimeUnit.MILLISECONDS));
-        Assert.assertEquals(10, results.size());
+        Assertions.assertTrue(transmitLatch.await(5000, TimeUnit.MILLISECONDS));
+        Assertions.assertTrue(receiveLatch.await(5000, TimeUnit.MILLISECONDS));
+        Assertions.assertEquals(10, results.size());
     }
 
 
@@ -164,15 +164,13 @@
 
         eventSource.open();
         final boolean sent = transmitLatch.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS);
-        Assert.assertTrue("Awaiting for SSE message has timeout. Not all message were sent.", sent);
+        Assertions.assertTrue(sent, "Awaiting for SSE message has timeout. Not all message were sent.");
 
         final boolean handled2 = count2.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS);
-        Assert.assertTrue(
-                "Awaiting for SSE message has timeout. Not all message were handled by eventSource2.", handled2);
+        Assertions.assertTrue(handled2, "Awaiting for SSE message has timeout. Not all message were handled by eventSource2.");
 
         final boolean handled1 = count1.await(5 * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS);
-        Assert.assertTrue(
-                "Awaiting for SSE message has timeout. Not all message were handled by eventSource1.", handled1);
+        Assertions.assertTrue(handled1, "Awaiting for SSE message has timeout. Not all message were handled by eventSource1.");
 
     }
 
diff --git a/tests/e2e-inject/cdi-inject-weld/pom.xml b/tests/e2e-inject/cdi-inject-weld/pom.xml
index 46c3cd6..73363d9 100644
--- a/tests/e2e-inject/cdi-inject-weld/pom.xml
+++ b/tests/e2e-inject/cdi-inject-weld/pom.xml
@@ -79,8 +79,8 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/EventsTest.java b/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/EventsTest.java
index 4c0cb29..987a1e6 100644
--- a/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/EventsTest.java
+++ b/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/EventsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,10 +25,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests that the resource can fire an event.
@@ -39,11 +40,12 @@
 
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -53,6 +55,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
diff --git a/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/InterceptorDecoratorTest.java b/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/InterceptorDecoratorTest.java
index a7752bd..acb29a9 100644
--- a/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/InterceptorDecoratorTest.java
+++ b/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/InterceptorDecoratorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,10 +24,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests that the resource can be intercepted and decorated.
@@ -38,11 +39,12 @@
 
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -52,6 +54,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
diff --git a/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/scopes/ScopesTest.java b/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/scopes/ScopesTest.java
index 9f7522b..f88b1e2 100644
--- a/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/scopes/ScopesTest.java
+++ b/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/scopes/ScopesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,9 +20,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
 /**
  * Tests CDI resources.
@@ -31,6 +33,7 @@
 
     private Weld weld;
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         weld = new Weld();
@@ -38,6 +41,7 @@
         super.setUp();
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
diff --git a/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/subresources/ModelProcessorScopeTest.java b/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/subresources/ModelProcessorScopeTest.java
index a26cb29..58d2e5b 100644
--- a/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/subresources/ModelProcessorScopeTest.java
+++ b/tests/e2e-inject/cdi-inject-weld/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/weld/subresources/ModelProcessorScopeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,14 +21,13 @@
 import org.glassfish.jersey.server.ApplicationHandler;
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.tests.e2e.inject.cdi.weld.RequestContextBuilder;
 
 import org.jboss.weld.environment.se.Weld;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test scope of resources enhanced by model processors.
@@ -40,13 +39,13 @@
 
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         weld = new Weld();
         weld.initialize();
     }
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         weld.shutdown();
     }
diff --git a/tests/e2e-inject/cdi2-se/pom.xml b/tests/e2e-inject/cdi2-se/pom.xml
index 4af136d..31a1f13 100644
--- a/tests/e2e-inject/cdi2-se/pom.xml
+++ b/tests/e2e-inject/cdi2-se/pom.xml
@@ -64,8 +64,8 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/EventsTest.java b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/EventsTest.java
index e47ba14..5834998 100644
--- a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/EventsTest.java
+++ b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/EventsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests that the resource can fire an event.
diff --git a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/InterceptorDecoratorTest.java b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/InterceptorDecoratorTest.java
index b3f70a3..fa9a281 100644
--- a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/InterceptorDecoratorTest.java
+++ b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/InterceptorDecoratorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests that the resource can be intercepted and decorated.
diff --git a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/scopes/ScopesTest.java b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/scopes/ScopesTest.java
index 96be176..baeb657 100644
--- a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/scopes/ScopesTest.java
+++ b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/scopes/ScopesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,9 +19,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
 /**
  * Tests CDI resources.
diff --git a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/subresources/ModelProcessorScopeTest.java b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/subresources/ModelProcessorScopeTest.java
index c431a65..3545f4c 100644
--- a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/subresources/ModelProcessorScopeTest.java
+++ b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/subresources/ModelProcessorScopeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.tests.e2e.inject.cdi.se.RequestContextBuilder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test scope of resources enhanced by model processors.
diff --git a/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderClassTest.java b/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderClassTest.java
index d458701..6634e83 100644
--- a/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderClassTest.java
+++ b/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderClassTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,7 +18,7 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.inject.Singleton;
 import javax.ws.rs.core.Application;
diff --git a/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderInFeaturesTest.java b/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderInFeaturesTest.java
index 7a348e2..04ddf11 100644
--- a/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderInFeaturesTest.java
+++ b/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderInFeaturesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,7 +19,7 @@
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
diff --git a/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderInstanceTest.java b/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderInstanceTest.java
index 97113ab..e825e47 100644
--- a/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderInstanceTest.java
+++ b/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderInstanceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,7 +18,7 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.inject.Singleton;
 import javax.ws.rs.core.Application;
diff --git a/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderTest.java b/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderTest.java
index d7a6547..f544adb 100644
--- a/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderTest.java
+++ b/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/HK2AbstractBinderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,7 +18,7 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.inject.Singleton;
 import javax.ws.rs.core.Application;
diff --git a/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/JerseyAbstractBinderTest.java b/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/JerseyAbstractBinderTest.java
index 36a969e..b342ad6 100644
--- a/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/JerseyAbstractBinderTest.java
+++ b/tests/e2e-inject/hk2/src/test/java/org/glassfish/jersey/tests/e2e/inject/hk2/JerseyAbstractBinderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,7 +19,7 @@
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.inject.Singleton;
 import javax.ws.rs.core.Application;
diff --git a/tests/e2e-server/pom.xml b/tests/e2e-server/pom.xml
index 2579e9e..8238980 100644
--- a/tests/e2e-server/pom.xml
+++ b/tests/e2e-server/pom.xml
@@ -180,6 +180,12 @@
             <artifactId>jersey-test-framework-util</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-suite</artifactId>
+            <version>${junit-platform-suite.version}</version>
+            <scope>test</scope>
+        </dependency>
 
         <dependency>
             <groupId>org.hamcrest</groupId>
@@ -188,8 +194,8 @@
         </dependency>
 
         <dependency>
-            <groupId>xmlunit</groupId>
-            <artifactId>xmlunit</artifactId>
+            <groupId>org.xmlunit</groupId>
+            <artifactId>xmlunit-core</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AbstractDisableMetainfServicesLookupTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AbstractDisableMetainfServicesLookupTest.java
index 60b1902..ddd0b83 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AbstractDisableMetainfServicesLookupTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AbstractDisableMetainfServicesLookupTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -49,7 +49,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
 
 /**
  * This is base for tests testing enabling/disabling configuration property
@@ -63,24 +63,24 @@
         final String name = "Jersey";
         {
             Response response = target("/").path(name).request().get();
-            Assert.assertEquals(expectedGetResponseCode, response.getStatus());
+            Assertions.assertEquals(expectedGetResponseCode, response.getStatus());
 
             if (response.getStatusInfo().getFamily() == Response.Status.Family.SUCCESSFUL) {
                 UselessMessage entity = response.readEntity(UselessMessage.class);
                 if (entity != null) {
-                    Assert.assertEquals("Hello " + name, entity.getMessage());
+                    Assertions.assertEquals("Hello " + name, entity.getMessage());
                 }
             }
         }
         {
             Entity<UselessMessage> uselessMessageEntity = Entity.entity(new UselessMessage(name), MediaType.TEXT_PLAIN_TYPE);
             Response response = target("/").request().post(uselessMessageEntity);
-            Assert.assertEquals(expectedPostResponseCode, response.getStatus());
+            Assertions.assertEquals(expectedPostResponseCode, response.getStatus());
 
             if (response.getStatusInfo().getFamily() == Response.Status.Family.SUCCESSFUL) {
                 String entity = response.readEntity(String.class);
                 if (entity.length() > 0) {
-                    Assert.assertEquals(name, entity);
+                    Assertions.assertEquals(name, entity);
                 }
             }
         }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AllInjectablesTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AllInjectablesTest.java
index 069b031..5e8d2d8 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AllInjectablesTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AllInjectablesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,10 +37,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AmbigousResourceMethodTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AmbigousResourceMethodTest.java
index 9eb249e..6b0526e 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AmbigousResourceMethodTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AmbigousResourceMethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test of validation of resources as an end-to-end test.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AppNameBindingTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AppNameBindingTest.java
index 6f1df29..5a3d65a 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AppNameBindingTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AppNameBindingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AppNameBindingTest2.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AppNameBindingTest2.java
index a9e9002..c3d8087 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AppNameBindingTest2.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AppNameBindingTest2.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,8 +43,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test {@link NameBinding name binding} annotations on the {@link Application} class.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ArrayParamConverterTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ArrayParamConverterTest.java
index e6f2cc5..625dbb9 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ArrayParamConverterTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ArrayParamConverterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class ArrayParamConverterTest extends JerseyTest {
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AsyncCallbackTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AsyncCallbackTest.java
index 30df036..d471fba 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AsyncCallbackTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AsyncCallbackTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,9 +35,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests {@link ConnectionCallback connection callback}.
@@ -103,13 +103,12 @@
         @Override
         public void await() throws InterruptedException {
             final boolean success = super.await(10 * multiplier, TimeUnit.SECONDS);
-            Assert.assertTrue(
-                    Thread.currentThread().getName() + ": Latch [" + name + "] awaiting -> timeout!!!",
-                    success);
+            Assertions.assertTrue(success,
+                    Thread.currentThread().getName() + ": Latch [" + name + "] awaiting -> timeout!!!");
         }
     }
 
-    @Before
+    @BeforeEach
     public void setup() {
         onDisconnectCalled.set(false);
         streamClosedSignal = new TestLatch(1, "streamClosedSignal", getAsyncTimeoutMultiplier());
@@ -141,7 +140,7 @@
         response.close();
         streamClosedSignal.countDown();
         callbackCalledSignal.await();
-        Assert.assertTrue(onDisconnectCalled.get());
+        Assertions.assertTrue(onDisconnectCalled.get());
     }
 
     public static class MyConnectionCallback implements ConnectionCallback {
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AsyncResponseTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AsyncResponseTest.java
index 03d840e..e47897d 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AsyncResponseTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AsyncResponseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,12 +46,12 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BeanParamExceptionTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BeanParamExceptionTest.java
index fa7f371..bb5db01 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BeanParamExceptionTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BeanParamExceptionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,8 +37,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BeanParamTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BeanParamTest.java
index cb72b3f..bf534f5 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BeanParamTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BeanParamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,8 +39,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests {@link BeanParam bean param injections}.
@@ -59,32 +59,32 @@
     public void compareBeanWithStandardParams() {
         FullBean bean = getFullBean();
         Response response = doRequest(bean, "resource/compareBean");
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("true", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("true", response.readEntity(String.class));
     }
 
     @Test
     public void testSingleFullBean() {
         FullBean bean = getFullBean();
         Response response = doRequest(bean, "resource/singleBean");
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(bean.toString(), response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(bean.toString(), response.readEntity(String.class));
     }
 
     @Test
     public void testSingleConstructorInitializedBean() {
         FullBean bean = getFullBean();
         Response response = doRequest(bean, "resource/constructorBean");
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(bean.toString(), response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(bean.toString(), response.readEntity(String.class));
     }
 
     @Test
     public void testTwoFullBeans() {
         FullBean bean = getFullBean();
         Response response = doRequest(bean, "resource/twoBeans");
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(bean.toString() + " / " + bean.toString(), response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(bean.toString() + " / " + bean.toString(), response.readEntity(String.class));
     }
 
     @Test
@@ -92,8 +92,8 @@
         FullBean fullBean = getFullBean();
         SmallBean smallBean = new SmallBean(fullBean);
         Response response = doRequest(fullBean, "resource/differentBeans");
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(fullBean.toString() + " / " + smallBean.toString(), response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(fullBean.toString() + " / " + smallBean.toString(), response.readEntity(String.class));
     }
 
     @Test
@@ -103,10 +103,10 @@
         fullBean.setMatrixParam("not-encoded/a?&&+./?");
 
         Response response = doRequest(fullBean, "resource/encodedBean");
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
 
         EncodedBean bean = new EncodedBean("not-encoded/a?&&+./?", "encoded%2Fa%3F%26%26%2B.%2F%3F");
-        Assert.assertEquals(bean.toString(), response.readEntity(String.class));
+        Assertions.assertEquals(bean.toString(), response.readEntity(String.class));
     }
 
     private Response doRequest(FullBean bean, String path) {
@@ -489,8 +489,8 @@
     public void testResourceInitializedBySetter() {
         FullBean bean = getFullBean();
         final Response response = doRequest(bean, "resource-setter");
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(bean.toString(), response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(bean.toString(), response.readEntity(String.class));
     }
 
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BroadcasterTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BroadcasterTest.java
index 9a967cc..cfb2c6e 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BroadcasterTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/BroadcasterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
@@ -145,6 +145,6 @@
     }
 
     private void checkClosed(int count) {
-        assertEquals("Closed count does not match", count, closedOutputs.size());
+        assertEquals(count, closedOutputs.size(), "Closed count does not match");
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ChunkedInputOutputTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ChunkedInputOutputTest.java
index 5a35dd4..69e75a6 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ChunkedInputOutputTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ChunkedInputOutputTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,11 +40,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Chunked input/output tests.
@@ -178,8 +178,8 @@
     public void testChunkedOutputToSingleString() throws Exception {
         final String response = target().path("test").request().get(String.class);
 
-        assertEquals("Unexpected value of chunked response unmarshalled as a single string.",
-                "test\r\ntest\r\ntest\r\n", response);
+        assertEquals("test\r\ntest\r\ntest\r\n", response,
+                "Unexpected value of chunked response unmarshalled as a single string.");
     }
 
     /**
@@ -195,11 +195,11 @@
         int counter = 0;
         String chunk;
         while ((chunk = input.read()) != null) {
-            assertEquals("Unexpected value of chunk " + counter, "test", chunk);
+            assertEquals("test", chunk, "Unexpected value of chunk " + counter);
             counter++;
         }
 
-        assertEquals("Unexpected numbed of received chunks.", 3, counter);
+        assertEquals(3, counter, "Unexpected numbed of received chunks.");
     }
 
     /**
@@ -216,7 +216,7 @@
         int counter = 0;
         String chunk;
         while ((chunk = input.read()) != null) {
-            assertEquals("Unexpected value of chunk " + counter, "test", chunk);
+            assertEquals("test", chunk, "Unexpected value of chunk " + counter);
             counter++;
         }
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ClientResponseOnServerTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ClientResponseOnServerTest.java
index e3b2f2b..09be477 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ClientResponseOnServerTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ClientResponseOnServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.server.Uri;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test for support of client-side response in the server-side resource implementation.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CloseableTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CloseableTest.java
index 89bf38d..d222327 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CloseableTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CloseableTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,8 +31,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Marc Hadley
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CompletionStageTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CompletionStageTest.java
index fb4eafc..262bd0e 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CompletionStageTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CompletionStageTest.java
@@ -20,7 +20,7 @@
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.server.ServerRuntime;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -50,9 +50,9 @@
 import java.util.function.Function;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ContainerListenerRegistrationAsProvidersTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ContainerListenerRegistrationAsProvidersTest.java
index 6543ed4..e456efa 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ContainerListenerRegistrationAsProvidersTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ContainerListenerRegistrationAsProvidersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,9 +24,9 @@
 import org.glassfish.jersey.server.spi.Container;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ContentNegotiationTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ContentNegotiationTest.java
index 77732c7..a145a9d 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ContentNegotiationTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ContentNegotiationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,8 +32,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests determining media type of the response (especially that qs quality parameter is respected when
@@ -161,8 +161,8 @@
     public void testWithoutDefinedRequestedMediaType() {
         WebTarget target = target().path("/persons");
         Response response = target.request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getMediaType());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getMediaType());
     }
 
     @Test
@@ -171,54 +171,54 @@
         //From Class javadoc: "The elements in the returned array are not sorted and are not in any particular order."
         //If there are same endpoints it is necessary to use quality parameter to ensure ordering.
         Response response = target().path("/persons/twoMethodsOneEndpoint").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(MediaType.APPLICATION_XML_TYPE, response.getMediaType());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(MediaType.APPLICATION_XML_TYPE, response.getMediaType());
     }
 
     @Test
     public void testWithoutDefinedRequestedMediaTypeOrQualityModifiersJson() {
         Response response = target().path("/persons/shouldPickFirstJson").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getMediaType());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getMediaType());
     }
 
     @Test
     public void testWithoutDefinedRequestedMediaTypeOrQualityModifiersXml() {
         Response response = target().path("/persons/shouldPickFirstXml").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(MediaType.APPLICATION_XML_TYPE, response.getMediaType());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(MediaType.APPLICATION_XML_TYPE, response.getMediaType());
     }
 
     @Test
     public void test() {
         WebTarget target = target().path("/persons");
         Response response = target.request(MediaType.WILDCARD).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getMediaType());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getMediaType());
     }
 
     @Test
     public void testInverted() {
         WebTarget target = target().path("/persons/inverted");
         Response response = target.request(MediaType.WILDCARD).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(MediaType.APPLICATION_XML_TYPE, response.getMediaType());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(MediaType.APPLICATION_XML_TYPE, response.getMediaType());
     }
 
     @Test
     public void testInvertedWithJSONPreferredByClient() {
         WebTarget target = target().path("/persons/inverted");
         Response response = target.request("application/json;q=1.0", "application/xml;q=0.8").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getMediaType());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getMediaType());
     }
 
     @Test
     public void testReordered() {
         WebTarget target = target().path("/persons/reordered");
         Response response = target.request(MediaType.WILDCARD).get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getMediaType());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(MediaType.APPLICATION_JSON_TYPE, response.getMediaType());
     }
 
     /**
@@ -230,7 +230,7 @@
         WebTarget target = target().path("/persons/reordered");
         Response response = target.request("application/json;q=0.8", "application/xml;q=0.9",
                 "unknown/hello;qs=1.0").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(MediaType.APPLICATION_XML_TYPE, response.getMediaType());
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(MediaType.APPLICATION_XML_TYPE, response.getMediaType());
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomInjectablesApplicationTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomInjectablesApplicationTest.java
index a9f1a9e..8c30b30 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomInjectablesApplicationTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomInjectablesApplicationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -49,11 +49,11 @@
 import org.glassfish.jersey.test.DeploymentContext;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
 
 /**
  * @author Pavel Bucek
@@ -147,14 +147,14 @@
         }
     }
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
     @Override
     protected DeploymentContext configureDeployment() {
-        // If strategy is not IMMEDIATE then test will fail even before @Before setup method invocation.
+        // If strategy is not IMMEDIATE then test will fail even before @BeforeEach setup method invocation.
         // It has no other reason then just run the tests in IMMEDIATE strategy.
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
             return DeploymentContext.newInstance(MyApplication.class);
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomInjectablesResourceConfigTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomInjectablesResourceConfigTest.java
index 01acb85..04429a7 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomInjectablesResourceConfigTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomInjectablesResourceConfigTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomMultivaluedMapProviderTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomMultivaluedMapProviderTest.java
index e9088df..f568687 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomMultivaluedMapProviderTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/CustomMultivaluedMapProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,9 +37,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static junit.framework.TestCase.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests that the Custom MultivaluedMap provider overrides the default
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EncodedFormParamTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EncodedFormParamTest.java
index 34d0379..62b8a6f 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EncodedFormParamTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EncodedFormParamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,8 +31,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Proper encoding of Form params
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EncodedSlashInPathSegmentTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EncodedSlashInPathSegmentTest.java
index 79d7ad7..a15b956 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EncodedSlashInPathSegmentTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EncodedSlashInPathSegmentTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test for JERSEY-1167.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EntityExpansionTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EntityExpansionTest.java
index fee7de4..99f9e43 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EntityExpansionTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/EntityExpansionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,10 +38,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 import org.xml.sax.SAXParseException;
 
 /**
@@ -137,14 +137,14 @@
         }
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void setXdkFlag() {
         // XDK SAXParser does not support this feature, so the test has to be skipped if XDK detected.
         if (SaxHelper.isXdkParserFactory(SAXParserFactory.newInstance())) {
             LOG.warning("XDK SAXParser detected, FEATURE_SECURE_PROCESSING is not supported. Tests will be skipped.");
             isXdk = true;
         }
-        Assume.assumeTrue(!isXdk);
+        Assumptions.assumeTrue(!isXdk);
     }
 
     @Test
@@ -158,9 +158,9 @@
                 + "<testBean><input>&lol3;</input></testBean>";
 
         final Response response = target().path("resource").request().post(Entity.entity(str, MediaType.APPLICATION_XML));
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
         final String entity = response.readEntity(String.class);
-        Assert.assertTrue(entity.startsWith("PASSED"));
+        Assertions.assertTrue(entity.startsWith("PASSED"));
     }
 
     @Test
@@ -168,9 +168,9 @@
         String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
                 + "<testBean str=\"aaa\" str2=\"bbb\" str3=\"ccc\"><input>test</input></testBean>";
         final Response response = target().path("resource").request().post(Entity.entity(str, MediaType.APPLICATION_XML));
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
         final String entity = response.readEntity(String.class);
-        Assert.assertTrue(entity.startsWith("PASSED"));
+        Assertions.assertTrue(entity.startsWith("PASSED"));
     }
 
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionLoggingTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionLoggingTest.java
index 8f1c138..eca6d05 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionLoggingTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionLoggingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,8 +37,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Make sure exceptions, that are not mapped to responses get logged.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperPriorityTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperPriorityTest.java
index 1142e12..be84667 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperPriorityTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperPriorityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,9 +28,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperPropagationTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperPropagationTest.java
index ef9daf7..4516eae 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperPropagationTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperPropagationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -49,12 +49,12 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test exception mappers handling exceptions thrown from different part of code.
@@ -65,7 +65,7 @@
  * @author Miroslav Fuksa
  *
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class ExceptionMapperPropagationTest extends JerseyTest {
 
     public static final String EXCEPTION_TYPE = "exception-type";
@@ -298,186 +298,222 @@
 
     // Resource
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testCheckedExceptionInResource() {
         _test(TestCheckedException.class, ExceptionResource.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testRuntimeExceptionInResource() {
         _test(TestRuntimeException.class, ExceptionResource.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testWebApplicationExceptionInResource() {
         _testWae(ExceptionResource.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testProcessingExceptionInResource() {
         _test(ProcessingException.class, ExceptionResource.class);
     }
 
     // Sub resource
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testCheckedExceptionInSubResourceLocatorMethod() {
         _test(TestCheckedException.class, ExceptionResource.class, "exception/sub");
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testRuntimeExceptionInSubResourceLocatorMethod() {
         _test(TestRuntimeException.class, ExceptionResource.class, "exception/sub");
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testWaeInSubResourceLocatorMethod() {
         _testWae(ExceptionResource.class, "exception/sub");
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testProcessingExceptionInSubResourceLocatorMethod() {
         _test(ProcessingException.class, ExceptionResource.class, "exception/sub");
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testCheckedExceptionInSubResource() {
         _test(TestCheckedException.class, SubResourceLocator.class, "exception/sub");
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testRuntimeExceptionInSubResource() {
         _test(TestRuntimeException.class, SubResourceLocator.class, "exception/sub");
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testWaeInSubResource() {
         _testWae(SubResourceLocator.class, "exception/sub");
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testProcessingExceptionInSubResource() {
         _test(ProcessingException.class, SubResourceLocator.class, "exception/sub");
     }
 
     // response filters
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testRuntimeExceptionInResponseFilter() {
         _test(TestRuntimeException.class, TestResponseFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testIOExceptionInResponseFilter() {
         _test(IOException.class, TestResponseFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testWaeInResponseFilter() {
         _testWae(TestResponseFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testProcessingExceptionInResponseFilter() {
         _test(ProcessingException.class, TestResponseFilter.class);
     }
 
     // response filters
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testRuntimeExceptionInRequestFilter() {
         _test(TestRuntimeException.class, TestRequestFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testIOExceptionInRequestFilter() {
         _test(IOException.class, TestRequestFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testWaeInRequestFilter() {
         _testWae(TestRequestFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testProcessingExceptionInRequestFilter() {
         _test(ProcessingException.class, TestRequestFilter.class);
     }
 
     // MBR/W
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testRuntimeExceptionInMBW() {
         _test(TestRuntimeException.class, TestMBW.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testIOExceptionInMBW() {
         _test(IOException.class, TestMBW.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testWaeInMBW() {
         _testWae(TestMBW.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testProcessingExceptionInMBW() {
         _test(ProcessingException.class, TestMBW.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testRuntimeExceptionInMBR() {
         _test(TestRuntimeException.class, TestMBR.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testIOExceptionInMBR() {
         _test(IOException.class, TestMBR.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testWaeInMBR() {
         _testWae(TestMBR.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testProcessingExceptionInMBR() {
         _test(ProcessingException.class, TestMBR.class);
     }
 
     // interceptors
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testRuntimeExceptionInReaderInterceptor() {
         _test(TestRuntimeException.class, TestReaderInterceptor.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testIOExceptionInReaderInterceptor() {
         _test(IOException.class, TestReaderInterceptor.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testWaeInReaderInterceptor() {
         _testWae(TestReaderInterceptor.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testProcessingExceptionInReaderInterceptor() {
         _test(ProcessingException.class, TestReaderInterceptor.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testRuntimeExceptionInWriterInterceptor() {
         _test(TestRuntimeException.class, TestWriterInterceptor.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testIOExceptionInWriterInterceptor() {
         _test(IOException.class, TestWriterInterceptor.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testWaeInWriterInterceptor() {
         _testWae(TestWriterInterceptor.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testProcessingExceptionInWriterInterceptor() {
         _test(ProcessingException.class, TestWriterInterceptor.class);
     }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperTest.java
index 6ebbac5..f84d80d 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExceptionMapperTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -57,10 +57,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests throwing exceptions in {@link MessageBodyReader} and {@link MessageBodyWriter}.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExtendedExceptionMapperTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExtendedExceptionMapperTest.java
index 350b8c4..91347b7 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExtendedExceptionMapperTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExtendedExceptionMapperTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,9 +33,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Miroslav Fuksa
@@ -288,10 +288,10 @@
     private void _test(String input, String expectedMapper) {
         final Response response = target("resource").request().post(Entity.entity(input, MediaType.TEXT_PLAIN_TYPE));
         if (expectedMapper == null) {
-            Assert.assertEquals(500, response.getStatus());
+            Assertions.assertEquals(500, response.getStatus());
         } else {
-            Assert.assertEquals(200, response.getStatus());
-            Assert.assertEquals(expectedMapper, response.readEntity(String.class));
+            Assertions.assertEquals(200, response.getStatus());
+            Assertions.assertEquals(expectedMapper, response.readEntity(String.class));
         }
     }
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExtendedUriInfoTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExtendedUriInfoTest.java
index b88f94e..8992059 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExtendedUriInfoTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ExtendedUriInfoTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,10 +40,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * {@link ExtendedUriInfo} e2e tests - testing e.g. getting matched resources, mapped throwable, etc.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/FormParamMultivaluedInjectionTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/FormParamMultivaluedInjectionTest.java
index 8270802..b75ca49 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/FormParamMultivaluedInjectionTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/FormParamMultivaluedInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests that the MultivaluedMap injection does not close the request buffer and allows
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GlobalNameBoundInterceptorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GlobalNameBoundInterceptorTest.java
index 5aaec35..a27caae 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GlobalNameBoundInterceptorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GlobalNameBoundInterceptorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -45,8 +45,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests name bound and global bound interceptors.
@@ -196,58 +196,59 @@
     @Test
     public void testPrematchingException() {
         final Response response = target("resource").request().header("pre-filter", "exception").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("mapped-(pre-matching-exception)-[global-bound]", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("mapped-(pre-matching-exception)-[global-bound]", response.readEntity(String.class));
     }
 
     @Test
     public void testPrematchingAbort() {
         final Response response = target("resource").request().header("pre-filter", "abort").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("(pre-matching-abort)-[global-bound]", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("(pre-matching-abort)-[global-bound]", response.readEntity(String.class));
     }
 
     @Test
     public void testRequestFilterException() {
         final Response response = target("resource").request().header("request-filter", "exception").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("mapped-(request-filter-exception)-[global-bound]-[test-bound]", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("mapped-(request-filter-exception)-[global-bound]-[test-bound]",
+                response.readEntity(String.class));
     }
 
     @Test
     public void testRequestFilterAbort() {
         final Response response = target("resource").request().header("request-filter", "abort").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("(request-filter-abort)-[global-bound]-[test-bound]", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("(request-filter-abort)-[global-bound]-[test-bound]", response.readEntity(String.class));
     }
 
     @Test
     public void testStandardResource() {
         final Response response = target("resource/standard").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("ok-[global-bound]", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("ok-[global-bound]", response.readEntity(String.class));
     }
 
     @Test
     public void testTestResource() {
         final Response response = target("resource").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("get-[global-bound]-[test-bound]", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("get-[global-bound]-[test-bound]", response.readEntity(String.class));
     }
 
 
     @Test
     public void testPost() {
         final Response response = target("resource/postGlobal").request().post(Entity.entity("post", MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("post-[global-reader-interceptor]-[global-bound]", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("post-[global-reader-interceptor]-[global-bound]", response.readEntity(String.class));
     }
 
     @Test
     public void testPostBound() {
         final Response response = target("resource/postBound").request().post(Entity.entity("post", MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("post-[global-reader-interceptor]-[post-reader-interceptor]-[global-bound]",
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("post-[global-reader-interceptor]-[post-reader-interceptor]-[global-bound]",
                 response.readEntity(String.class));
     }
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GloballyNameBoundResourceFilterTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GloballyNameBoundResourceFilterTest.java
index 3c9076b..8cb8403 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GloballyNameBoundResourceFilterTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GloballyNameBoundResourceFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,11 +35,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * JAX-RS global name-bound filter tests.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GrizzlyInjectionTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GrizzlyInjectionTest.java
index 240fe6e..1d0ac80 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GrizzlyInjectionTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GrizzlyInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,9 +30,9 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Test for JERSEY-1170
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GsonCustomTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GsonCustomTest.java
index 3d9f085..a3bdb03 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GsonCustomTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GsonCustomTest.java
@@ -16,7 +16,7 @@
 
 package org.glassfish.jersey.tests.e2e.server;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.util.Date;
 
@@ -31,7 +31,7 @@
 import org.glassfish.jersey.gson.JsonGsonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GsonDefaultTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GsonDefaultTest.java
index 724a328..1414990 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GsonDefaultTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/GsonDefaultTest.java
@@ -16,7 +16,7 @@
 
 package org.glassfish.jersey.tests.e2e.server;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
@@ -31,7 +31,7 @@
 import org.glassfish.jersey.gson.JsonGsonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class GsonDefaultTest extends JerseyTest {
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/IllegalArgumentExceptionTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/IllegalArgumentExceptionTest.java
index 3e27023..555b171 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/IllegalArgumentExceptionTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/IllegalArgumentExceptionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,9 +32,9 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class IllegalArgumentExceptionTest extends JerseyTest {
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InitializationLoggingTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InitializationLoggingTest.java
index aba5373..7d6894d 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InitializationLoggingTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InitializationLoggingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InjectionManagerServerProviderTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InjectionManagerServerProviderTest.java
index d44521a..8ce2adb 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InjectionManagerServerProviderTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InjectionManagerServerProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -45,8 +45,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests {@link InjectionManagerProvider}.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InjectionTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InjectionTest.java
index 5c38427..3180f17 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InjectionTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,10 +37,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Injection E2E tests.
@@ -105,23 +105,23 @@
      * We would need to by-pass these issues in underlying layer to un-ignore the test.
      */
     @Test
-    @Ignore
+    @Disabled
     public void testInjectionIntoDeleteMethod() {
         Response response;
 
         response = target("injection").path("delete-path-param/test").request()
                 .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true)
                 .method("DELETE", Entity.text("body"));
-        assertNotNull("Response is null.", response);
-        assertEquals("Unexpected response status.", 200, response.getStatus());
-        assertEquals("Unexpected response entity.", "deleted: test-body", response.readEntity(String.class));
+        assertNotNull(response, "Response is null.");
+        assertEquals(200, response.getStatus(), "Unexpected response status.");
+        assertEquals("deleted: test-body", response.readEntity(String.class), "Unexpected response entity.");
 
         response = target("injection").path("delete-path-param-async/test").request()
                 .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true)
                 .method("DELETE", Entity.text("body"));
-        assertNotNull("Response is null.", response);
-        assertEquals("Unexpected response status.", 200, response.getStatus());
-        assertEquals("Unexpected response entity.", "deleted: test-body", response.readEntity(String.class));
+        assertNotNull(response, "Response is null.");
+        assertEquals(200, response.getStatus(), "Unexpected response status.");
+        assertEquals("deleted: test-body", response.readEntity(String.class), "Unexpected response entity.");
     }
 
     /**
@@ -133,7 +133,7 @@
     public void testAsyncMethodParamInjection() {
 
         Response response = target("injection").path("async").request().get();
-        assertEquals("Unexpected response status.", 200, response.getStatus());
-        assertNotNull("Response is null.", response);
+        assertEquals(200, response.getStatus(), "Unexpected response status.");
+        assertNotNull(response, "Response is null.");
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InputStreamResponseTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InputStreamResponseTest.java
index 593eba1..6a8476a 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InputStreamResponseTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InputStreamResponseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * This is to make sure you can just pass an input stream to Jersey,
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InterceptorHttpHeadersInjectionTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InterceptorHttpHeadersInjectionTest.java
index 248c44c..fd65881 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InterceptorHttpHeadersInjectionTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InterceptorHttpHeadersInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,9 +35,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for JERSEY-1545.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InterceptorNameAndDynamicBindingTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InterceptorNameAndDynamicBindingTest.java
index 88aee31..e4bc6f9 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InterceptorNameAndDynamicBindingTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/InterceptorNameAndDynamicBindingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,8 +46,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/Issue4097Test.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/Issue4097Test.java
index c7f08a2..2395d18 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/Issue4097Test.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/Issue4097Test.java
@@ -16,7 +16,7 @@
 
 package org.glassfish.jersey.tests.e2e.server;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -26,7 +26,7 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class Issue4097Test extends JerseyTest {
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ManagedClientExecutorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ManagedClientExecutorTest.java
index 822cb08..d588cf5 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ManagedClientExecutorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ManagedClientExecutorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -53,8 +53,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test, that managed client uses the custom executor service.
@@ -257,13 +257,13 @@
     @Test
     public void testManagedClientExecutor() {
         final String response = target().path("test/executor").request().get(String.class);
-        Assert.assertEquals("foo-executor-service-0", response);
+        Assertions.assertEquals("foo-executor-service-0", response);
     }
 
     @Test
     public void testManagedClientScheduledExecutor() {
         final String response = target().path("test/scheduledExecutor").request().get(String.class);
-        Assert.assertEquals("bar-executor-service bar-executor-service", response);
+        Assertions.assertEquals("bar-executor-service bar-executor-service", response);
         System.out.println(response);
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MessageBodyProvidersExceptionsTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MessageBodyProvidersExceptionsTest.java
index 799337d..ac93f34 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MessageBodyProvidersExceptionsTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MessageBodyProvidersExceptionsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * JERSEY-2500 reproducer test.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MetainfServicesLookupDisabledTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MetainfServicesLookupDisabledTest.java
index 989d872..90a36d8 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MetainfServicesLookupDisabledTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MetainfServicesLookupDisabledTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,7 +21,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Property {@link ServerProperties#METAINF_SERVICES_LOOKUP_DISABLE} IS set.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MetainfServicesLookupEnabledTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MetainfServicesLookupEnabledTest.java
index 2e30267..a517ff4 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MetainfServicesLookupEnabledTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/MetainfServicesLookupEnabledTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,7 +16,7 @@
 
 package org.glassfish.jersey.tests.e2e.server;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Property {@link org.glassfish.jersey.server.ServerProperties#METAINF_SERVICES_LOOKUP_DISABLE} is NOT set.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ModelProcessorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ModelProcessorTest.java
index e0c1c8b..6964f53 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ModelProcessorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ModelProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,11 +44,12 @@
 import org.glassfish.jersey.server.model.ResourceMethod;
 import org.glassfish.jersey.server.model.ResourceModel;
 import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test model processor.
@@ -56,7 +57,7 @@
  * @author Miroslav Fuksa
  *
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class ModelProcessorTest extends JerseyTest {
 
     public static class ModelProcessorFeature implements Feature {
@@ -229,6 +230,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceAGet() {
         Response response = target("/a").request().get();
         assertEquals(200, response.getStatus());
@@ -237,6 +239,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceAPost() {
         Response response = target("/a").request().post(Entity.entity("post", MediaType.TEXT_PLAIN_TYPE));
         assertEquals(200, response.getStatus());
@@ -245,6 +248,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceAOptions() {
         Response response = target("/a").request(MediaType.TEXT_PLAIN_TYPE).options();
         assertEquals(200, response.getStatus());
@@ -253,6 +257,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceAChildGet() {
         Response response = target("/a/child").request().get();
         assertEquals(200, response.getStatus());
@@ -261,6 +266,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceALocatorGet() {
         Response response = target("/a/locator").request().get();
         assertEquals(200, response.getStatus());
@@ -269,6 +275,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceALocatorOptions() {
         Response response = target("/a/locator").request(MediaType.TEXT_PLAIN_TYPE).options();
         assertEquals(204, response.getStatus());
@@ -277,6 +284,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceBGet() {
         Response response = target("/b").request().get();
         assertEquals(200, response.getStatus());
@@ -285,6 +293,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceBOptions() {
         Response response = target("/b").request(MediaType.TEXT_PLAIN_TYPE).options();
         assertEquals(200, response.getStatus());
@@ -293,6 +302,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceBLocatorGet() {
         Response response = target("/b/locator").request().get();
         assertEquals(200, response.getStatus());
@@ -301,6 +311,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceBLocatorOptions() {
         Response response = target("/b/locator").request(MediaType.TEXT_PLAIN_TYPE).options();
         assertEquals(204, response.getStatus());
@@ -309,6 +320,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceAMyResource() {
         Response response = target("/a/my-resource").request().get();
         assertEquals(200, response.getStatus());
@@ -317,6 +329,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceALocatorMyResource() {
         Response response = target("/a/locator/my-resource").request(MediaType.TEXT_PLAIN_TYPE).get();
         assertEquals(200, response.getStatus());
@@ -325,6 +338,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceBMyResource() {
         Response response = target("/b/my-resource").request().get();
         assertEquals(200, response.getStatus());
@@ -333,6 +347,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testInfo() {
         Response response = target("/model").request().get();
         assertEquals(200, response.getStatus());
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/NameBindingTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/NameBindingTest.java
index 02a740c..8900a3c 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/NameBindingTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/NameBindingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -41,14 +41,15 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
 import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test-suite ensuring the correct functionality of name binding.
@@ -56,7 +57,7 @@
  * @author Miroslav Fuksa
  * @author Michal Gajdos
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class NameBindingTest extends JerseyTest {
 
     @Override
@@ -171,11 +172,11 @@
         final Set<Class<?>> positiveFilters = Arrays.stream(filtersThatShouldBeCalled).collect(Collectors.toSet());
         for (final Class<?> filter : FILTERS) {
             if (positiveFilters.contains(filter)) {
-                assertEquals("Filter '" + filter.getSimpleName() + "' should be called.", "called", response.getHeaders()
-                        .getFirst(filter.getSimpleName()));
+                assertEquals("called", response.getHeaders().getFirst(filter.getSimpleName()),
+                        "Filter '" + filter.getSimpleName() + "' should be called.");
             } else {
-                assertNull("Filter '" + filter.getSimpleName() + "' should not be called.", response.getHeaders().get(filter
-                        .getSimpleName()));
+                assertNull(response.getHeaders().get(filter.getSimpleName()),
+                        "Filter '" + filter.getSimpleName() + "' should not be called.");
             }
         }
     }
@@ -187,11 +188,13 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceNoBinding() {
         checkCalled(_getResponse("resource"));
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceFooBinding() {
         checkCalled(_getResponse("resource/foo"), FooFilter.class);
     }
@@ -201,6 +204,7 @@
      * invoked for each resource method (globally).
      */
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void preMatchingNameBinding() {
         final Response response = _getResponse("resource/preMatchingNameBinding");
 
@@ -209,11 +213,13 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceBarBinding() {
         checkCalled(_getResponse("resource/bar"), BarFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testResourceFooBarBinding() {
         checkCalled(_getResponse("resource/foobar"), FooFilter.class, BarFilter.class, FooBarFilter.class);
     }
@@ -225,21 +231,25 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFooResourceNoBinding() {
         checkCalled(_getResponse("foo-resource"), FooFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFooResourceFooBinding() {
         checkCalled(_getResponse("foo-resource/foo"), FooFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFooResourceBarBinding() {
         checkCalled(_getResponse("foo-resource/bar"), FooFilter.class, BarFilter.class, FooBarFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFooResourceFooBarBinding() {
         checkCalled(_getResponse("foo-resource/foobar"), FooFilter.class, BarFilter.class, FooBarFilter.class);
     }
@@ -251,21 +261,25 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBarResourceNoBinding() {
         checkCalled(_getResponse("bar-resource"), BarFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBarResourceFooBinding() {
         checkCalled(_getResponse("bar-resource/foo"), BarFilter.class, FooFilter.class, FooBarFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBarResourceBarBinding() {
         checkCalled(_getResponse("bar-resource/bar"), BarFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBarResourceFooBarBinding() {
         checkCalled(_getResponse("bar-resource/foobar"), BarFilter.class, FooFilter.class, FooBarFilter.class);
     }
@@ -278,21 +292,25 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFooBarResourceNoBinding() {
         checkCalled(_getResponse("foobar-resource"), BarFilter.class, FooFilter.class, FooBarFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFooBarResourceFooBinding() {
         checkCalled(_getResponse("foobar-resource/foo"), BarFilter.class, FooFilter.class, FooBarFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFooBarResourceBarBinding() {
         checkCalled(_getResponse("foobar-resource/bar"), BarFilter.class, FooFilter.class, FooBarFilter.class);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFooBarResourceFooBarBinding() {
         checkCalled(_getResponse("foobar-resource/foobar"), BarFilter.class, FooFilter.class, FooBarFilter.class);
     }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/OptionalParamConverterNoProviderTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/OptionalParamConverterNoProviderTest.java
index 1626929..2092af5 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/OptionalParamConverterNoProviderTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/OptionalParamConverterNoProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,7 +16,7 @@
 
 package org.glassfish.jersey.tests.e2e.server;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.util.List;
 import java.util.Optional;
@@ -32,7 +32,7 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class OptionalParamConverterNoProviderTest extends JerseyTest {
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/OptionalParamConverterTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/OptionalParamConverterTest.java
index 5306b21..0734c55 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/OptionalParamConverterTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/OptionalParamConverterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,10 +37,10 @@
 import org.glassfish.jersey.internal.inject.ExtractorException;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 public class OptionalParamConverterTest extends JerseyTest {
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ParamConverterPriorityTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ParamConverterPriorityTest.java
index 6a49917..b335bf3 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ParamConverterPriorityTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ParamConverterPriorityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,7 +34,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.hamcrest.Matchers.typeCompatibleWith;
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ParamConverterTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ParamConverterTest.java
index 6ef6bc6..ed473a9 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ParamConverterTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ParamConverterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,11 +43,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.Matchers.containsString;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Tests {@link ParamConverter param converters} as e2e test.
@@ -131,7 +131,7 @@
     }
 
     @Test
-    @Ignore("TODO: ParamConversion not yet implemented in the ResponseBuilder (JERSEY-1385).")
+    @Disabled("TODO: ParamConversion not yet implemented in the ResponseBuilder (JERSEY-1385).")
     // TODO: JERSEY-1385: after clarifying with spec the ResponseBuilder paramconversion should be finished (or removed)
     public void testStringParamInResponse() {
         final Response response = target().path("resource/response").request().get();
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PathEncodingTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PathEncodingTest.java
index 19abcc3..1ce4171 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PathEncodingTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PathEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Testing encoding of {@Path path annotations}.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PerRequestLifecycleTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PerRequestLifecycleTest.java
index be23404..a7f99f2 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PerRequestLifecycleTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PerRequestLifecycleTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,10 +33,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * @author Marc Hadley
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PostConstructTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PostConstructTest.java
index d3812ba..fe47a28 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PostConstructTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PostConstructTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,10 +35,10 @@
 import org.glassfish.jersey.test.DeploymentContext;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Testing that {@link Context injection} is done before invoking method annotated with {@link PostConstruct}.
@@ -94,14 +94,14 @@
         }
     }
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
     @Override
     protected DeploymentContext configureDeployment() {
-        // If strategy is not IMMEDIATE then test will fail even before @Before setup method invocation.
+        // If strategy is not IMMEDIATE then test will fail even before @BeforeEach setup method invocation.
         // It has no other reason then just run the tests in IMMEDIATE strategy.
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
             return DeploymentContext.newInstance(MyApplication.class);
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PrimitiveTypesTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PrimitiveTypesTest.java
index 7dabf96..dbf0e19 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PrimitiveTypesTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/PrimitiveTypesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,19 +34,20 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 /**
  * Tests primitive types as entity.
  *
  * @author Miroslav Fuksa
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class PrimitiveTypesTest extends JerseyTest {
     @Override
     protected ResourceConfig configure() {
@@ -54,6 +55,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testInteger() {
         WebTarget web = target().path("test");
         Response response = web.path("Integer").request().post(Entity.entity(5, MediaType.TEXT_PLAIN_TYPE));
@@ -62,6 +64,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveInt() {
         WebTarget web = target().path("test");
         Response response = web.path("int").request().post(Entity.entity(5, MediaType.TEXT_PLAIN_TYPE));
@@ -70,6 +73,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveIntNull() {
         WebTarget web = target().path("test");
         Response response = web.path("int").request().post(Entity.entity("", MediaType.TEXT_PLAIN_TYPE));
@@ -78,6 +82,7 @@
 
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testLong() {
         WebTarget web = target().path("test");
         Response response = web.path("Long").request().post(Entity.entity(5L, MediaType.TEXT_PLAIN_TYPE));
@@ -86,6 +91,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveLong() {
         WebTarget web = target().path("test");
         Response response = web.path("long").request().post(Entity.entity(5L, MediaType.TEXT_PLAIN_TYPE));
@@ -94,6 +100,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveLongNull() {
         WebTarget web = target().path("test");
         Response response = web.path("long").request().post(Entity.entity("", MediaType.TEXT_PLAIN_TYPE));
@@ -102,6 +109,7 @@
 
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testShort() {
         WebTarget web = target().path("test");
         Response response = web.path("Short").request().post(Entity.entity((short) 5, MediaType.TEXT_PLAIN_TYPE));
@@ -110,6 +118,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveShort() {
         WebTarget web = target().path("test");
         Response response = web.path("short").request().post(Entity.entity((short) 5, MediaType.TEXT_PLAIN_TYPE));
@@ -118,6 +127,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveShortNull() {
         WebTarget web = target().path("test");
         Response response = web.path("short").request().post(Entity.entity("", MediaType.TEXT_PLAIN_TYPE));
@@ -125,6 +135,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testByte() {
         WebTarget web = target().path("test");
         Response response = web.path("Byte").request().post(Entity.entity((byte) 5, MediaType.TEXT_PLAIN_TYPE));
@@ -133,6 +144,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveByte() {
         WebTarget web = target().path("test");
         Response response = web.path("byte").request().post(Entity.entity((byte) 5, MediaType.TEXT_PLAIN_TYPE));
@@ -141,6 +153,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveByteNull() {
         WebTarget web = target().path("test");
         Response response = web.path("byte").request().post(Entity.entity("", MediaType.TEXT_PLAIN_TYPE));
@@ -148,6 +161,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testFloat() {
         WebTarget web = target().path("test");
         Response response = web.path("Float").request().post(Entity.entity((float) 5, MediaType.TEXT_PLAIN_TYPE));
@@ -156,6 +170,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveFloat() {
         WebTarget web = target().path("test");
         Response response = web.path("float").request().post(Entity.entity(5f, MediaType.TEXT_PLAIN_TYPE));
@@ -164,6 +179,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveFloatNull() {
         WebTarget web = target().path("test");
         Response response = web.path("float").request().post(Entity.entity("", MediaType.TEXT_PLAIN_TYPE));
@@ -171,6 +187,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testDouble() {
         WebTarget web = target().path("test");
         Response response = web.path("Double").request().post(Entity.entity((double) 5, MediaType.TEXT_PLAIN_TYPE));
@@ -179,6 +196,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveDouble() {
         WebTarget web = target().path("test");
         Response response = web.path("double").request().post(Entity.entity(5d, MediaType.TEXT_PLAIN_TYPE));
@@ -187,6 +205,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveDoubleNull() {
         WebTarget web = target().path("test");
         Response response = web.path("double").request().post(Entity.entity("", MediaType.TEXT_PLAIN_TYPE));
@@ -194,6 +213,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testCharacter() {
         WebTarget web = target().path("test");
         Response response = web.path("Character").request().post(Entity.entity('a', MediaType.TEXT_PLAIN_TYPE));
@@ -202,6 +222,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveCharacter() {
         WebTarget web = target().path("test");
         Response response = web.path("char").request().post(Entity.entity('a', MediaType.TEXT_PLAIN_TYPE));
@@ -210,6 +231,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveCharacterNull() {
         WebTarget web = target().path("test");
         Response response = web.path("char").request().post(Entity.entity("", MediaType.TEXT_PLAIN_TYPE));
@@ -217,6 +239,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testString() {
         WebTarget web = target().path("test");
         Response response = web.path("String").request().post(Entity.entity("String", MediaType.TEXT_PLAIN_TYPE));
@@ -225,6 +248,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBoolean() {
         WebTarget web = target().path("test");
         Response response = web.path("Boolean").request().post(Entity.entity(Boolean.TRUE, MediaType.TEXT_PLAIN_TYPE));
@@ -234,6 +258,7 @@
 
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testPrimitiveBoolean() {
         WebTarget web = target().path("test");
         Response response = web.path("boolean").request().post(Entity.entity(true, MediaType.TEXT_PLAIN_TYPE));
@@ -242,6 +267,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBigDecimal() {
         WebTarget web = target().path("test");
         Response response = web.path("bigDecimal").request().post(Entity.entity(new BigDecimal("15"), MediaType.TEXT_PLAIN_TYPE));
@@ -250,6 +276,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testBigInteger() {
         WebTarget web = target().path("test");
         Response response = web.path("bigInteger").request().post(Entity.entity(new BigInteger("15"), MediaType.TEXT_PLAIN_TYPE));
@@ -258,6 +285,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testAtomicInteger() {
         WebTarget web = target().path("test");
         Response response = web.path("atomicInteger").request().post(Entity.entity(new AtomicInteger(15),
@@ -267,6 +295,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testAtomicLong() {
         WebTarget web = target().path("test");
         Response response = web.path("atomicLong").request().post(Entity.entity(new AtomicLong(15),
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ReloadTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ReloadTest.java
index 98bf872..add5544 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ReloadTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ReloadTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.server.spi.Container;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Reload capability test.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/RequestScopedAndAsyncTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/RequestScopedAndAsyncTest.java
index 09a312b..6c17209 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/RequestScopedAndAsyncTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/RequestScopedAndAsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,9 +39,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * JERSEY-2677 reproducer - test, that {@code Factory.dispose()} is correctly called for both sync and async cases.
@@ -118,7 +118,7 @@
         }
     }
 
-    @Before
+    @BeforeEach
     public void resetCounters() {
         InjectableFactory.reset();
     }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceConfigTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceConfigTest.java
index f6f4f04..e2010e4 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceConfigTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceConfigTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,9 +31,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * End to end test class for testing {@code ResourceConfig} features.
@@ -159,7 +159,7 @@
     }
 
     @Test
-    @Ignore("TODO: Add test for reloading resource config in the container (once it is supported)")
+    @Disabled("TODO: Add test for reloading resource config in the container (once it is supported)")
     public void testJersey1094ReloadResourceConfig() throws Exception {
         // TODO test reloading resource config in the container (once it is supported)
     }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceFilterTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceFilterTest.java
index 26156cb..abda5e7 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceFilterTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,13 +44,13 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-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.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * JAX-RS name-bound filter tests.
@@ -116,9 +116,9 @@
 
     private void test(String name) {
         Response r = target("basic").path(name).request().get();
-        assertEquals("Unexpected HTTP response status code.", 200, r.getStatus());
-        assertTrue("Response does not have entity.", r.hasEntity());
-        assertEquals("Unexpected response entity value.", name, r.readEntity(String.class));
+        assertEquals(200, r.getStatus(), "Unexpected HTTP response status code.");
+        assertTrue(r.hasEntity(), "Response does not have entity.");
+        assertEquals(name, r.readEntity(String.class), "Unexpected response entity value.");
     }
 
     @Path("/basic")
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceRoutingTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceRoutingTest.java
index 6274c4a..2642ed6 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceRoutingTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResourceRoutingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 
 /**
@@ -69,21 +69,21 @@
     @Test
     public void subWrongPath() throws Exception {
         Response response = target("a/b/d").request().get();
-        Assert.assertEquals(404, response.getStatus());
+        Assertions.assertEquals(404, response.getStatus());
     }
 
     @Test
     public void correctPath() throws Exception {
         Response response = target("a/b/c").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("a/b/c", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("a/b/c", response.readEntity(String.class));
     }
 
     @Test
     public void correctPath2() throws Exception {
         Response response = target("a/q").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("a/q", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("a/q", response.readEntity(String.class));
     }
 
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResponseStatusTypeTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResponseStatusTypeTest.java
index 7c59ae8..71c22ec 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResponseStatusTypeTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ResponseStatusTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,19 +34,19 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
 /**
  * Tests custom response status reason phrase with jersey containers and connectors.
  *
  * @author Miroslav Fuksa
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({ResponseStatusTypeTest.InMemoryTest.class,
+@Suite
+@SelectClasses({ResponseStatusTypeTest.InMemoryTest.class,
         ResponseStatusTypeTest.GrizzlyContainerGrizzlyConnectorTest.class,
         ResponseStatusTypeTest.GrizzlyContainerApacheConnectorTest.class,
         ResponseStatusTypeTest.SimpleContainerHttpUrlConnectorTest.class})
@@ -80,8 +80,8 @@
         public void testCustomBadRequest() {
             // with InMemory container and connector status info should be transferred as it is produced.
             final Response response = target().path("resource/custom-bad-request").request().get();
-            Assert.assertEquals(400, response.getStatus());
-            Assert.assertNull(response.getStatusInfo().getReasonPhrase());
+            Assertions.assertEquals(400, response.getStatus());
+            Assertions.assertNull(response.getStatusInfo().getReasonPhrase());
 
         }
 
@@ -191,7 +191,7 @@
         }
 
         @Test
-        @Ignore("Jdk http container does not support custom response reason phrases.")
+        @Disabled("Jdk http container does not support custom response reason phrases.")
         public void testCustom() {
             _testCustom(target());
         }
@@ -266,19 +266,19 @@
 
     public static void _testCustom(WebTarget target) {
         final Response response = target.path("resource/custom").request().get();
-        Assert.assertEquals(428, response.getStatus());
-        Assert.assertEquals(REASON_PHRASE, response.getStatusInfo().getReasonPhrase());
+        Assertions.assertEquals(428, response.getStatus());
+        Assertions.assertEquals(REASON_PHRASE, response.getStatusInfo().getReasonPhrase());
     }
 
     public static void _testBadRequest(WebTarget target) {
         final Response response = target.path("resource/bad-request").request().get();
-        Assert.assertEquals(400, response.getStatus());
-        Assert.assertEquals(Response.Status.BAD_REQUEST.getReasonPhrase(), response.getStatusInfo().getReasonPhrase());
+        Assertions.assertEquals(400, response.getStatus());
+        Assertions.assertEquals(Response.Status.BAD_REQUEST.getReasonPhrase(), response.getStatusInfo().getReasonPhrase());
     }
 
     public static void _testCustomBadRequest(WebTarget target) {
         final Response response = target.path("resource/custom-bad-request").request().get();
-        Assert.assertEquals(400, response.getStatus());
-        Assert.assertEquals(Response.Status.BAD_REQUEST.getReasonPhrase(), response.getStatusInfo().getReasonPhrase());
+        Assertions.assertEquals(400, response.getStatus());
+        Assertions.assertEquals(Response.Status.BAD_REQUEST.getReasonPhrase(), response.getStatusInfo().getReasonPhrase());
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/RuntimeConfigTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/RuntimeConfigTest.java
index 91e0d1b..cba7c9b 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/RuntimeConfigTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/RuntimeConfigTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,13 +37,13 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-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.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ScheduledThreadPoolExecutorProviderTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ScheduledThreadPoolExecutorProviderTest.java
index 4a1a130..098f971 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ScheduledThreadPoolExecutorProviderTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ScheduledThreadPoolExecutorProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,10 +27,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.spi.ScheduledThreadPoolExecutorProvider;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 public class ScheduledThreadPoolExecutorProviderTest {
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SecurityContextFilterTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SecurityContextFilterTest.java
index afc7d2d..e5a253f 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SecurityContextFilterTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SecurityContextFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,9 +30,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * End to end test class for testing security context in the Filter and
@@ -63,11 +63,11 @@
 
         @Override
         public void filter(ContainerRequestContext context) {
-            Assert.assertNotNull(context.getSecurityContext());
+            Assertions.assertNotNull(context.getSecurityContext());
 
             // test injections
             // TODO: won't work until SecurityContext is proxiable
-//            Assert.assertEquals(context.getSecurityContext(), securityContext);
+//            Assertions.assertEquals(context.getSecurityContext(), securityContext);
 
             String header = context.getHeaders().getFirst(SKIP_FILTER);
             if ("true".equals(header)) {
@@ -129,7 +129,7 @@
         Response response = target().path("test").request().header(SKIP_FILTER, "true").get();
         assertEquals(200, response.getStatus());
         String entity = response.readEntity(String.class);
-        Assert.assertTrue(!entity.equals(PRINCIPAL_NAME));
+        Assertions.assertTrue(!entity.equals(PRINCIPAL_NAME));
     }
 
     /**
@@ -148,7 +148,7 @@
         // TODO: inject SecurityContext directly once JERSEY-1282 is fixed
         @GET
         public String getPrincipal(@Context ContainerRequestContext crc) {
-            Assert.assertNotNull(crc.getSecurityContext());
+            Assertions.assertNotNull(crc.getSecurityContext());
             Principal userPrincipal = crc.getSecurityContext().getUserPrincipal();
             return userPrincipal == null ? PRINCIPAL_IS_NULL : userPrincipal.getName();
         }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ServerDestroyTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ServerDestroyTest.java
index 511ac31..5df8cee 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ServerDestroyTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/ServerDestroyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -49,11 +49,11 @@
 import org.glassfish.jersey.test.DeploymentContext;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Assert that pre destroy method on application, resources and providers is invoked.
@@ -68,7 +68,7 @@
     private Reloader reloader;
 
     @Override
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         destroyed.clear();
         destroyed.put("application", false);
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonProviderTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonProviderTest.java
index 16ee4a1..d75491e 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonProviderTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,10 +44,10 @@
 import org.glassfish.jersey.spi.ContextResolvers;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Class testing that providers are managed correctly in the singleton scope.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonProvidersResourcesTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonProvidersResourcesTest.java
index 19a6f8d..97a1710 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonProvidersResourcesTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonProvidersResourcesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,10 +33,10 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test resources which also acts as providers.
@@ -60,9 +60,9 @@
     @Test
     public void testResourceAsFilter() {
         String str = target().path("singleton").request().header("singleton", "singleton").get(String.class);
-        assertTrue(str, str.startsWith("true/"));
+        assertTrue(str.startsWith("true/"), str);
         String str2 = target().path("singleton").request().header("singleton", "singleton").get(String.class);
-        assertTrue(str2, str2.startsWith("true/"));
+        assertTrue(str2.startsWith("true/"), str2);
         assertEquals(str, str2);
     }
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonResourceTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonResourceTest.java
index 1073e09..e090462 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonResourceTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SingletonResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Class testing Resources managed as singletons.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/StreamMethodCallTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/StreamMethodCallTest.java
index 7443489..da0fff6 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/StreamMethodCallTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/StreamMethodCallTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,8 +31,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests that appropriate methods are called in the intercepted output stream.
@@ -99,9 +99,9 @@
     @Test
     public void testCalledMethods() {
         final Response response = target().path("resource").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertTrue("close() has not been called.", TestOutputStream.closeCalled);
-        Assert.assertTrue("flush() has not been called before close().", TestOutputStream.flushCalledBeforeClose);
-        Assert.assertTrue("write() has not been called.", TestOutputStream.writeCalled);
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertTrue(TestOutputStream.closeCalled, "close() has not been called.");
+        Assertions.assertTrue(TestOutputStream.flushCalledBeforeClose, "flush() has not been called before close().");
+        Assertions.assertTrue(TestOutputStream.writeCalled, "write() has not been called.");
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SubResourceTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SubResourceTest.java
index f9ece42..c1f0ff3 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SubResourceTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SubResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,9 +32,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Sub-resource access/processing E2E tests.
@@ -114,33 +114,33 @@
     @Test
     public void subResourceTest() throws Exception {
         Response response = target("root/sub/sub2").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(SubResource.MESSAGE, response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(SubResource.MESSAGE, response.readEntity(String.class));
 
         response = target("root/sub/sub2").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(SubResource.MESSAGE, response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(SubResource.MESSAGE, response.readEntity(String.class));
     }
 
     @Test
     public void subResourceWithoutPathTest() throws Exception {
         Response response = target("root/sub").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(SubResource.MESSAGE, response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(SubResource.MESSAGE, response.readEntity(String.class));
     }
 
     @Test
     public void testGet() throws Exception {
         Response response = target("root/sub/some/path").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals(Resource.GET, response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(Resource.GET, response.readEntity(String.class));
     }
 
     @Test
     public void testPost() throws Exception {
         Response response = target("root/sub/sub2").request().post(Entity.entity("post", MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("post", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("post", response.readEntity(String.class));
     }
 
     // this resource class will report warning during validation, but should be loaded
@@ -189,41 +189,41 @@
     @Test
     public void testGetIsCalled() throws Exception {
         Response response = target("locator-and-method").request().get();
-        Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
-        Assert.assertEquals("get", response.readEntity(String.class));
+        Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+        Assertions.assertEquals("get", response.readEntity(String.class));
     }
 
     @Test
     public void testGetIsCalledInSub() throws Exception {
         Response response = target("locator-and-method/sub").request().get();
-        Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
-        Assert.assertEquals("get", response.readEntity(String.class));
+        Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+        Assertions.assertEquals("get", response.readEntity(String.class));
     }
 
     @Test
     public void testGetIsCalledInInner() throws Exception {
         Response response = target("locator-and-method/inner").request().get();
-        Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
-        Assert.assertEquals("inner", response.readEntity(String.class));
+        Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+        Assertions.assertEquals("inner", response.readEntity(String.class));
     }
 
     @Test
     public void testGetIsCalledInSubInner() throws Exception {
         Response response = target("locator-and-method/sub/inner").request().get();
-        Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
-        Assert.assertEquals("inner", response.readEntity(String.class));
+        Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+        Assertions.assertEquals("inner", response.readEntity(String.class));
     }
 
     @Test
     public void testPostShouldNeverBeCalled() throws Exception {
         Response response = target("locator-and-method").request().post(Entity.entity("post", MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(Response.Status.METHOD_NOT_ALLOWED.getStatusCode(), response.getStatus());
+        Assertions.assertEquals(Response.Status.METHOD_NOT_ALLOWED.getStatusCode(), response.getStatus());
     }
 
     @Test
     public void testPostShouldNeverBeCalledInSub() throws Exception {
         Response response = target("locator-and-method/sub").request().post(Entity.entity("post", MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(Response.Status.METHOD_NOT_ALLOWED.getStatusCode(), response.getStatus());
+        Assertions.assertEquals(Response.Status.METHOD_NOT_ALLOWED.getStatusCode(), response.getStatus());
     }
 
     @Path("empty-root")
@@ -234,7 +234,7 @@
     @Test
     public void testCallEmptyResource() throws Exception {
         Response response = target("empty-root").request().get();
-        Assert.assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
+        Assertions.assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
     }
 
     public static class EmptySubResourceClass {
@@ -244,6 +244,6 @@
     @Test
     public void testCallEmptySubResource() throws Exception {
         Response response = target("empty-locator").request().get();
-        Assert.assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
+        Assertions.assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SubjectSecurityContextTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SubjectSecurityContextTest.java
index b96f53a..3cc11f4 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SubjectSecurityContextTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/SubjectSecurityContextTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,7 +35,7 @@
 import org.glassfish.jersey.server.SubjectSecurityContext;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/UriBuilderTemplateTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/UriBuilderTemplateTest.java
index f30c82c..ba31c33 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/UriBuilderTemplateTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/UriBuilderTemplateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Testing URI template as an e2e test.
@@ -80,12 +81,14 @@
         }
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testResolveTemplate() {
-        Map<String, Object> map = new HashMap<String, Object>();
-        map.put("a", "xyz");
-        map.put(null, "path");
-        UriBuilder builder = UriBuilder.fromPath("").path("{a}/{b}");
-        builder.resolveTemplates(map);
+        assertThrows(IllegalArgumentException.class, () -> {
+            Map<String, Object> map = new HashMap<String, Object>();
+            map.put("a", "xyz");
+            map.put(null, "path");
+            UriBuilder builder = UriBuilder.fromPath("").path("{a}/{b}");
+            builder.resolveTemplates(map);
+        });
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/WebApplicationExceptionLoggingTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/WebApplicationExceptionLoggingTest.java
index 7f07197..9f8b5ca 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/WebApplicationExceptionLoggingTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/WebApplicationExceptionLoggingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,11 +36,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-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;
+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;
 
 /**
  * Tests that {@link WebApplicationException} is logged on the correct level.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/PostToPutDeleteTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/PostToPutDeleteTest.java
index 414159a..4fd86fa 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/PostToPutDeleteTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/PostToPutDeleteTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,8 +32,8 @@
 import org.glassfish.jersey.server.filter.HttpMethodOverrideFilter;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/RolesAllowedTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/RolesAllowedTest.java
index 4dda6f3..f55457f 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/RolesAllowedTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/RolesAllowedTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,10 +39,10 @@
 import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  *
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageMediaTypeNegativeTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageMediaTypeNegativeTest.java
index 4c191dd..dfcf48a 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageMediaTypeNegativeTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageMediaTypeNegativeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * No activation property ({@value org.glassfish.jersey.server.ServerProperties#LANGUAGE_MAPPINGS},
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageMediaTypeTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageMediaTypeTest.java
index 635b499..8e4f034 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageMediaTypeTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageMediaTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageTest.java
index 25b537b..e56bc7a 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegLanguageTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegMediaTypeTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegMediaTypeTest.java
index f842a32..18771f9 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegMediaTypeTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/filter/UriConnegMediaTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/ApplicationInfoTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/ApplicationInfoTest.java
index da6f409..96d31a5 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/ApplicationInfoTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/ApplicationInfoTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,9 +16,6 @@
 
 package org.glassfish.jersey.tests.e2e.server.monitoring;
 
-import java.util.Arrays;
-import java.util.List;
-
 import javax.ws.rs.ConstrainedTo;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -28,6 +25,11 @@
 import javax.ws.rs.core.FeatureContext;
 import javax.ws.rs.core.Response;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
 import javax.annotation.Priority;
 import javax.inject.Provider;
 
@@ -38,11 +40,11 @@
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.server.monitoring.ApplicationInfo;
 import org.glassfish.jersey.test.JerseyTest;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
 /**
  * The test uses server properties {@link ServerProperties#MONITORING_STATISTICS_MBEANS_ENABLED},
@@ -53,52 +55,101 @@
  *
  * @author Libor Kramolis
  */
-@RunWith(Parameterized.class)
-public class ApplicationInfoTest extends JerseyTest {
+public class ApplicationInfoTest {
 
     private static final String FORCE_ENABLE = "FORCE_ENABLE";
     private static final String ENABLE_MONITORING = "ENABLE_MONITORING";
     private static final String ENABLE_MONITORING_STATISTICS = "ENABLE_MONITORING_STATISTICS";
     private static final String ENABLE_MONITORING_STATISTICS_MBEANS = "ENABLE_MONITORING_STATISTICS_MBEANS";
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
+    static class TestData {
+        boolean forceEnable;
+        boolean enableMonitoring;
+        boolean enableMonitoringStatistics;
+        boolean enableMonitoringStatisticsMBeans;
+        Boolean monitoringEnabled;
+        Boolean monitoringStatisticsEnabled;
+        Boolean monitoringStatisticsMBeansEnabled;
+        int responseStatus;
+
+        public TestData(boolean forceEnable, boolean enableMonitoring,
+                boolean enableMonitoringStatistics, boolean enableMonitoringStatisticsMBeans,
+                Boolean monitoringEnabled, Boolean monitoringStatisticsEnabled,
+                Boolean monitoringStatisticsMBeansEnabled, int responseStatus) {
+            this.forceEnable = forceEnable;
+            this.enableMonitoring = enableMonitoring;
+            this.enableMonitoringStatistics = enableMonitoringStatistics;
+            this.enableMonitoringStatisticsMBeans = enableMonitoringStatisticsMBeans;
+            this.monitoringEnabled = monitoringEnabled;
+            this.monitoringStatisticsEnabled = monitoringStatisticsEnabled;
+            this.monitoringStatisticsMBeansEnabled = monitoringStatisticsMBeansEnabled;
+            this.responseStatus = responseStatus;
+        }
+
+        @Override
+        public String toString() {
+            return "TestData [forceEnable=" + forceEnable + ", enableMonitoring=" + enableMonitoring
+                    + ", enableMonitoringStatistics=" + enableMonitoringStatistics
+                    + ", enableMonitoringStatisticsMBeans=" + enableMonitoringStatisticsMBeans + ", monitoringEnabled="
+                    + monitoringEnabled + ", monitoringStatisticsEnabled=" + monitoringStatisticsEnabled
+                    + ", monitoringStatisticsMBeansEnabled=" + monitoringStatisticsMBeansEnabled + ", responseStatus="
+                    + responseStatus + "]";
+        }
+    }
+
+    public static List<TestData> testData() {
+        return Arrays.asList(new TestData[] {
                 //force, 3x AutoDiscoverable, 3x ResourceConfig,   response
                 // no property set => 500
-                {false, false, false, false, null, null, null, 500},
+                new TestData(false, false, false, false, null, null, null, 500),
                 // property set by ForcedAutoDiscoverable => 200
-                {false, true, false, false, null, null, null, 200},
-                {false, false, true, false, null, null, null, 200},
-                {false, false, false, true, null, null, null, 200},
+                new TestData(false, true, false, false, null, null, null, 200),
+                new TestData(false, false, true, false, null, null, null, 200),
+                new TestData(false, false, false, true, null, null, null, 200),
                 // property disable by ResourceConfig => 500
-                {false, true, false, false, false, false, false, 500},
-                {false, false, true, false, false, false, false, 500},
-                {false, false, false, true, false, false, false, 500},
+                new TestData(false, true, false, false, false, false, false, 500),
+                new TestData(false, false, true, false, false, false, false, 500),
+                new TestData(false, false, false, true, false, false, false, 500),
                 // property disable by ResourceConfig but forced by ForcedAutoDiscoverable => 200
-                {true, true, false, false, false, false, false, 200},
-                {true, false, true, false, false, false, false, 200},
-                {true, false, false, true, false, false, false, 200}
+                new TestData(true, true, false, false, false, false, false, 200),
+                new TestData(true, false, true, false, false, false, false, 200),
+                new TestData(true, false, false, true, false, false, false, 200)
         });
     }
 
-    private int responseStatus;
+    @TestFactory
+    public Collection<DynamicContainer> generatedTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        for (TestData testCase : testData()) {
+            ApplicationInfoTemplateTest test = new ApplicationInfoTemplateTest(testCase) {};
+            tests.add(TestHelper.toTestContainer(test, "applicationInfoTest for case " + testCase.toString()));
+        }
+        return tests;
+    }
+    public abstract static class ApplicationInfoTemplateTest extends JerseyTest {
+        private int responseStatus;
 
-    public ApplicationInfoTest(boolean forceEnable, boolean enableMonitoring,
-                               boolean enableMonitoringStatistics, boolean enableMonitoringStatisticsMBeans,
-                               Boolean monitoringEnabled, Boolean monitoringStatisticsEnabled,
-                               Boolean monitoringStatisticsMBeansEnabled, int responseStatus) {
-        super(createApplication(forceEnable, enableMonitoring,
-                enableMonitoringStatistics, enableMonitoringStatisticsMBeans,
-                monitoringEnabled, monitoringStatisticsEnabled,
-                monitoringStatisticsMBeansEnabled));
-        this.responseStatus = responseStatus;
+        public ApplicationInfoTemplateTest(TestData testCase) {
+            super(createApplication(testCase.forceEnable, testCase.enableMonitoring,
+                    testCase.enableMonitoringStatistics, testCase.enableMonitoringStatisticsMBeans,
+                    testCase.monitoringEnabled, testCase.monitoringStatisticsEnabled,
+                    testCase.monitoringStatisticsMBeansEnabled));
+            this.responseStatus = testCase.responseStatus;
+        }
+
+        @Test
+        public void test() {
+            final Response response = target().path("resource").request().get();
+            Assertions.assertEquals(responseStatus, response.getStatus());
+            if (responseStatus == 200) {
+                Assertions.assertEquals("testApp", response.readEntity(String.class));
+            }
+        }
     }
 
     private static Application createApplication(boolean forceEnable, boolean enableMonitoring,
-                                                 boolean enableMonitoringStatistics, boolean enableMonitoringStatisticsMBeans,
-                                                 Boolean monitoringEnabled, Boolean monitoringStatisticsEnabled,
-                                                 Boolean monitoringStatisticsMBeansEnabled) {
+            boolean enableMonitoringStatistics, boolean enableMonitoringStatisticsMBeans, Boolean monitoringEnabled,
+            Boolean monitoringStatisticsEnabled, Boolean monitoringStatisticsMBeansEnabled) {
         final ResourceConfig resourceConfig = new ResourceConfig(Resource.class);
         resourceConfig.property(ServerProperties.APPLICATION_NAME, "testApp");
         resourceConfig.property(FORCE_ENABLE, forceEnable);
@@ -118,21 +169,13 @@
             resourceConfig.property(ServerProperties.MONITORING_STATISTICS_ENABLED, monitoringStatisticsEnabled);
         }
         if (monitoringStatisticsMBeansEnabled != null) {
-            resourceConfig.property(ServerProperties.MONITORING_STATISTICS_MBEANS_ENABLED, monitoringStatisticsMBeansEnabled);
+            resourceConfig.property(ServerProperties.MONITORING_STATISTICS_MBEANS_ENABLED,
+                    monitoringStatisticsMBeansEnabled);
         }
 
         return resourceConfig;
     }
 
-    @Test
-    public void test() {
-        final Response response = target().path("resource").request().get();
-        Assert.assertEquals(responseStatus, response.getStatus());
-        if (responseStatus == 200) {
-            Assert.assertEquals("testApp", response.readEntity(String.class));
-        }
-    }
-
     @Path("resource")
     public static class Resource {
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/EventListenerTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/EventListenerTest.java
index 3bda9a9..d2065e3 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/EventListenerTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/EventListenerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -49,11 +49,11 @@
 import org.glassfish.jersey.server.monitoring.RequestEventListener;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * @author Miroslav Fuksa
@@ -161,7 +161,7 @@
                     }
                     break;
                 case FINISHED:
-                    Assert.assertNotNull(event.getContainerResponse());
+                    Assertions.assertNotNull(event.getContainerResponse());
                     this.appEventListener.finishedCalled.countDown();
                     break;
             }
@@ -383,7 +383,7 @@
         assertEquals("[" + i + "]", response.getHeaderString("R.RESP_FILTERS_FINISHED.order"));
         final boolean success = applicationEventListener.finishedCalled.await(3 * getAsyncTimeoutMultiplier(),
                 TimeUnit.SECONDS);
-        Assert.assertTrue(success);
+        Assertions.assertTrue(success);
     }
 
     @Test
@@ -402,6 +402,6 @@
 
         final boolean success = applicationEventListener.finishedCalled.await(3 * getAsyncTimeoutMultiplier(),
                 TimeUnit.SECONDS);
-        Assert.assertTrue(success);
+        Assertions.assertTrue(success);
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/MBeansTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/MBeansTest.java
index 85d0b97..00f930c 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/MBeansTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/MBeansTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,11 +43,11 @@
 import org.glassfish.jersey.server.spi.Container;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * @author Miroslav Fuksa
@@ -159,10 +159,10 @@
     }
 
     @Override
-    @After
+    @AfterEach
     public void tearDown() throws Exception {
         super.tearDown();
-        Assert.assertTrue(StatisticsListener.ON_SHUTDOWN_CALLED);
+        Assertions.assertTrue(StatisticsListener.ON_SHUTDOWN_CALLED);
 
     }
 
@@ -211,7 +211,7 @@
         final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
         final ObjectName name = new ObjectName("org.glassfish.jersey:type=myApplication,subType=Global,global=Configuration");
         final String str = (String) mBeanServer.getAttribute(name, "ApplicationName");
-        Assert.assertEquals("myApplication", str);
+        Assertions.assertEquals("myApplication", str);
 
         checkResourceMBean("/resource");
         checkResourceMBean("/resource/sub");
@@ -231,7 +231,7 @@
         try {
             mbean = mBeanServer.getObjectInstance(objectName);
         } catch (InstanceNotFoundException e) {
-            Assert.fail("Resource MBean name '" + name + "' not found.");
+            Assertions.fail("Resource MBean name '" + name + "' not found.");
         }
         assertNotNull(mbean);
     }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/MonitoringStatisticsLocatorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/MonitoringStatisticsLocatorTest.java
index 877dc57..d22e056 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/MonitoringStatisticsLocatorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/MonitoringStatisticsLocatorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,10 +38,10 @@
 import org.glassfish.jersey.server.wadl.processor.WadlModelProcessor;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * This test verifies that {@link ResourceMethodStatistics} are not duplicated in
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/ReloadApplicationEventTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/ReloadApplicationEventTest.java
index a7a3697..49b952c 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/ReloadApplicationEventTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/ReloadApplicationEventTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -48,13 +48,15 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * This test tests the lifecycle of the application in accordance to the monitoring
@@ -64,8 +66,8 @@
  *
  * @author Miroslav Fuksa
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({ReloadApplicationEventTest.GrizzlyTestCase.class, ReloadApplicationEventTest.JdkServerTestCase.class,
+@Suite
+@SelectClasses({ReloadApplicationEventTest.GrizzlyTestCase.class, ReloadApplicationEventTest.JdkServerTestCase.class,
         ReloadApplicationEventTest.SimpleHttpServerTestCase.class})
 public class ReloadApplicationEventTest extends JerseyTest {
 
@@ -109,6 +111,7 @@
 
     public static class ParentTest extends JerseyTest {
 
+        @BeforeEach
         @Override
         public void setUp() throws Exception {
             super.setUp();
@@ -343,7 +346,7 @@
             while ((!ReloadedResult.initEventCalled) && (cnt++ < 30)) {
                 Thread.sleep(200);
             }
-            assertTrue("Timeout: application was not reloaded in time.", ReloadedResult.initEventCalled);
+            assertTrue(ReloadedResult.initEventCalled, "Timeout: application was not reloaded in time.");
             // wait again some time until events are processed and mbeans are invoked
             Thread.sleep(700);
 
@@ -378,10 +381,10 @@
                 Thread.sleep(waitTime);
                 registered = mBeanServer.isRegistered(name);
             }
-            Assert.assertEquals(shouldBeRegistered, registered);
+            Assertions.assertEquals(shouldBeRegistered, registered);
             if (registered) {
                 final String str = (String) mBeanServer.getAttribute(name, "ApplicationName");
-                Assert.assertEquals(appName, str);
+                Assertions.assertEquals(appName, str);
             }
         }
     }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/StatisticsDestroyTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/StatisticsDestroyTest.java
index 1fa5d76..0979ebe 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/StatisticsDestroyTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/monitoring/StatisticsDestroyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,14 +16,16 @@
 
 package org.glassfish.jersey.tests.e2e.server.monitoring;
 
-import java.lang.management.ManagementFactory;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Application;
+import java.lang.management.ManagementFactory;
 
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Application;
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
@@ -39,21 +41,18 @@
 import org.glassfish.jersey.test.simple.SimpleTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
 /**
  *
  * @author Miroslav Fuksa
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({StatisticsDestroyTest.GrizzlyTestCase.class, StatisticsDestroyTest.JdkServerTestCase.class,
+@Suite
+@SelectClasses({StatisticsDestroyTest.GrizzlyTestCase.class, StatisticsDestroyTest.JdkServerTestCase.class,
         StatisticsDestroyTest.SimpleHttpServerTestCase.class})
 public class StatisticsDestroyTest {
 
@@ -71,7 +70,7 @@
         }
 
         @Override
-        @After
+        @AfterEach
         public void tearDown() throws Exception {
             super.tearDown();
             assertTrue(StatisticsListener.ON_SHUTDOWN_CALLED);
@@ -90,7 +89,7 @@
                 registered = mBeanServer.isRegistered(name);
             }
 
-            Assert.assertFalse("MBean should be already unregistered!", mBeanServer.isRegistered(name));
+            Assertions.assertFalse(mBeanServer.isRegistered(name), "MBean should be already unregistered!");
         }
 
         @Path("resource")
@@ -119,9 +118,9 @@
                 registered = mBeanServer.isRegistered(name);
             }
 
-            assertTrue("MBean should be already registered!", mBeanServer.isRegistered(name));
+            assertTrue(mBeanServer.isRegistered(name), "MBean should be already registered!");
             final String str = (String) mBeanServer.getAttribute(name, "ApplicationName");
-            Assert.assertEquals("myApplication", str);
+            Assertions.assertEquals("myApplication", str);
         }
     }
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/BeanValidationErrorTemplateTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/BeanValidationErrorTemplateTest.java
index 9558bb6..781c57d 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/BeanValidationErrorTemplateTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/BeanValidationErrorTemplateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,11 +34,11 @@
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
 import org.hibernate.validator.constraints.Length;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Michal Gajdos
@@ -47,7 +47,7 @@
 
     private Properties props;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         props = new Properties();
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/CustomViewableContextTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/CustomViewableContextTest.java
index afcb4d8..cc4c0b3 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/CustomViewableContextTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/CustomViewableContextTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,8 +32,8 @@
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.CustomViewableContext;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ErrorTemplateTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ErrorTemplateTest.java
index ef8475a..9dc41de 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ErrorTemplateTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ErrorTemplateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,8 +32,9 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * @author Michal Gajdos
@@ -93,9 +94,10 @@
         }
     }
 
-    @Test(expected = InternalServerErrorException.class)
+    @Test
     public void testErrorMethodTemplateSubResource() throws Exception {
-        target("subResourceTemplate").request().get(String.class);
+        assertThrows(InternalServerErrorException.class,
+                () -> target("subResourceTemplate").request().get(String.class));
     }
 
     @Test
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExceptionViewProcessorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExceptionViewProcessorTest.java
index 287b614..c3c1fb2 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExceptionViewProcessorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExceptionViewProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,9 +38,9 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
@@ -123,7 +123,7 @@
                 p.getProperty("path"));
         assertEquals("406", p.getProperty("model"));
 
-        Assert.assertEquals(MediaType.TEXT_PLAIN_TYPE, cr.getMediaType());
+        Assertions.assertEquals(MediaType.TEXT_PLAIN_TYPE, cr.getMediaType());
         cr.close();
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExplicitProduceTemplateTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExplicitProduceTemplateTest.java
index 95d970b..67e6b3c 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExplicitProduceTemplateTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExplicitProduceTemplateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,9 +33,9 @@
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.AbcViewProcessor;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.DefViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExplicitTemplateTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExplicitTemplateTest.java
index 0bbd8b5..46c79d4 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExplicitTemplateTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ExplicitTemplateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,8 +31,8 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/FlatInheritedViewProcessorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/FlatInheritedViewProcessorTest.java
index b3c0dce..05e4e10 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/FlatInheritedViewProcessorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/FlatInheritedViewProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/FlatViewProcessorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/FlatViewProcessorTest.java
index 72a1f39..5ba48ca 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/FlatViewProcessorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/FlatViewProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,8 +38,8 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitProducesViewProcessorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitProducesViewProcessorTest.java
index bd705f0..a90e8ee 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitProducesViewProcessorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitProducesViewProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitTemplateProgrammaticTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitTemplateProgrammaticTest.java
index 0de3486..91052f2 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitTemplateProgrammaticTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitTemplateProgrammaticTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitTemplateTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitTemplateTest.java
index 7fb0ba8..fb6b7f9 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitTemplateTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitTemplateTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitViewWithResourceFilterTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitViewWithResourceFilterTest.java
index 4d81576..0a49611 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitViewWithResourceFilterTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ImplicitViewWithResourceFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,9 +39,9 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/InheritedViewProcessorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/InheritedViewProcessorTest.java
index 88d847a..9f01f42 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/InheritedViewProcessorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/InheritedViewProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest.java
index 68ad121..b6b1b82 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,6 +16,7 @@
 
 package org.glassfish.jersey.tests.e2e.server.mvc;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
@@ -37,23 +38,21 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
 /**
  * MVC encoding charset tests.
  *
  * @author Miroslav Fuksa
  */
-@RunWith(Parameterized.class)
-public class MvcEncodingTest extends JerseyTest {
+public class MvcEncodingTest {
 
     public static final String MESSAGE = "\\u0161\\u010d\\u0159\\u017e\\u00fd\\u00e1\\u00ed\\u00e9";
 
-    @Parameterized.Parameters
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][]{
                 {new FreemarkerMvcFeature(), "freemarker", "FreemarkerResource.ftl", "UTF-8"},
@@ -67,85 +66,105 @@
         });
     }
 
-    private static String templateName;
-    private final String defaultEncoding;
-
-    public MvcEncodingTest(Feature feature, String propertySuffix, String templateName, String defaultEncoding) {
-        super(new ResourceConfig()
-                .register(feature)
-                .register(FreemarkerResource.class)
-                .property(MvcFeature.ENCODING + "." + propertySuffix, defaultEncoding));
-        MvcEncodingTest.templateName = templateName;
-        this.defaultEncoding = defaultEncoding;
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        data().forEach(arr -> {
+            MvcEncodingTemplateTest test = new MvcEncodingTemplateTest((Feature) arr[0], (String) arr[1],
+                    (String) arr[2], (String) arr[3]) {};
+            tests.add(TestHelper.toTestContainer(test, String.format("%s (%s, %s, %s, %s)",
+                    MvcEncodingTemplateTest.class.getSimpleName(),
+                    arr[0].getClass().getSimpleName(), arr[1], arr[2], arr[3])));
+        });
+        return tests;
     }
 
+    public abstract static class MvcEncodingTemplateTest extends JerseyTest {
+        private final String defaultEncoding;
 
-    @Path("resource")
-    public static class FreemarkerResource {
-        @GET
-        public Viewable get() {
-            final Map<String, String> map = new HashMap<String, String>();
-            map.put("user", MESSAGE);
+        public MvcEncodingTemplateTest(Feature feature, String propertySuffix, String templateName, String defaultEncoding) {
+            super(new ResourceConfig()
+                    .register(feature)
+                    .register(new FreemarkerResource(templateName))
+                    .property(MvcFeature.ENCODING + "." + propertySuffix, defaultEncoding));
 
-            return new Viewable("/org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest/" + templateName, map);
+            this.defaultEncoding = defaultEncoding;
         }
 
-        @GET
-        @Path("textplain")
-        @Produces("text/plain")
-        public Viewable getTextPlain() {
-            final Map<String, String> map = new HashMap<String, String>();
-            map.put("user", MESSAGE);
+        @Path("resource")
+        public static class FreemarkerResource {
 
-            return new Viewable("/org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest/" + templateName, map);
+            private String templateName;
+
+            public FreemarkerResource(String templateName) {
+                this.templateName = templateName;
+            }
+
+            @GET
+            public Viewable get() {
+                final Map<String, String> map = new HashMap<String, String>();
+                map.put("user", MESSAGE);
+
+                return new Viewable("/org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest/" + templateName, map);
+            }
+
+            @GET
+            @Path("textplain")
+            @Produces("text/plain")
+            public Viewable getTextPlain() {
+                final Map<String, String> map = new HashMap<String, String>();
+                map.put("user", MESSAGE);
+
+                return new Viewable("/org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest/" + templateName, map);
+            }
+
+            @GET
+            @Path("textplainUTF16")
+            @Produces("text/plain;charset=UTF-16")
+            public Viewable getTextPlainUTF16() {
+                final Map<String, String> map = new HashMap<String, String>();
+                map.put("user", MESSAGE);
+
+                return new Viewable("/org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest/" + templateName, map);
+            }
         }
 
-        @GET
-        @Path("textplainUTF16")
-        @Produces("text/plain;charset=UTF-16")
-        public Viewable getTextPlainUTF16() {
-            final Map<String, String> map = new HashMap<String, String>();
-            map.put("user", MESSAGE);
-
-            return new Viewable("/org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest/" + templateName, map);
+        @Override
+        protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
+            return new GrizzlyTestContainerFactory();
         }
-    }
 
-    @Override
-    protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
-        return new GrizzlyTestContainerFactory();
-    }
+        @Test
+        public void testDefaultEncoding() {
+            final Response response = target().path("resource").request().get();
+            Assertions.assertEquals(200, response.getStatus());
+            Assertions.assertEquals("Model:" + MESSAGE, response.readEntity(String.class));
+            Assertions.assertEquals("*/*;charset=" + defaultEncoding, response.getMediaType().toString());
+            Assertions.assertEquals(defaultEncoding, response.getMediaType().getParameters().get(MediaType.CHARSET_PARAMETER));
+        }
 
-    @Test
-    public void testDefaultEncoding() {
-        final Response response = target().path("resource").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("Model:" + MESSAGE, response.readEntity(String.class));
-        Assert.assertEquals("*/*;charset=" + defaultEncoding, response.getMediaType().toString());
-        Assert.assertEquals(defaultEncoding, response.getMediaType().getParameters().get(MediaType.CHARSET_PARAMETER));
-    }
+        @Test
+        public void testTextPlainDefaultEncoding() {
+            final Response response = target().path("resource/textplain").request("*/*,text/plain,text/html").get();
+            Assertions.assertEquals(200, response.getStatus());
+            Assertions.assertEquals("Model:" + MESSAGE, response.readEntity(String.class));
+            Assertions.assertEquals("text/plain;charset=" + defaultEncoding, response.getMediaType().toString());
+            Assertions.assertEquals(defaultEncoding, response.getMediaType().getParameters().get(MediaType.CHARSET_PARAMETER));
+        }
 
-    @Test
-    public void testTextPlainDefaultEncoding() {
-        final Response response = target().path("resource/textplain").request("*/*,text/plain,text/html").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("Model:" + MESSAGE, response.readEntity(String.class));
-        Assert.assertEquals("text/plain;charset=" + defaultEncoding, response.getMediaType().toString());
-        Assert.assertEquals(defaultEncoding, response.getMediaType().getParameters().get(MediaType.CHARSET_PARAMETER));
-    }
+        @Test
+        public void testTextPlain406() {
+            final Response response = target().path("resource/textplain").request("text/html").get();
+            Assertions.assertEquals(406, response.getStatus());
+        }
 
-    @Test
-    public void testTextPlain406() {
-        final Response response = target().path("resource/textplain").request("text/html").get();
-        Assert.assertEquals(406, response.getStatus());
-    }
-
-    @Test
-    public void testTextPlainUTF16() {
-        final Response response = target().path("resource/textplainUTF16").request("*/*,text/plain,text/html").get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("Model:" + MESSAGE, response.readEntity(String.class));
-        Assert.assertEquals("text/plain;charset=UTF-16", response.getMediaType().toString());
-        Assert.assertEquals("UTF-16", response.getMediaType().getParameters().get(MediaType.CHARSET_PARAMETER));
+        @Test
+        public void testTextPlainUTF16() {
+            final Response response = target().path("resource/textplainUTF16").request("*/*,text/plain,text/html").get();
+            Assertions.assertEquals(200, response.getStatus());
+            Assertions.assertEquals("Model:" + MESSAGE, response.readEntity(String.class));
+            Assertions.assertEquals("text/plain;charset=UTF-16", response.getMediaType().toString());
+            Assertions.assertEquals("UTF-16", response.getMediaType().getParameters().get(MediaType.CHARSET_PARAMETER));
+        }
     }
 }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/TemplateMethodSelectionTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/TemplateMethodSelectionTest.java
index 39d3f77..da8dae4 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/TemplateMethodSelectionTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/TemplateMethodSelectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,12 +38,12 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.anyOf;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests that {@link Template} annotated methods are selected by the routing algorithms as if they
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ViewProcessorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ViewProcessorTest.java
index 15be3f6..d82c18b 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ViewProcessorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/ViewProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,8 +40,8 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.e2e.server.mvc.provider.TestViewProcessor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/spi/AbstractTemplateProcessorTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/spi/AbstractTemplateProcessorTest.java
index 719e1a5..589eac0 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/spi/AbstractTemplateProcessorTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/mvc/spi/AbstractTemplateProcessorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,10 +16,15 @@
 
 package org.glassfish.jersey.tests.e2e.server.mvc.spi;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.Reader;
 
+import javax.inject.Inject;
+import javax.servlet.ServletContext;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.core.Configuration;
@@ -27,9 +32,6 @@
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
 
-import javax.inject.Inject;
-import javax.servlet.ServletContext;
-
 import org.glassfish.jersey.internal.inject.InjectionManager;
 import org.glassfish.jersey.internal.util.collection.Value;
 import org.glassfish.jersey.internal.util.collection.Values;
@@ -40,18 +42,15 @@
 import org.glassfish.jersey.server.mvc.spi.AbstractTemplateProcessor;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.spi.TestContainerException;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
+@Suite
+@SelectClasses({
         AbstractTemplateProcessorTest.FactoryInstanceTest.class,
         AbstractTemplateProcessorTest.FactoryInstanceNegativeTest.class,
         AbstractTemplateProcessorTest.FactoryClassTest.class,
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/InheritanceTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/InheritanceTest.java
index 5472975..43fb6fd 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/InheritanceTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/InheritanceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,9 +33,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/RegularExpressionsTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/RegularExpressionsTest.java
index e5f31dc..4df1dd3 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/RegularExpressionsTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/RegularExpressionsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,7 +18,7 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/ResponseMediaTypeFromProvidersTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/ResponseMediaTypeFromProvidersTest.java
index 09ed78d..c47a0b5 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/ResponseMediaTypeFromProvidersTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/routing/ResponseMediaTypeFromProvidersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -43,9 +43,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/scanning/RankedProviderScanningTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/scanning/RankedProviderScanningTest.java
index 9b5defa..c80bbf4 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/scanning/RankedProviderScanningTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/scanning/RankedProviderScanningTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/scanning/Resource.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/scanning/Resource.java
index 916ec20..2ecbed2 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/scanning/Resource.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/scanning/Resource.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 import org.glassfish.jersey.tests.e2e.server.scanning.ext.Ext3WriterInterceptor;
 import org.glassfish.jersey.tests.e2e.server.scanning.ext.Ext4WriterInterceptor;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
 * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/BasicValidationTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/BasicValidationTest.java
index 954d472..a948319 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/BasicValidationTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/BasicValidationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -53,10 +53,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/ContactBean.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/ContactBean.java
index bad13ae..d302a5e 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/ContactBean.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/ContactBean.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,12 +18,11 @@
 
 import java.io.Serializable;
 
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;
 
-import org.hibernate.validator.constraints.Email;
-import org.hibernate.validator.constraints.NotBlank;
-
 /**
  * @author Michal Gajdos
  */
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/CustomConfigValidationTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/CustomConfigValidationTest.java
index de5aefb..80b5a3d 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/CustomConfigValidationTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/CustomConfigValidationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -54,10 +54,10 @@
 
 import org.eclipse.persistence.jaxb.BeanValidationMode;
 import org.eclipse.persistence.jaxb.MarshallerProperties;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/EntityInheritanceValidationTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/EntityInheritanceValidationTest.java
index e505374..f535dc6 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/EntityInheritanceValidationTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/EntityInheritanceValidationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,6 +25,7 @@
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 import org.glassfish.jersey.client.ClientConfig;
@@ -32,8 +33,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.hibernate.validator.constraints.NotBlank;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/FieldPropertyValidationTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/FieldPropertyValidationTest.java
index 6750769..5acd401 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/FieldPropertyValidationTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/FieldPropertyValidationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,9 +22,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/InheritanceValidationTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/InheritanceValidationTest.java
index a8fa2c8..1dd8c4a 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/InheritanceValidationTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/InheritanceValidationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/ProgrammaticValidationTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/ProgrammaticValidationTest.java
index 3b30812..36dcd53 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/ProgrammaticValidationTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/ProgrammaticValidationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,8 +31,8 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Bean Validation tests for programmatically created resources.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/PropertyValidationTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/PropertyValidationTest.java
index 92ce1a6..ef035ec 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/PropertyValidationTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/PropertyValidationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.server.validation.ValidationFeature;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test various combinations of enabling/disabling: auto-discovery, bean validation, validation feature.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/AnotherContactBean.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/AnotherContactBean.java
index 451b791..d76ee5f 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/AnotherContactBean.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/AnotherContactBean.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,6 +18,8 @@
 
 import java.io.Serializable;
 
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;
 import javax.validation.executable.ExecutableType;
@@ -26,9 +28,6 @@
 
 import org.glassfish.jersey.tests.e2e.server.validation.Extended;
 
-import org.hibernate.validator.constraints.Email;
-import org.hibernate.validator.constraints.NotBlank;
-
 /**
  * @author Michal Gajdos
  */
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionAbstractTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionAbstractTest.java
index 8ffb658..c01ded8 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionAbstractTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionAbstractTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,10 +20,12 @@
 import javax.ws.rs.core.Response;
 
 import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.util.runner.RunSeparately;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
@@ -156,7 +158,6 @@
     }
 
     @Test
-    @RunSeparately
     public void testOnTypeValidateResultFailValidateExecutableMatch() throws Exception {
         _testOnType("match", -15, 500);
     }
@@ -167,7 +168,6 @@
     }
 
     @Test
-    @RunSeparately
     public void testOnTypeValidateResultPassBiggerValidateExecutableMiss() throws Exception {
         _testOnType("miss", -15, 200);
     }
@@ -178,7 +178,6 @@
     }
 
     @Test
-    @RunSeparately
     public void testOnTypeValidateResultPassBiggerValidateExecutableNone() throws Exception {
         _testOnType("none", -15, 200);
     }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionBasicTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionBasicTest.java
index da00461..cded242 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionBasicTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionBasicTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,16 +35,17 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.test.TestProperties;
-import org.glassfish.jersey.test.util.runner.RunSeparately;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-// @RunWith(ConcurrentRunner.class)
 public class ValidateOnExecutionBasicTest extends ValidateOnExecutionAbstractTest {
 
     /**
@@ -319,7 +320,6 @@
     }
 
     @Test
-    @RunSeparately
     public void testOnTypeValidateResultFailValidateExecutableDefault() throws Exception {
         _testOnType("default", -15, 500);
     }
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionInheritanceGenericsTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionInheritanceGenericsTest.java
index 662bfd4..093a0a8 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionInheritanceGenericsTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionInheritanceGenericsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,15 +27,12 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Michal Gajdos
  */
-// @RunWith(ConcurrentRunner.class)
 public class ValidateOnExecutionInheritanceGenericsTest extends ValidateOnExecutionAbstractTest {
 
     /**
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionInheritanceTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionInheritanceTest.java
index b606a66..af6e1e8 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionInheritanceTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionInheritanceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,12 +28,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Michal Gajdos
  */
-// @RunWith(ConcurrentRunner.class)
 public class ValidateOnExecutionInheritanceTest extends ValidateOnExecutionAbstractTest {
 
     /**
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionOverrideTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionOverrideTest.java
index 6c54c42..4a50e47 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionOverrideTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/validation/validateonexecution/ValidateOnExecutionOverrideTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,10 +33,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Testing whether an {@link javax.validation.ValidationException} is raised when {@link ValidateOnExecution} is present on
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/OverrideWadlResourceTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/OverrideWadlResourceTest.java
index 4b38262..392fcfb 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/OverrideWadlResourceTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/OverrideWadlResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/ResourceExtendedFlagTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/ResourceExtendedFlagTest.java
index 3da5917..37cc260 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/ResourceExtendedFlagTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/ResourceExtendedFlagTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -54,10 +54,10 @@
 import org.glassfish.jersey.server.model.ResourceModel;
 import org.glassfish.jersey.server.wadl.internal.WadlUtils;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test verifies functionality of {@link org.glassfish.jersey.server.model.Resource#isExtended()} and its
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlBeanParamTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlBeanParamTest.java
index 8486a72..e06cbdb 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlBeanParamTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlBeanParamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -50,15 +50,15 @@
 import org.glassfish.jersey.internal.util.SimpleNamespaceResolver;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-
-import org.custommonkey.xmlunit.Diff;
-import org.custommonkey.xmlunit.ElementNameAndTextQualifier;
-import org.custommonkey.xmlunit.SimpleNamespaceContext;
-import org.custommonkey.xmlunit.XMLAssert;
-import org.custommonkey.xmlunit.XMLUnit;
-import org.junit.Test;
+import org.xmlunit.builder.DiffBuilder;
+import org.xmlunit.diff.ComparisonResult;
+import org.xmlunit.diff.ComparisonType;
+import org.xmlunit.diff.DefaultNodeMatcher;
+import org.xmlunit.diff.Diff;
+import org.xmlunit.diff.ElementSelectors;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
 import com.google.common.collect.ImmutableMap;
@@ -77,35 +77,6 @@
  */
 public class WadlBeanParamTest extends JerseyTest {
 
-    private final ElementNameAndTextQualifier elementQualifier = new ElementNameAndTextQualifier() {
-
-        /**
-         * For {@code <param ??? />} nodes, the comparison is based on matching {@code name} attributes while ignoring
-         * their order. For any other nodes, strict comparison (including ordering) is made.
-         *
-         * @param control The reference element to compare the {@code test} with.
-         * @param test The test element to compare against {@code control}.
-         * @return Whether given nodes qualify for comparison.
-         */
-        @Override
-        public boolean qualifyForComparison(final Element control, final Element test) {
-            if (test != null && !"param".equals(test.getNodeName())) {
-                return super.qualifyForComparison(control, test);
-            }
-            if (!(control != null && test != null
-                          && equalsNamespace(control, test)
-                          && getNonNamespacedNodeName(control).equals(getNonNamespacedNodeName(test)))) {
-                return false;
-            }
-            if (control.hasAttribute("name") && test.hasAttribute("name")) {
-                if (control.getAttribute("name").equals(test.getAttribute("name"))) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    };
-
     @Override
     protected Application configure() {
         return new ResourceConfig(ReferenceResourceBeanParam.class, TestResourceBeanParam.class,
@@ -159,18 +130,28 @@
         final SimpleNamespaceResolver nsContext = new SimpleNamespaceResolver("wadl", "http://wadl.dev.java.net/2009/02");
         xp.setNamespaceContext(nsContext);
 
-        final Diff diff = XMLUnit.compareXML(
+        final Diff diff = DiffBuilder.compare(
                 nodeAsString(
                         xp.evaluate("//wadl:resource[@path='wadlBeanParamReference']/wadl:resource", d,
-                                XPathConstants.NODE)),
+                                XPathConstants.NODE)))
+            .withTest(
                 nodeAsString(
                         xp.evaluate("//wadl:resource[@path='" + resource + "']/wadl:resource", d,
                                 XPathConstants.NODE))
-        );
-        XMLUnit.setXpathNamespaceContext(
-                new SimpleNamespaceContext(ImmutableMap.of("wadl", "http://wadl.dev.java.net/2009/02")));
-        diff.overrideElementQualifier(elementQualifier);
-        XMLAssert.assertXMLEqual(diff, true);
+        ).withNamespaceContext(ImmutableMap.of("wadl", "http://wadl.dev.java.net/2009/02"))
+            /**
+             * For nodes, the comparison is based on matching {@code name} attributes while ignoring
+             * their order. For any other nodes, strict comparison (including ordering) is made.
+             * **/
+            .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndAttributes("name")))
+            .withDifferenceEvaluator(((comparison, outcome) -> {
+                if (outcome == ComparisonResult.DIFFERENT && comparison.getType() == ComparisonType.CHILD_NODELIST_SEQUENCE) {
+                   return ComparisonResult.EQUAL;
+                }
+                return outcome;
+            }))
+            .build();
+        Assertions.assertFalse(diff.hasDifferences());
     }
 
     @Path("wadlBeanParamReference")
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlEmptyMediaTypeTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlEmptyMediaTypeTest.java
index 0aa59ca..5ce3934 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlEmptyMediaTypeTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlEmptyMediaTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,11 +34,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests, that Jersey returns wildcard mediaType in case no response representation was specified.
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlResourceTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlResourceTest.java
index 042947b..b894768 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlResourceTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -90,27 +90,25 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.custommonkey.xmlunit.Diff;
-import org.custommonkey.xmlunit.ElementQualifier;
-import org.custommonkey.xmlunit.SimpleNamespaceContext;
-import org.custommonkey.xmlunit.XMLAssert;
-import org.custommonkey.xmlunit.XMLUnit;
-import org.custommonkey.xmlunit.examples.RecursiveElementNameAndTextQualifier;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.SAXException;
+import org.xmlunit.builder.DiffBuilder;
+import org.xmlunit.diff.Diff;
+
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import com.google.common.collect.ImmutableMap;
 
@@ -129,8 +127,8 @@
  * @author Libor Kramolis
  * @author Marek Potociar
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
+@Suite
+@SelectClasses({
         WadlResourceTest.Wadl1Test.class,
         WadlResourceTest.Wadl2Test.class,
         WadlResourceTest.Wadl3Test.class,
@@ -1057,7 +1055,7 @@
         }
 
         @Test
-        @Ignore("JERSEY-1670: WADL Options invoked on resources with same template returns only methods from one of them.")
+        @Disabled("JERSEY-1670: WADL Options invoked on resources with same template returns only methods from one of them.")
         // TODO: fix
         public void testWadlForAmbiguousResourceTemplates()
                 throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
@@ -1074,7 +1072,7 @@
         }
 
         @Test
-        @Ignore("JERSEY-1670: WADL Options invoked on resources with same template returns only methods from one of them.")
+        @Disabled("JERSEY-1670: WADL Options invoked on resources with same template returns only methods from one of them.")
         // TODO: fix
         public void testWadlForAmbiguousChildResourceTemplates()
                 throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
@@ -1270,19 +1268,16 @@
             final SimpleNamespaceResolver nsContext = new SimpleNamespaceResolver("wadl", "http://wadl.dev.java.net/2009/02");
             xp.setNamespaceContext(nsContext);
 
-            final Diff diff = XMLUnit.compareXML(
+            final Diff diff = DiffBuilder.compare(
                     nodeAsString(
                             xp.evaluate("//wadl:resource[@path='annotated']/wadl:resource", document,
-                                    XPathConstants.NODE)),
+                                    XPathConstants.NODE)))
+                .withTest(
                     nodeAsString(
                             xp.evaluate("//wadl:resource[@path='not-annotated']/wadl:resource", document,
                                     XPathConstants.NODE))
-            );
-            XMLUnit.setXpathNamespaceContext(
-                    new SimpleNamespaceContext(ImmutableMap.of("wadl", "http://wadl.dev.java.net/2009/02")));
-            final ElementQualifier elementQualifier = new RecursiveElementNameAndTextQualifier();
-            diff.overrideElementQualifier(elementQualifier);
-            XMLAssert.assertXMLEqual(diff, true);
+            ).withNamespaceContext(ImmutableMap.of("wadl", "http://wadl.dev.java.net/2009/02")).build();
+            Assertions.assertFalse(diff.hasDifferences());
 
         }
 
diff --git a/tests/e2e-testng/pom.xml b/tests/e2e-testng/pom.xml
index 18164b6..6ac62b0 100644
--- a/tests/e2e-testng/pom.xml
+++ b/tests/e2e-testng/pom.xml
@@ -51,7 +51,7 @@
                     <dependency>
                         <groupId>org.apache.maven.surefire</groupId>
                         <artifactId>surefire-testng</artifactId>
-                        <version>2.17</version>
+                        <version>${surefire.version}</version>
                     </dependency>
                 </dependencies>
             </plugin>
diff --git a/tests/e2e-testng/src/test/java/org/glassfish/jersey/tests/e2e/BeforeClassParallelTest.java b/tests/e2e-testng/src/test/java/org/glassfish/jersey/tests/e2e/BeforeClassParallelTest.java
index 8ba02b6..c5b5529 100644
--- a/tests/e2e-testng/src/test/java/org/glassfish/jersey/tests/e2e/BeforeClassParallelTest.java
+++ b/tests/e2e-testng/src/test/java/org/glassfish/jersey/tests/e2e/BeforeClassParallelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,6 +24,7 @@
 
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
+
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/e2e/pom.xml b/tests/e2e/pom.xml
index 5d22471..f4f8344 100644
--- a/tests/e2e/pom.xml
+++ b/tests/e2e/pom.xml
@@ -169,6 +169,12 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-suite</artifactId>
+            <version>${junit-platform-suite.version}</version>
+            <scope>test</scope>
+        </dependency>
 
         <dependency>
             <groupId>org.glassfish.jersey.test-framework</groupId>
@@ -181,12 +187,6 @@
             <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
-
-        <dependency>
-            <groupId>xmlunit</groupId>
-            <artifactId>xmlunit</artifactId>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 
     <profiles>
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AbortingFilterTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AbortingFilterTest.java
index 0cffe14..511a0f7 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AbortingFilterTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AbortingFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,8 +40,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * JERSEY-2345 Reproducer.
@@ -119,11 +120,13 @@
      * Try to abort response in a container request filter. With an invalid WWW-Authenticate header (according to HTTP specs)
      * and HttpUrlConnector, it throws an exception. This is an original scenario reported by jrh3k5 on java.net
      */
-    @Test(expected = ProcessingException.class)
+    @Test
     public void testAbortingFilter() {
-        final Response response = target().path("simple").request().get();
-        int status = response.getStatus();
-        logger.info("Response status is: " + status);
+        assertThrows(ProcessingException.class, () -> {
+            final Response response = target().path("simple").request().get();
+            int status = response.getStatus();
+            logger.info("Response status is: " + status);
+        });
     }
 
     /**
@@ -144,11 +147,13 @@
     /**
      * This test shows, that the behaviour is not caused by the use of the filters, but by the response content itself.
      */
-    @Test(expected = ProcessingException.class)
+    @Test
     public void testDirectResponse() {
-        final Response response = target().path("simple/direct").request().get();
-        int status = response.getStatus();
-        logger.info("Response status is: " + status);
+        assertThrows(ProcessingException.class, () -> {
+            final Response response = target().path("simple/direct").request().get();
+            int status = response.getStatus();
+            logger.info("Response status is: " + status);
+        });
     }
 
     /**
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AcceptMediaTypeProviderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AcceptMediaTypeProviderTest.java
index 13ae165..9bc42eb 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AcceptMediaTypeProviderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AcceptMediaTypeProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,10 +21,10 @@
 import javax.ws.rs.core.MediaType;
 import org.glassfish.jersey.message.internal.AcceptableMediaType;
 import org.glassfish.jersey.message.internal.HttpHeaderReader;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author unknown
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AnnotationInheritanceTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AnnotationInheritanceTest.java
index 9f46348..1111d79 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AnnotationInheritanceTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/AnnotationInheritanceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,14 +19,14 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test that JAX-RS annotations are correctly inherited according to the specification.
@@ -117,11 +117,11 @@
     @Test
     public void testSuperClassPrecedence() {
         final String superClassResponse = target().path("foo/superFooHello").request(MediaType.TEXT_PLAIN).get(String.class);
-        assertEquals("The path from the super-class annotation should be used instead of the path from interface",
-                "Hello!", superClassResponse);
+        assertEquals("Hello!", superClassResponse,
+                "The path from the super-class annotation should be used instead of the path from interface");
 
         final Response ifaceResponse = target().path("foo/fooableHello").request(MediaType.TEXT_PLAIN).get(Response.class);
-        assertEquals("The path defined in the interface annotation should not exist.", 404, ifaceResponse.getStatus());
+        assertEquals(404, ifaceResponse.getStatus(), "The path defined in the interface annotation should not exist.");
     }
 
     /**
@@ -130,8 +130,7 @@
     @Test
     public void testInterfaceAnnotationInheritance() {
         final String response = target().path("foo/fooableHi").request(MediaType.TEXT_PLAIN).get(String.class);
-        assertEquals("The path from the super-class annotation should inherited.",
-                "Hi!", response);
+        assertEquals("Hi!", response, "The path from the super-class annotation should inherited.");
     }
 
     /**
@@ -143,8 +142,7 @@
     @Test
     public void testInheritenceFromSuperclassInterface() {
         final String response = target().path("foo/superFooableWhatsUp").request(MediaType.TEXT_PLAIN).get(String.class);
-        assertEquals("The path from the interface of the superclass should inherited.",
-                "What's up?", response);
+        assertEquals("What's up?", response, "The path from the interface of the superclass should inherited.");
     }
 
     /**
@@ -157,11 +155,11 @@
     @Test
     public void testClassAnnotationInheritance() {
         final String superClassResponse = target().path("hyperBar/bar").request(MediaType.TEXT_PLAIN).get(String.class);
-        assertEquals("The path from the superclass annotation should be used instead of the path from interface",
-                "bar", superClassResponse);
+        assertEquals("bar", superClassResponse,
+                "The path from the superclass annotation should be used instead of the path from interface");
 
         final Response ifaceResponse = target().path("barable/bar").request(MediaType.TEXT_PLAIN).get(Response.class);
-        assertEquals("The path defined in the interface annotation should not exist.", 404, ifaceResponse.getStatus());
+        assertEquals(404, ifaceResponse.getStatus(), "The path defined in the interface annotation should not exist.");
     }
 
 
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ApplicationCachingTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ApplicationCachingTest.java
index 6286924..b71b182 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ApplicationCachingTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ApplicationCachingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,8 +18,8 @@
 
 import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -81,8 +81,8 @@
     @Test
     public void testOneTimeCalled() {
         try (Response r = target().request().get()) {
-            Assert.assertEquals(200, r.getStatus());
+            Assertions.assertEquals(200, r.getStatus());
         }
-        Assert.assertEquals(1, singletonCounter.get());
+        Assertions.assertEquals(1, singletonCounter.get());
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/CacheControlImplTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/CacheControlImplTest.java
index 678c965..801147b 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/CacheControlImplTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/CacheControlImplTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,8 +20,8 @@
 
 import org.glassfish.jersey.message.internal.CacheControlProvider;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Marc Hadley
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ClientInvocationTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ClientInvocationTest.java
index 200f0ec..aa0941d 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ClientInvocationTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ClientInvocationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,9 +32,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * {@link Invocation} E2E API tests.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ConstructorSelectionTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ConstructorSelectionTest.java
index 51bfaa2..851fb64 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ConstructorSelectionTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ConstructorSelectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,9 +42,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Test to verify the proper constructor is selected.
@@ -211,8 +211,8 @@
     public void testResourceConstructorSelection() {
         final Response response = target("resource-test").request().get();
 
-        assertNotNull("Returned response must not be null.", response);
-        assertEquals("Resource constructor with most arguments has not been selected.", 200, response.getStatus());
+        assertNotNull(response, "Returned response must not be null.");
+        assertEquals(200, response.getStatus(), "Resource constructor with most arguments has not been selected.");
     }
 
     /**
@@ -222,7 +222,7 @@
     public void testProviderConstructorSelection() {
         final Response response = target("provider-test").request().post(Entity.text("echo"));
 
-        assertNotNull("Returned response must not be null.", response);
+        assertNotNull(response, "Returned response must not be null.");
         assertEquals(200, response.getStatus());
         assertEquals("pass", response.readEntity(String.class));
     }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ConsumeProduceTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ConsumeProduceTest.java
index cc94667..590a6a1 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ConsumeProduceTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ConsumeProduceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,9 +22,9 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import org.glassfish.jersey.message.internal.MediaTypes;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ContentDispositionTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ContentDispositionTest.java
index 8cbdcc1..f54685f 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ContentDispositionTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ContentDispositionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,11 +23,11 @@
 import org.glassfish.jersey.message.internal.HttpDateFormat;
 import org.glassfish.jersey.message.internal.HttpHeaderReader;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 
 /**
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/CookieImplTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/CookieImplTest.java
index db4d91c..234d855 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/CookieImplTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/CookieImplTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,9 +23,9 @@
 
 import org.glassfish.jersey.message.internal.HttpHeaderReader;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Marc Hadley
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/EntityTagProviderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/EntityTagProviderTest.java
index dc6f80b..bd76e67 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/EntityTagProviderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/EntityTagProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,9 +20,9 @@
 
 import org.glassfish.jersey.message.internal.EntityTagProvider;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Marc Hadley
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ExceptionTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ExceptionTest.java
index fd53e85..11c493c 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ExceptionTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ExceptionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -56,10 +56,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Exception throwing and handling related tests; such as
@@ -703,9 +703,8 @@
 
     private void testSingle(String caseName, int expectedStatus, Invocation.Builder request) {
         final Response response = request.get();
-        assertEquals("Test of an exception thrown during field/parameter injection [" + caseName + "] failed.",
-                expectedStatus,
-                response.getStatus());
+        assertEquals(expectedStatus, response.getStatus(),
+                "Test of an exception thrown during field/parameter injection [" + caseName + "] failed.");
     }
     /**
      * END: JERSEY-1532 reproducer code.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/FormDataContentDispositionTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/FormDataContentDispositionTest.java
index 9d74547..c931809 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/FormDataContentDispositionTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/FormDataContentDispositionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,9 +23,9 @@
 import org.glassfish.jersey.message.internal.HttpDateFormat;
 import org.glassfish.jersey.message.internal.HttpHeaderReader;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Imran@SmartITEngineering.Com
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/HttpHeaderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/HttpHeaderTest.java
index b0ecbdc..4b6227a 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/HttpHeaderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/HttpHeaderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,9 +28,9 @@
 import org.glassfish.jersey.message.internal.LanguageTag;
 import org.glassfish.jersey.message.internal.ParameterizedHeader;
 import org.glassfish.jersey.message.internal.Token;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Paul Sandoz
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocaleProviderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocaleProviderTest.java
index 9bce717..6539e35 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocaleProviderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocaleProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,9 +19,9 @@
 import java.util.Locale;
 
 import org.glassfish.jersey.message.internal.LocaleProvider;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Mark Hadley
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderAsyncTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderAsyncTest.java
index e8f71e9..ac1d98b 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderAsyncTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderAsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -41,22 +41,23 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-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;
 
 /**
  * Test if the location relativer URI is correctly resolved within asynchronous processing cases.
  *
  * @author Adam Lindenthal
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class LocationHeaderAsyncTest extends JerseyTest {
 
     private static final Logger LOGGER = Logger.getLogger(LocationHeaderAsyncTest.class.getName());
@@ -77,6 +78,7 @@
      * In this case it prepares executor thread pool of size one and initializes the thread.
      * @throws Exception
      */
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         super.setUp();
@@ -212,6 +214,7 @@
      * Basic asynchronous testcase; checks if the URI is correctly absolutized also within a separate thread during
      * async processing
      */
+    @Execution(ExecutionMode.CONCURRENT)
     @Test
     public void testAsync() {
         final String expectedUri = getBaseUri() + "ResponseTest/locationAsync";
@@ -219,7 +222,7 @@
 
         final String msg = String.format("Comparison failed in the resource method. \nExpected: %1$s\nActual: %2$s",
                 expectedUri, response.readEntity(String.class));
-        assertNotEquals(msg, response.getStatus(), Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
+        assertNotEquals(response.getStatus(), Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), msg);
 
         final String location = response.getHeaderString(HttpHeaders.LOCATION);
         LOGGER.info("Location resolved from response > " + location);
@@ -229,23 +232,25 @@
     /**
      * Test with a thread from thread-pool (created out of request scope)
      */
+    @Execution(ExecutionMode.CONCURRENT)
     @Test
     public void testExecutorAsync() {
         final Response response = target().path("ResponseTest/executorAsync").request().get(Response.class);
         final String location = response.getHeaderString(HttpHeaders.LOCATION);
         LOGGER.info("Location resolved from response > " + location);
-        assertFalse("The comparison failed in the resource method.", executorComparisonFailed.get());
+        assertFalse(executorComparisonFailed.get(), "The comparison failed in the resource method.");
         assertEquals(getBaseUri() + "ResponseTest/executorAsync", location);
     }
 
     /**
      * Asynchronous testcase split over two distinct requests
      */
+    @Execution(ExecutionMode.CONCURRENT)
     @Test
     public void testSeparatedAsync() throws ExecutionException, InterruptedException {
         final Future<Response> futureResponse = target().path("ResponseTest/locationAsyncStart").request().async().get();
         final Boolean result = target().path("ResponseTest/locationAsyncFinish").request().get(Boolean.class);
-        assertFalse("Thread was interrupted on inserting into blocking queue.", interrupted.get());
+        assertFalse(interrupted.get(), "Thread was interrupted on inserting into blocking queue.");
         assertTrue(result);
 
         final Response response = futureResponse.get();
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderBasicTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderBasicTest.java
index 338baef..0e82a19 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderBasicTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderBasicTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,23 +37,24 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-import org.glassfish.jersey.test.util.runner.ConcurrentRunner;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-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;
 
 /**
  * Test if the location relative URI is correctly resolved within basic cases.
  *
  * @author Adam Lindenthal
  */
-@RunWith(ConcurrentRunner.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class LocationHeaderBasicTest extends JerseyTest {
 
     private static final Logger LOGGER = Logger.getLogger(LocationHeaderBasicTest.class.getName());
@@ -231,6 +232,7 @@
      * Basic test; resource methods returns relative uri, test expects uri to be absolute
      */
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testConvertRelativeUriToAbsolute() {
         checkResource("ResponseTest/location", "location");
         // checkResource("ResponseTest/location");
@@ -241,6 +243,7 @@
      * This test ensures, that the uri conversion works even in case when entity is present.
      */
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testAbsoluteUriWithEntity() {
         final Response response = checkResource("ResponseTest/locationWithBody", "locationWithBody");
         assertNotNull(response.getEntity());
@@ -252,23 +255,26 @@
      * Ensures, that the null location is processed correctly.
      */
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testNullLocation() {
         final Response response = target().path("ResponseTest/locationNull").request(MediaType.TEXT_PLAIN).get(Response.class);
         final String location = response.getHeaderString(HttpHeaders.LOCATION);
         LOGGER.info("Location resolved from response > " + location);
-        assertNull("Location header should be absolute URI", location);
+        assertNull(location, "Location header should be absolute URI");
     }
 
     /**
      * Tests if the URI is absolutized in the Response directly after Response.Builder.created() is called
      */
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testConversionDirectly() {
         final Boolean result = target().path("ResponseTest/locationDirect").request(MediaType.TEXT_PLAIN).get(Boolean.class);
         assertTrue(result);
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testSeeOther() {
         Response response = target().path("ResponseTest/seeOther").request()
                 .post(Entity.entity("TEXT", MediaType.TEXT_PLAIN_TYPE));
@@ -285,6 +291,7 @@
     }
 
     @Test
+    @Execution(ExecutionMode.CONCURRENT)
     public void testTemporaryRedirect() {
         Response response = target().path("ResponseTest/temporaryRedirect").request(MediaType.TEXT_PLAIN).get(Response.class);
         String location = response.getHeaderString(HttpHeaders.LOCATION);
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderFiltersTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderFiltersTest.java
index 8ee7f1f..dcd66c9 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderFiltersTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderFiltersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,7 +19,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -50,10 +51,10 @@
 import java.util.concurrent.Executors;
 import java.util.logging.Logger;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-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.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Test if the location response header relative URI is correctly resolved within complex cases with interceptors, filters,
@@ -85,6 +86,7 @@
      * In this case it prepares executor thread pool of size one and initializes the thread.
      * @throws Exception
      */
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         super.setUp();
@@ -147,8 +149,8 @@
         @GET
         @Path("locationAborted")
         public String locationTestAborted() {
-            assertTrue("The resource method locationTestAborted() should not have been called. The post-matching filter was "
-                    + "not configured correctly. ", false);
+            assertTrue(false, "The resource method locationTestAborted() should not have been called. "
+                    + "The post-matching filter was not configured correctly.");
             return "DUMMY_RESPONSE"; // this string should never reach the client (the resource method will not be called)
         }
 
@@ -161,8 +163,8 @@
         @GET
         @Path("locationAbortedPreMatching")
         public String locationTestPreMatchingAborted() {
-            assertTrue("The resource method locationTestPreMatchingAborted() should not have been called. The pre-matching "
-                    + "filter was not configured correctly. ", false);
+            assertTrue(false, "The resource method locationTestPreMatchingAborted() should not have been called. "
+                    + "The pre-matching filter was not configured correctly.");
             return "DUMMY_RESPONSE"; // this string should never reach the client (the resource method will not be called)
         }
 
@@ -587,8 +589,8 @@
 
     private void checkResponseFilter(final String resourcePath, final String expectedRelativeUri) {
         final Response response = target().path(resourcePath).request().get(Response.class);
-        assertNotEquals("Message from response filter: " + response.readEntity(String.class),
-                response.getStatus(), Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
+        assertNotEquals(response.getStatus(), Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(),
+                "Message from response filter: " + response.readEntity(String.class));
         assertEquals(getBaseUri() + expectedRelativeUri, response.getLocation().toString());
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderWithAbsolutizationDisabledTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderWithAbsolutizationDisabledTest.java
index 93ef150..7b25771 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderWithAbsolutizationDisabledTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderWithAbsolutizationDisabledTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,10 +30,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * Test if the location response header is left intact in case the
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderWithIncompatibleFlagTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderWithIncompatibleFlagTest.java
index 1e18d54..d442b2b 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderWithIncompatibleFlagTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/LocationHeaderWithIncompatibleFlagTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,10 +30,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 /**
  * Test if the location response header is resolved according to RFC7231 (in a JAX-RS 2.0 incompatible way) when
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MediaTypeProviderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MediaTypeProviderTest.java
index 782fe8e..17c8a9f 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MediaTypeProviderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MediaTypeProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,10 +22,10 @@
 
 import org.glassfish.jersey.message.internal.MediaTypeProvider;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Media type provider tests.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MessageBodyReaderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MessageBodyReaderTest.java
index d0bd7f6..191896d 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MessageBodyReaderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MessageBodyReaderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,8 +44,8 @@
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.ByteArrayEntity;
 import org.apache.http.impl.client.HttpClientBuilder;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Jan Supol (jan.supol at oracle.com)
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MessageBodyWriterTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MessageBodyWriterTest.java
index a3f75e5..ad14824 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MessageBodyWriterTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/MessageBodyWriterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,10 +44,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Various MessageBodyWriter tests.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/OptionsTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/OptionsTest.java
index 0cca39d..4614c8f 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/OptionsTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/OptionsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/QualitySourceMediaTypeProviderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/QualitySourceMediaTypeProviderTest.java
index 8371909..38466df 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/QualitySourceMediaTypeProviderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/QualitySourceMediaTypeProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,9 +23,9 @@
 import org.glassfish.jersey.message.internal.HttpHeaderReader;
 import org.glassfish.jersey.message.internal.QualitySourceMediaType;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author unknown
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResourceContextTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResourceContextTest.java
index 2ed4541..de51c03 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResourceContextTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResourceContextTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,10 +29,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test {@link ResourceContext}: resource context must provide access to
@@ -45,9 +45,9 @@
  */
 public class ResourceContextTest extends JerseyTest {
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
     @Override
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseE2ETest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseE2ETest.java
index d993c23..df79b4a 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseE2ETest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseE2ETest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,10 +42,10 @@
 import org.glassfish.jersey.server.Uri;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.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;
 
 /**
  * Response E2E tests.
@@ -273,9 +273,9 @@
     public void testCustomResponse() {
         final Response response = target("response").path("custom").request().get();
 
-        assertNotNull("Response is null.", response);
-        assertEquals("Unexpected response status.", 200, response.getStatus());
-        assertEquals("Unexpected response entity.", "subresponse", response.readEntity(String.class));
+        assertNotNull(response, "Response is null.");
+        assertEquals(200, response.getStatus(), "Unexpected response status.");
+        assertEquals("subresponse", response.readEntity(String.class), "Unexpected response entity.");
     }
 
     /**
@@ -287,14 +287,14 @@
         Response response;
 
         response = target.resolveTemplate("param", "with").request().get();
-        assertNotNull("Response is null.", response);
-        assertEquals("Unexpected response status.", 200, response.getStatus());
-        assertEquals("Unexpected response entity.", "1234567890", response.readEntity(String.class));
+        assertNotNull(response, "Response is null.");
+        assertEquals(200, response.getStatus(), "Unexpected response status.");
+        assertEquals("1234567890", response.readEntity(String.class), "Unexpected response entity.");
 
         response = target.resolveTemplate("param", "without").request().get();
-        assertNotNull("Response is null.", response);
-        assertEquals("Unexpected response status.", 204, response.getStatus());
-        assertFalse("Unexpected non-empty response entity.", response.hasEntity());
+        assertNotNull(response, "Response is null.");
+        assertEquals(204, response.getStatus(), "Unexpected response status.");
+        assertFalse(response.hasEntity(), "Unexpected non-empty response entity.");
     }
 
     /**
@@ -304,9 +304,9 @@
     public void testNullResponse() {
         final Response response = target("response").path("null").request().get();
 
-        assertNotNull("Response is null.", response);
-        assertEquals("Unexpected response status.", 204, response.getStatus());
-        assertFalse("Unexpected non-empty response entity.", response.hasEntity());
+        assertNotNull(response, "Response is null.");
+        assertEquals(204, response.getStatus(), "Unexpected response status.");
+        assertFalse(response.hasEntity(), "Unexpected non-empty response entity.");
     }
 
     /**
@@ -318,9 +318,9 @@
         Response response;
 
         response = target.request().get();
-        assertNotNull("Response is null.", response);
-        assertEquals("Unexpected response status.", 200, response.getStatus());
-        assertEquals("Unexpected response entity.", "internal", response.readEntity(String.class));
+        assertNotNull(response, "Response is null.");
+        assertEquals(200, response.getStatus(), "Unexpected response status.");
+        assertEquals("internal", response.readEntity(String.class), "Unexpected response entity.");
     }
 
     /**
@@ -334,9 +334,9 @@
         Response response;
 
         response = target.request().put(Entity.text("put-data"));
-        assertNotNull("Response is null.", response);
-        assertEquals("Unexpected response status.", Response.Status.NOT_MODIFIED.getStatusCode(), response.getStatus());
+        assertNotNull(response, "Response is null.");
+        assertEquals(Response.Status.NOT_MODIFIED.getStatusCode(), response.getStatus(), "Unexpected response status.");
         // response entity is dropped by server container in compliance with HTTP 1.1 spec
-        assertFalse("Unexpected response entity.", response.hasEntity());
+        assertFalse(response.hasEntity(), "Unexpected response entity.");
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseIntegrationTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseIntegrationTest.java
index 9703c96..43e91c2 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseIntegrationTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseIntegrationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseTest.java
index acac1b7..f1f42bc 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/ResponseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,11 +35,11 @@
 import org.glassfish.jersey.internal.util.PropertiesHelper;
 import org.glassfish.jersey.message.internal.HeaderUtils;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/RestrictedHeaderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/RestrictedHeaderTest.java
index 06568bd..99d8dce 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/RestrictedHeaderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/RestrictedHeaderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,9 +35,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test setting headers that are restricted by {@link java.net.HttpURLConnection}.
@@ -70,13 +70,13 @@
         return new ResourceConfig(MyResource.class, LoggingFeature.class);
     }
 
-    @Ignore("The setting of allowRestrictedHeaders system property is global and cached. Only "
+    @Disabled("The setting of allowRestrictedHeaders system property is global and cached. Only "
             + "one of both testForbiddenHeadersNotAllowed() and testForbiddenHeadersAllowed() can be run during one test.")
     @Test
     public void testForbiddenHeadersNotAllowed() {
         Client client = ClientBuilder.newClient();
         Response response = testHeaders(client);
-        Assert.assertEquals(500, response.getStatus());
+        Assertions.assertEquals(500, response.getStatus());
     }
 
     /**
@@ -92,7 +92,7 @@
 
         Response response = testHeaders(client);
         System.out.println(response.readEntity(String.class));
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
     }
 
     /**
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/SourceEntityProviderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/SourceEntityProviderTest.java
index 47b6173..896636a 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/SourceEntityProviderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/SourceEntityProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -48,12 +48,12 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test of {@link javax.xml.transform.Source Source} MessageBody Provider
@@ -143,8 +143,8 @@
         Response response = target().path("test").path("sax").request().get();
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
         String content = extractContent(response.readEntity(SAXSource.class));
-        assertTrue("Content '" + content + "' does not start with the expected prefix '" + prefix + "'",
-                content.startsWith(prefix) || content.startsWith(xdkPrefix));
+        assertTrue(content.startsWith(prefix) || content.startsWith(xdkPrefix),
+                "Content '" + content + "' does not start with the expected prefix '" + prefix + "'");
     }
 
     @Test
@@ -152,8 +152,8 @@
         Response response = target().path("test").path("dom").request().get();
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
         String content = extractContent(response.readEntity(DOMSource.class));
-        assertTrue("Content '" + content + "' does not start with the expected prefix '" + prefix + "'",
-                content.startsWith(prefix) || content.startsWith(xdkPrefix));
+        assertTrue(content.startsWith(prefix) || content.startsWith(xdkPrefix),
+                "Content '" + content + "' does not start with the expected prefix '" + prefix + "'");
     }
 
     private static SAXSource createSAXSource(String content) throws SAXException, ParserConfigurationException {
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/UnsafeCharsInUriTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/UnsafeCharsInUriTest.java
index 14bb299..468e3ec 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/UnsafeCharsInUriTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/UnsafeCharsInUriTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,9 +34,9 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertArrayEquals;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 
 /**
  * Test if URI can contain unsafe characters in the query parameter, e.g. for sending JSON
@@ -82,7 +82,7 @@
     }
 
     @Test
-    @Ignore("Incorrectly written test (doesn't deal with http encoding).")
+    @Disabled("Incorrectly written test (doesn't deal with http encoding).")
     public void testSecialCharsInQueryParam() throws IOException {
         // quotes are encoded by browsers, curly brackets are not, so the quotes will be sent pre-encoded
         // HTTP 1.0 is used for simplicity
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/VariantsTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/VariantsTest.java
index e283a01..a2f7231 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/VariantsTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/api/VariantsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,10 +33,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Server-side variant selection & handling test.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/ClientTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/ClientTest.java
index 9b13afe..0eb7b83 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/ClientTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/ClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -38,11 +38,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Marek Potociar
@@ -132,12 +132,12 @@
 
         reqHeaders = r.readEntity(String.class).toLowerCase();
         for (final String expected : new String[] {"custom-header:[custom-value]", "custom-header:custom-value"}) {
-            assertTrue(String.format("Request headers do not contain expected '%s' entry:\n%s", expected, reqHeaders),
-                    reqHeaders.contains(expected));
+            assertTrue(reqHeaders.contains(expected),
+                    String.format("Request headers do not contain expected '%s' entry:\n%s", expected, reqHeaders));
         }
         final String unexpected = "content-encoding";
-        assertFalse(String.format("Request headers contains unexpected '%s' entry:\n%s", unexpected, reqHeaders),
-                reqHeaders.contains(unexpected));
+        assertFalse(reqHeaders.contains(unexpected),
+                String.format("Request headers contains unexpected '%s' entry:\n%s", unexpected, reqHeaders));
 
         ib = target.request("*/*");
         i = ib.build("POST",
@@ -146,7 +146,7 @@
 
         final String expected = "content-encoding:[deflate]";
         reqHeaders = r.readEntity(String.class).toLowerCase();
-        assertTrue(String.format("Request headers do not contain expected '%s' entry:\n%s", expected, reqHeaders),
-                reqHeaders.contains(expected));
+        assertTrue(reqHeaders.contains(expected),
+                String.format("Request headers do not contain expected '%s' entry:\n%s", expected, reqHeaders));
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/ExecutorServiceProviderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/ExecutorServiceProviderTest.java
index 654bce4..246ccc5 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/ExecutorServiceProviderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/ExecutorServiceProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -55,9 +55,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.spi.ExecutorServiceProvider;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * {@link org.glassfish.jersey.spi.ExecutorServiceProvider} E2E tests.
@@ -277,10 +277,10 @@
         assertEquals("resource", response.readEntity(String.class));
 
         // no executors should be created or released at this point yet
-        assertEquals("Unexpected number of created client executors", 0, provider.executorCreationCount);
-        assertEquals("Unexpected number of released client executors", 0, provider.executorReleaseCount);
-        assertEquals("Unexpected number of client executors stored in the set.",
-                0, provider.executors.size());
+        assertEquals(0, provider.executorCreationCount, "Unexpected number of created client executors");
+        assertEquals(0, provider.executorReleaseCount, "Unexpected number of released client executors");
+        assertEquals(0, provider.executors.size(),
+                "Unexpected number of client executors stored in the set.");
 
         Future<Response> fr = client.target(getBaseUri()).path("resource").request().async().get();
         response = fr.get();
@@ -289,18 +289,16 @@
         assertEquals("resource", response.readEntity(String.class));
 
         // single executor should be created but not released at this point yet
-        assertEquals("Unexpected number of created client executors", 1, provider.executorCreationCount);
-        assertEquals("Unexpected number of released client executors", 0, provider.executorReleaseCount);
-        assertEquals("Unexpected number of client executors stored in the set.",
-                1, provider.executors.size());
+        assertEquals(1, provider.executorCreationCount, "Unexpected number of created client executors");
+        assertEquals(0, provider.executorReleaseCount, "Unexpected number of released client executors");
+        assertEquals(1, provider.executors.size(), "Unexpected number of client executors stored in the set.");
 
         client.close();
 
         // the created executor needs to be released by now; no more executors should be created
-        assertEquals("Unexpected number of created client executors", 1, provider.executorCreationCount);
-        assertEquals("Unexpected number of released client executors", 1, provider.executorReleaseCount);
-        assertEquals("Unexpected number of client executors stored in the set.",
-                0, provider.executors.size());
+        assertEquals(1, provider.executorCreationCount, "Unexpected number of created client executors");
+        assertEquals(1, provider.executorReleaseCount, "Unexpected number of released client executors");
+        assertEquals(0, provider.executors.size(), "Unexpected number of client executors stored in the set.");
     }
 
     /**
@@ -319,10 +317,9 @@
         assertEquals("resource", response.readEntity(String.class));
 
         // no executors should be created or released at this point yet
-        assertEquals("Unexpected number of created server executors", 0, serverExecutorProvider.executorCreationCount);
-        assertEquals("Unexpected number of released server executors", 0, serverExecutorProvider.executorReleaseCount);
-        assertEquals("Unexpected number of server executors stored in the set.",
-                0, serverExecutorProvider.executors.size());
+        assertEquals(0, serverExecutorProvider.executorCreationCount, "Unexpected number of created server executors");
+        assertEquals(0, serverExecutorProvider.executorReleaseCount, "Unexpected number of released server executors");
+        assertEquals(0, serverExecutorProvider.executors.size(), "Unexpected number of server executors stored in the set.");
 
         response = target("resource/async").request().get();
 
@@ -330,18 +327,16 @@
         assertEquals("async-resource-passed", response.readEntity(String.class));
 
         // single executor should be created but not released at this point yet
-        assertEquals("Unexpected number of created server executors", 1, serverExecutorProvider.executorCreationCount);
-        assertEquals("Unexpected number of released server executors", 0, serverExecutorProvider.executorReleaseCount);
-        assertEquals("Unexpected number of server executors stored in the set.",
-                1, serverExecutorProvider.executors.size());
+        assertEquals(1, serverExecutorProvider.executorCreationCount, "Unexpected number of created server executors");
+        assertEquals(0, serverExecutorProvider.executorReleaseCount, "Unexpected number of released server executors");
+        assertEquals(1, serverExecutorProvider.executors.size(), "Unexpected number of server executors stored in the set.");
 
         tearDown(); // stopping test container
 
         // the created executor needs to be released by now; no more executors should be created
-        assertEquals("Unexpected number of created server executors", 1, serverExecutorProvider.executorCreationCount);
-        assertEquals("Unexpected number of released server executors", 1, serverExecutorProvider.executorReleaseCount);
-        assertEquals("Unexpected number of server executors stored in the set.",
-                0, serverExecutorProvider.executors.size());
+        assertEquals(1, serverExecutorProvider.executorCreationCount, "Unexpected number of created server executors");
+        assertEquals(1, serverExecutorProvider.executorReleaseCount, "Unexpected number of released server executors");
+        assertEquals(0, serverExecutorProvider.executors.size(), "Unexpected number of server executors stored in the set.");
 
         setUp(); // re-starting test container to ensure proper post-test tearDown.
     }
@@ -361,18 +356,16 @@
         assertEquals("custom-async-resource-passed", response.readEntity(String.class));
 
         // single executor should be created but not released at this point yet
-        assertEquals("Unexpected number of created server executors", 1, serverExecutorProvider.executorCreationCount);
-        assertEquals("Unexpected number of released server executors", 0, serverExecutorProvider.executorReleaseCount);
-        assertEquals("Unexpected number of server executors stored in the set.",
-                1, serverExecutorProvider.executors.size());
+        assertEquals(1, serverExecutorProvider.executorCreationCount, "Unexpected number of created server executors");
+        assertEquals(0, serverExecutorProvider.executorReleaseCount, "Unexpected number of released server executors");
+        assertEquals(1, serverExecutorProvider.executors.size(), "Unexpected number of server executors stored in the set.");
 
         tearDown(); // stopping test container
 
         // the created executor needs to be released by now; no more executors should be created
-        assertEquals("Unexpected number of created server executors", 1, serverExecutorProvider.executorCreationCount);
-        assertEquals("Unexpected number of released server executors", 1, serverExecutorProvider.executorReleaseCount);
-        assertEquals("Unexpected number of server executors stored in the set.",
-                0, serverExecutorProvider.executors.size());
+        assertEquals(1, serverExecutorProvider.executorCreationCount, "Unexpected number of created server executors");
+        assertEquals(1, serverExecutorProvider.executorReleaseCount, "Unexpected number of released server executors");
+        assertEquals(0, serverExecutorProvider.executors.size(), "Unexpected number of server executors stored in the set.");
 
         setUp(); // re-starting test container to ensure proper post-test tearDown.
     }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/InterceptorCustomTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/InterceptorCustomTest.java
index b2aac95..ab799d9 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/InterceptorCustomTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/InterceptorCustomTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,10 +46,10 @@
 import org.glassfish.jersey.tests.e2e.InterceptorGzipTest.GZIPReaderTestInterceptor;
 import org.glassfish.jersey.tests.e2e.InterceptorGzipTest.GZIPWriterTestInterceptor;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Tests interceptors.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/InterceptorGzipTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/InterceptorGzipTest.java
index 96475ab..6b2d764 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/InterceptorGzipTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/InterceptorGzipTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -47,8 +47,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests gzip interceptors.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/LinkTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/LinkTest.java
index e7033ed..2ba39fb 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/LinkTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/LinkTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,10 +35,10 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.uri.UriTemplate;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Martin Matula
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/MessageBodyExceptionWrappingTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/MessageBodyExceptionWrappingTest.java
index c2446f4..431203b 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/MessageBodyExceptionWrappingTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/MessageBodyExceptionWrappingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,9 +40,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import static javax.ws.rs.client.Entity.entity;
 
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/HugeEntityTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/HugeEntityTest.java
index e157590..a366e32 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/HugeEntityTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/HugeEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,6 @@
 import java.io.OutputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
-import java.util.Arrays;
-import java.util.List;
 import java.util.concurrent.Future;
 
 import javax.ws.rs.POST;
@@ -43,10 +41,10 @@
 import org.glassfish.jersey.jdk.connector.JdkConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -55,8 +53,10 @@
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
-public class HugeEntityTest extends JerseyTest {
+@Suite
+@SelectClasses({HugeEntityTest.GrizzlyConnectorProviderHugeEntityTest.class,
+        HugeEntityTest.JdkConnectorProviderHugeEntityTest.class})
+public class HugeEntityTest {
 
     private static final int BUFFER_LENGTH = 1024 * 1024; // 1M
     private static final long HUGE_DATA_LENGTH = 20L * 1024L * 1024L * 1024L; // 20G seems sufficient
@@ -98,27 +98,72 @@
         }
     }
 
-    private final ConnectorProvider connectorProvider;
-
-    public HugeEntityTest(ConnectorProvider connectorProvider) {
-        this.connectorProvider = connectorProvider;
+    public static class GrizzlyConnectorProviderHugeEntityTest extends HugeEntityTemplateTest {
+        public GrizzlyConnectorProviderHugeEntityTest() {
+            super(new GrizzlyConnectorProvider());
+        }
     }
 
-    @Parameterized.Parameters
-    public static List<? extends ConnectorProvider> testData() {
-        return Arrays.asList(new GrizzlyConnectorProvider(), new JdkConnectorProvider());
+    public static class JdkConnectorProviderHugeEntityTest extends HugeEntityTemplateTest {
+        public JdkConnectorProviderHugeEntityTest() {
+            super(new JdkConnectorProvider());
+        }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(ConsumerResource.class);
-    }
+    public abstract static class HugeEntityTemplateTest extends JerseyTest {
+        private final ConnectorProvider connectorProvider;
 
-    @Override
-    protected void configureClient(ClientConfig config) {
-        config.register(TestEntityWriter.class);
-        config.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);
-        config.connectorProvider(connectorProvider);
+        public HugeEntityTemplateTest(ConnectorProvider connectorProvider) {
+            this.connectorProvider = connectorProvider;
+        }
+
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(ConsumerResource.class);
+        }
+
+        @Override
+        protected void configureClient(ClientConfig config) {
+            config.register(TestEntityWriter.class);
+            config.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);
+            config.connectorProvider(connectorProvider);
+        }
+
+        /**
+         * JERSEY-2337 reproducer. We are going to send huge amount of data over the wire.
+         * Should not the data have been chunk-encoded, we would easily run out of memory.
+         *
+         * @throws Exception in case of a test error.
+         */
+        @Test
+        public void testPost() throws Exception {
+            Response response = target("/size").request()
+                    .post(Entity.entity(new TestEntity(HUGE_DATA_LENGTH), MediaType.APPLICATION_OCTET_STREAM_TYPE));
+            String content = response.readEntity(String.class);
+            assertThat(Long.parseLong(content), equalTo(HUGE_DATA_LENGTH));
+
+            // just to check the right data have been transfered.
+            response = target("/echo").request().post(Entity.text("Hey Sync!"));
+            assertThat(response.readEntity(String.class), equalTo("Hey Sync!"));
+        }
+
+        /**
+         * JERSEY-2337 reproducer. We are going to send huge amount of data over the wire. This time in an async fashion.
+         * Should not the data have been chunk-encoded, we would easily run out of memory.
+         *
+         * @throws Exception in case of a test error.
+         */
+        @Test
+        public void testAsyncPost() throws Exception {
+            Future<Response> response = target("/size").request().async()
+                    .post(Entity.entity(new TestEntity(HUGE_DATA_LENGTH), MediaType.APPLICATION_OCTET_STREAM_TYPE));
+            final String content = response.get().readEntity(String.class);
+            assertThat(Long.parseLong(content), equalTo(HUGE_DATA_LENGTH));
+
+            // just to check the right data have been transfered.
+            response = target("/echo").request().async().post(Entity.text("Hey Async!"));
+            assertThat(response.get().readEntity(String.class), equalTo("Hey Async!"));
+        }
     }
 
     public static class TestEntity {
@@ -167,40 +212,4 @@
             }
         }
     }
-
-    /**
-     * JERSEY-2337 reproducer. We are going to send huge amount of data over the wire.
-     * Should not the data have been chunk-encoded, we would easily run out of memory.
-     *
-     * @throws Exception in case of a test error.
-     */
-    @Test
-    public void testPost() throws Exception {
-        Response response = target("/size").request()
-                .post(Entity.entity(new TestEntity(HUGE_DATA_LENGTH), MediaType.APPLICATION_OCTET_STREAM_TYPE));
-        String content = response.readEntity(String.class);
-        assertThat(Long.parseLong(content), equalTo(HUGE_DATA_LENGTH));
-
-        // just to check the right data have been transfered.
-        response = target("/echo").request().post(Entity.text("Hey Sync!"));
-        assertThat(response.readEntity(String.class), equalTo("Hey Sync!"));
-    }
-
-    /**
-     * JERSEY-2337 reproducer. We are going to send huge amount of data over the wire. This time in an async fashion.
-     * Should not the data have been chunk-encoded, we would easily run out of memory.
-     *
-     * @throws Exception in case of a test error.
-     */
-    @Test
-    public void testAsyncPost() throws Exception {
-        Future<Response> response = target("/size").request().async()
-                .post(Entity.entity(new TestEntity(HUGE_DATA_LENGTH), MediaType.APPLICATION_OCTET_STREAM_TYPE));
-        final String content = response.get().readEntity(String.class);
-        assertThat(Long.parseLong(content), equalTo(HUGE_DATA_LENGTH));
-
-        // just to check the right data have been transfered.
-        response = target("/echo").request().async().post(Entity.text("Hey Async!"));
-        assertThat(response.get().readEntity(String.class), equalTo("Hey Async!"));
-    }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/MethodTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/MethodTest.java
index c3d2d0e..a850182 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/MethodTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/MethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,9 +16,6 @@
 
 package org.glassfish.jersey.tests.e2e.client.connector;
 
-import java.util.Arrays;
-import java.util.List;
-
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -35,19 +32,21 @@
 import org.glassfish.jersey.jdk.connector.JdkConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests the Http methods.
  *
  * @author Stepan Kopriva
  */
-@RunWith(Parameterized.class)
-public class MethodTest extends JerseyTest {
+@Suite
+@SelectClasses({MethodTest.JdkConnectorProviderMethodTest.class,
+        MethodTest.GrizzlyConnectorProviderMethodTest.class})
+public class MethodTest {
 
     private static final String PATH = "test";
 
@@ -75,48 +74,57 @@
         }
     }
 
-    private final ConnectorProvider connectorProvider;
-
-    public MethodTest(ConnectorProvider connectorProvider) {
-        this.connectorProvider = connectorProvider;
+    public static class GrizzlyConnectorProviderMethodTest extends MethodTemplateTest {
+        public GrizzlyConnectorProviderMethodTest() {
+            super(new GrizzlyConnectorProvider());
+        }
     }
 
-    @Parameterized.Parameters
-    public static List<? extends ConnectorProvider> testData() {
-        return Arrays.asList(new GrizzlyConnectorProvider(), new JdkConnectorProvider());
+    public static class JdkConnectorProviderMethodTest extends MethodTemplateTest {
+        public JdkConnectorProviderMethodTest() {
+            super(new JdkConnectorProvider());
+        }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(HttpMethodResource.class);
-    }
+    public abstract static class MethodTemplateTest extends JerseyTest {
+        private final ConnectorProvider connectorProvider;
 
-    @Override
-    protected void configureClient(ClientConfig config) {
-        config.connectorProvider(connectorProvider);
-    }
+        public MethodTemplateTest(ConnectorProvider connectorProvider) {
+            this.connectorProvider = connectorProvider;
+        }
 
-    @Test
-    public void testGet() {
-        Response response = target(PATH).request().get();
-        assertEquals("GET", response.readEntity(String.class));
-    }
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(HttpMethodResource.class);
+        }
 
-    @Test
-    public void testPost() {
-        Response response = target(PATH).request().post(Entity.entity("POST", MediaType.TEXT_PLAIN));
-        assertEquals("POST", response.readEntity(String.class));
-    }
+        @Override
+        protected void configureClient(ClientConfig config) {
+            config.connectorProvider(connectorProvider);
+        }
 
-    @Test
-    public void testPut() {
-        Response response = target(PATH).request().put(Entity.entity("PUT", MediaType.TEXT_PLAIN));
-        assertEquals("PUT", response.readEntity(String.class));
-    }
+        @Test
+        public void testGet() {
+            Response response = target(PATH).request().get();
+            assertEquals("GET", response.readEntity(String.class));
+        }
 
-    @Test
-    public void testDelete() {
-        Response response = target(PATH).request().delete();
-        assertEquals("DELETE", response.readEntity(String.class));
+        @Test
+        public void testPost() {
+            Response response = target(PATH).request().post(Entity.entity("POST", MediaType.TEXT_PLAIN));
+            assertEquals("POST", response.readEntity(String.class));
+        }
+
+        @Test
+        public void testPut() {
+            Response response = target(PATH).request().put(Entity.entity("PUT", MediaType.TEXT_PLAIN));
+            assertEquals("PUT", response.readEntity(String.class));
+        }
+
+        @Test
+        public void testDelete() {
+            Response response = target(PATH).request().delete();
+            assertEquals("DELETE", response.readEntity(String.class));
+        }
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/AutoDiscoverableTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/AutoDiscoverableTest.java
index 5c0b7c3..87fc2f6 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/AutoDiscoverableTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/AutoDiscoverableTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,8 +36,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Note: Auto-discoverables from this test "affects" all other tests in suit.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ConstrainedToTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ConstrainedToTest.java
index 79bbc5f..5bb0a9d 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ConstrainedToTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ConstrainedToTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests whether providers are correctly validated in the client runtime (for example if provider constrained to
@@ -69,11 +69,11 @@
 
     private void _testFilters(Client client) {
         final Response response = client.target(getBaseUri()).path("resource").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("called", response.getHeaderString("ClientFilterConstrainedToClient"));
-        Assert.assertEquals("called", response.getHeaderString("ClientFilter"));
-        Assert.assertNull("The ClientFilterConstrainedToServer should not be called as it is constrained to server.",
-                response.getHeaderString("ClientFilterConstrainedToServer"));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("called", response.getHeaderString("ClientFilterConstrainedToClient"));
+        Assertions.assertEquals("called", response.getHeaderString("ClientFilter"));
+        Assertions.assertNull(response.getHeaderString("ClientFilterConstrainedToServer"),
+                "The ClientFilterConstrainedToServer should not be called as it is constrained to server.");
     }
 
     @ConstrainedTo(RuntimeType.CLIENT)
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ContentLengthTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ContentLengthTest.java
index a9ae6c4..75edbb6 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ContentLengthTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ContentLengthTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,10 +35,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ContentTypeTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ContentTypeTest.java
index ad65f33..39991d1 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ContentTypeTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ContentTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -59,9 +59,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/DetermineContentLengthTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/DetermineContentLengthTest.java
index 05cab0a..32f149c 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/DetermineContentLengthTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/DetermineContentLengthTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -48,8 +48,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test determining of the content length.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/EncodingTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/EncodingTest.java
index 2e4ce8c..b9b899c 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/EncodingTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/EncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,9 +37,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/FeatureConstraintTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/FeatureConstraintTest.java
index 7ced318..7d70e12 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/FeatureConstraintTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/FeatureConstraintTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,10 +19,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.Uri;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import javax.ws.rs.ConstrainedTo;
 import javax.ws.rs.GET;
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ForcedAutoDiscoverableTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ForcedAutoDiscoverableTest.java
index 7defa2d..967e78c 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ForcedAutoDiscoverableTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ForcedAutoDiscoverableTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,9 +37,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Note: Auto-discoverables from this test "affects" all other tests in suit.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/HeaderParamTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/HeaderParamTest.java
index 0a328f4..f1772f3 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/HeaderParamTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/HeaderParamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,7 +32,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/HeaderValueExceptionTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/HeaderValueExceptionTest.java
index 97f5305..614397a 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/HeaderValueExceptionTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/HeaderValueExceptionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests HeaderValueException.
@@ -54,21 +54,21 @@
         final Response response = target("resource/inbound").request()
                 .header(HttpHeaders.DATE, "foo")
                 .post(Entity.entity("inbound", MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(400, response.getStatus());
+        Assertions.assertEquals(400, response.getStatus());
     }
 
     @Test
     public void testOutboundHeaderThrowsException() throws ExecutionException, InterruptedException {
         final Response response = target("resource/outbound").request()
                 .post(Entity.entity("outbound", MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(500, response.getStatus());
+        Assertions.assertEquals(500, response.getStatus());
     }
 
     @Test
     public void testOutboundResponseHeaderThrowsException() throws ExecutionException, InterruptedException {
         final Response response = target("resource/outbound-Response").request()
                 .post(Entity.entity("outbound", MediaType.TEXT_PLAIN_TYPE));
-        Assert.assertEquals(500, response.getStatus());
+        Assertions.assertEquals(500, response.getStatus());
     }
 
 
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/Hk2BinderSupportTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/Hk2BinderSupportTest.java
index 7ecb616..eb51ff0 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/Hk2BinderSupportTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/Hk2BinderSupportTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,8 +28,8 @@
 
 import org.glassfish.hk2.utilities.binding.AbstractBinder;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests that HK2Binder and Jersey Binder work together.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/LoggingFeatureTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/LoggingFeatureTest.java
index 413f54b..5f2020e 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/LoggingFeatureTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/LoggingFeatureTest.java
@@ -55,9 +55,9 @@
 
 import org.hamcrest.Matcher;
 import org.hamcrest.core.SubstringMatcher;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
 import static org.hamcrest.CoreMatchers.allOf;
 import static org.hamcrest.CoreMatchers.containsString;
@@ -72,8 +72,8 @@
  *
  * @author Michal Gajdos
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
+@Suite
+@SelectClasses({
         LoggingFeatureTest.ClientTest.class,
         LoggingFeatureTest.ContainerTest.class,
         LoggingFeatureTest.ContainerAutodiscoveryTest.class,
@@ -739,7 +739,7 @@
     private static final class ContainsHeaderMatcher extends SubstringMatcher {
 
         ContainsHeaderMatcher(String headerName, String... headerValues) {
-            super(makeRegex(headerName, Arrays.asList(headerValues)));
+            super("matching regex", true, makeRegex(headerName, Arrays.asList(headerValues)));
         }
 
         private static String makeRegex(String headerName, List<String> headerValues) {
@@ -762,10 +762,5 @@
         protected boolean evalSubstringOf(String string) {
             return string.matches(substring);
         }
-
-        @Override
-        protected String relationship() {
-            return "matching regex";
-        }
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyReaderUnsupportedTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyReaderUnsupportedTest.java
index cdd4965..a5103ad 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyReaderUnsupportedTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyReaderUnsupportedTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -39,10 +39,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test case for unsupported media type.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyWorkerInheritanceTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyWorkerInheritanceTest.java
index 81d2fa9..9430af5 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyWorkerInheritanceTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyWorkerInheritanceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -41,8 +41,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test-case for JERSEY-1481.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyWriterObjectDistanceTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyWriterObjectDistanceTest.java
index 6ff32ac..33ec4ae 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyWriterObjectDistanceTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/MessageBodyWriterObjectDistanceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,8 +34,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Object.class needs special handling when computing type distance - it should be always further than any other
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/NoEntityTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/NoEntityTest.java
index 201f846..5fc0ec6 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/NoEntityTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/NoEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,10 +37,10 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Tests that no content type is sent when an entity is not present.
@@ -143,7 +143,7 @@
      * https://java.net/jira/browse/JERSEY-1994
      */
     @Test
-    @Ignore("see https://java.net/jira/browse/JERSEY-1994")
+    @Disabled("see https://java.net/jira/browse/JERSEY-1994")
     public void testNoEntityString() {
         Response response = target().path("resource/string").request().get();
         MyEntity myEntity = response.readEntity(MyEntity.class);
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/NonPublicNonStaticTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/NonPublicNonStaticTest.java
index f148048..898fbe8 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/NonPublicNonStaticTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/NonPublicNonStaticTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,13 +36,13 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests deployment of non-standard or invalid resources and providers.
@@ -53,8 +53,8 @@
  * @author Paul Sandoz
  * @author Adam Lindenthal
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({NonPublicNonStaticTest.NonStaticResourceTest.class,
+@Suite
+@SelectClasses({NonPublicNonStaticTest.NonStaticResourceTest.class,
         NonPublicNonStaticTest.NonStaticResourceSubResourceTest.class,
         NonPublicNonStaticTest.NonPublicResourceTest.class,
         NonPublicNonStaticTest.NonPublicResourceSubResourceTest.class,
@@ -304,8 +304,8 @@
                     break;
                 }
             }
-            assertTrue("Expected log message (1st) was not found.", firstFound);
-            assertTrue("Expected log message (2nd) was not found.", secondFound);
+            assertTrue(firstFound, "Expected log message (1st) was not found.");
+            assertTrue(secondFound, "Expected log message (2nd) was not found.");
         }
     }
 
@@ -316,9 +316,10 @@
             return new ResourceConfig(NonStaticResourceSubResource.class);
         }
 
-        @Test(expected = InternalServerErrorException.class)
+        @Test
         public void testNonStaticResource() throws IOException {
-            target().path("/non-static-sub/class").request().get(String.class);
+            assertThrows(InternalServerErrorException.class,
+                    () -> target().path("/non-static-sub/class").request().get(String.class));
         }
     }
 
@@ -329,9 +330,10 @@
             return new ResourceConfig(NonPublicResource.class);
         }
 
-        @Test(expected = InternalServerErrorException.class)
+        @Test
         public void testNonPublicResource() throws IOException {
-            target().path("/non-public").request().get(String.class);
+            assertThrows(InternalServerErrorException.class,
+                    () -> target().path("/non-public").request().get(String.class));
         }
     }
 
@@ -342,9 +344,10 @@
             return new ResourceConfig(NonPublicResourceSubResource.class);
         }
 
-        @Test(expected = InternalServerErrorException.class)
+        @Test
         public void testNonPublicResource() throws IOException {
-            target().path("/non-public-sub/class").request().get(String.class);
+            assertThrows(InternalServerErrorException.class,
+                    () -> target().path("/non-public-sub/class").request().get(String.class));
         }
     }
 
@@ -366,7 +369,7 @@
                     break;
                 }
             }
-            assertTrue("Expected log record was not found.", found);
+            assertTrue(found, "Expected log record was not found.");
         }
     }
 
@@ -377,9 +380,10 @@
             return new ResourceConfig(AbstractResourceSubResource.class);
         }
 
-        @Test(expected = InternalServerErrorException.class)
+        @Test
         public void testAbstractResourceSubResource() throws IOException {
-            target().path("abstract-sub/class").request().get(String.class);
+            assertThrows(InternalServerErrorException.class,
+                    () -> target().path("abstract-sub/class").request().get(String.class));
         }
     }
 
@@ -406,8 +410,8 @@
                     break;
                 }
             }
-            assertTrue("Expected log message (1st) was not found.", firstFound);
-            assertTrue("Expected log message (2nd) was not found.", secondFound);
+            assertTrue(firstFound, "Expected log message (1st) was not found.");
+            assertTrue(secondFound, "Expected log message (2nd) was not found.");
         }
     }
 
@@ -418,9 +422,10 @@
             return new ResourceConfig(InterfaceResourceSubResource.class);
         }
 
-        @Test(expected = InternalServerErrorException.class)
+        @Test
         public void testInterfaceResourceSubResource() throws IOException {
-            target().path("interface-sub/class").request().get(String.class);
+            assertThrows(InternalServerErrorException.class,
+                    () -> target().path("interface-sub/class").request().get(String.class));
         }
     }
 
@@ -431,9 +436,10 @@
             return new ResourceConfig(NonPublicResourceWithConstructor.class);
         }
 
-        @Test(expected = InternalServerErrorException.class)
+        @Test
         public void testNonPublicResourceWithConstructor() throws IOException {
-            target().path("non-public-with-constructor").request().get(String.class);
+            assertThrows(InternalServerErrorException.class,
+                    () -> target().path("non-public-with-constructor").request().get(String.class));
         }
     }
 
@@ -444,9 +450,10 @@
             return new ResourceConfig(NonPublicResourceSubResourceWithConstructor.class);
         }
 
-        @Test(expected = InternalServerErrorException.class)
+        @Test
         public void testNonPublicResourceSubResourceWithConstructor() throws IOException {
-            target().path("non-public-sub-with-constructor/class").request().get(String.class);
+            assertThrows(InternalServerErrorException.class,
+                    () -> target().path("non-public-sub-with-constructor/class").request().get(String.class));
         }
     }
 
@@ -458,9 +465,10 @@
             return new ResourceConfig(PublicResourceWithPrivateConstructor.class);
         }
 
-        @Test(expected = InternalServerErrorException.class)
+        @Test
         public void testPublicResourceWithPrivateConstructor() throws IOException {
-            target().path("public-with-private-constructor").request().get(String.class);
+            assertThrows(InternalServerErrorException.class,
+                    () -> target().path("public-with-private-constructor").request().get(String.class));
         }
     }
 
@@ -482,7 +490,7 @@
                     break;
                 }
             }
-            assertTrue("Expected log record was not found.", found);
+            assertTrue(found, "Expected log record was not found.");
         }
     }
 
@@ -525,7 +533,7 @@
                     break;
                 }
             }
-            assertTrue("Expected log record was not found.", found);
+            assertTrue(found, "Expected log record was not found.");
         }
     }
 
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ProvidersLegacyOrderingTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ProvidersLegacyOrderingTest.java
index 7829146..a2f47da 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ProvidersLegacyOrderingTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ProvidersLegacyOrderingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,11 +40,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Pavel Bucek
@@ -134,8 +134,8 @@
             Response response = target().request("application/test1").get(Response.class);
 
             assertNotNull(response);
-            assertEquals("Request was not handled correctly, most likely fault in MessageBodyWorker selection.",
-                    200, response.getStatus());
+            assertEquals(200, response.getStatus(),
+                    "Request was not handled correctly, most likely fault in MessageBodyWorker selection.");
         } catch (Exception e) {
             fail("Request was not handled correctly, most likely fault in MessageBodyWorker selection.");
         }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ProvidersOrderingTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ProvidersOrderingTest.java
index 18bab2a..bab8c37 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ProvidersOrderingTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ProvidersOrderingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -48,11 +48,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-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 org.junit.jupiter.api.Test;
+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;
 
 /**
  * @author Pavel Bucek
@@ -343,8 +343,8 @@
                     .put(Entity.entity("test", "application/test1"), Response.class);
 
             assertNotNull(response);
-            assertEquals("Request was not handled correctly, most likely fault in MessageBodyWorker selection.",
-                    200, response.getStatus());
+            assertEquals(200, response.getStatus(),
+                    "Request was not handled correctly, most likely fault in MessageBodyWorker selection.");
         } catch (Exception e) {
             System.out.println(e.getMessage());
             e.printStackTrace();
@@ -371,8 +371,8 @@
             Response response = target.request().post(Entity.text("replaceBuiltInProvider"), Response.class);
 
             assertNotNull(response);
-            assertEquals("Request was not handled correctly, most likely fault in MessageBodyWorker selection.",
-                    200, response.getStatus());
+            assertEquals(200, response.getStatus(),
+                    "Request was not handled correctly, most likely fault in MessageBodyWorker selection.");
         } catch (Exception e) {
             System.out.println(e.getMessage());
             e.printStackTrace();
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/QueryParamEncodingTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/QueryParamEncodingTest.java
index a5991d9..e357508 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/QueryParamEncodingTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/QueryParamEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Miroslav Fuksa
@@ -57,14 +57,14 @@
     @Test
     public void testEncoded() {
         final Response response = target().path("resource/encoded").queryParam("query", "%dummy23+a").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("true:%25dummy23%2Ba", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("true:%25dummy23%2Ba", response.readEntity(String.class));
     }
 
     @Test
     public void testDecoded() {
         final Response response = target().path("resource/decoded").queryParam("query", "%dummy23+a").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("true:%dummy23+a", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("true:%dummy23+a", response.readEntity(String.class));
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ReaderProviderTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ReaderProviderTest.java
index 02392bcd..434c5be 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ReaderProviderTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ReaderProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,9 +32,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Testing {@link Reader} on client and server.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/RequestScopeTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/RequestScopeTest.java
index 99a03f0..5aa0858 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/RequestScopeTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/RequestScopeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,18 +32,18 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * E2E Request Scope Tests.
  *
  * @author Michal Gajdos
  */
-@Ignore("Test Supplier Injection -> this test require dispose() method from Factory")
+//@Disabled("Test Supplier Injection -> this test require dispose() method from Factory")
 public class RequestScopeTest extends JerseyTest {
 
     @Override
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ResponseLinksTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ResponseLinksTest.java
index a63d424..b9d34c8 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ResponseLinksTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/ResponseLinksTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Libor Kamolis
@@ -97,9 +97,9 @@
         WebTarget target = target("test");
         Response response = target.path("1").request(MediaType.APPLICATION_JSON).get();
         Set<Link> links = response.getLinks();
-        Assert.assertEquals(1, links.size());
-        Assert.assertNotNull(response.getLink("prev"));
-        Assert.assertTrue(response.getLink("prev").getUri().toString().endsWith("1?limit=50"));
+        Assertions.assertEquals(1, links.size());
+        Assertions.assertNotNull(response.getLink("prev"));
+        Assertions.assertTrue(response.getLink("prev").getUri().toString().endsWith("1?limit=50"));
     }
 
     /**
@@ -110,12 +110,12 @@
         WebTarget target = target("test");
         Response response = target.path("2").request(MediaType.APPLICATION_JSON).get();
         Set<Link> links = response.getLinks();
-        Assert.assertEquals(2, links.size());
-        Assert.assertNotNull(response.getLink("prev"));
-        Assert.assertTrue(response.getLink("prev").getUri().toString().endsWith("2?limit=50"));
-        Assert.assertNotNull(response.getLink("next"));
-        Assert.assertEquals("next page", response.getLink("next").getTitle());
-        Assert.assertTrue(response.getLink("next").getUri().toString().endsWith("2?limit=50&action=next"));
+        Assertions.assertEquals(2, links.size());
+        Assertions.assertNotNull(response.getLink("prev"));
+        Assertions.assertTrue(response.getLink("prev").getUri().toString().endsWith("2?limit=50"));
+        Assertions.assertNotNull(response.getLink("next"));
+        Assertions.assertEquals("next page", response.getLink("next").getTitle());
+        Assertions.assertTrue(response.getLink("next").getUri().toString().endsWith("2?limit=50&action=next"));
     }
 
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/UriComponentTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/UriComponentTest.java
index a1f5d54..526a73c 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/UriComponentTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/UriComponentTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.uri.UriComponent;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Libor Kamolis
@@ -84,9 +84,9 @@
         String encoded = UriComponent.encode(text, UriComponent.Type.QUERY_PARAM_SPACE_ENCODED);
         WebTarget target = target("test/text");
         Response response = target.queryParam("text", encoded).request().get();
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
         String actual = response.readEntity(String.class);
-        Assert.assertEquals(message, VALUE_PREFIX + text + VALUE_SUFFIX, actual);
+        Assertions.assertEquals(VALUE_PREFIX + text + VALUE_SUFFIX, actual, message);
     }
 
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/EscapedUriTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/EscapedUriTest.java
index 29aa2c9..9ea65a1 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/EscapedUriTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/EscapedUriTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,16 +23,24 @@
 import javax.ws.rs.core.UriInfo;
 
 import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-public class EscapedUriTest extends JerseyContainerTest {
+public class EscapedUriTest {
 
     private static final String RESPONSE = "CONTENT";
 
@@ -41,7 +49,6 @@
 
         private final String context;
 
-        @SuppressWarnings("UnusedDeclaration")
         public EscapedUriResource() {
             this("");
         }
@@ -69,18 +76,35 @@
         }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(EscapedUriResource.class, NonEscapedUriResource.class);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        JerseyContainerTest.parameters().forEach(testContainerFactory -> {
+            EscapedUriTesmplateTest test = new EscapedUriTesmplateTest(testContainerFactory) {};
+            tests.add(TestHelper.toTestContainer(test, testContainerFactory.getClass().getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testEscaped() {
-        assertThat(target("x%20y").request().get(String.class), is(RESPONSE));
-    }
+    public abstract static class EscapedUriTesmplateTest extends JerseyContainerTest {
 
-    @Test
-    public void testNonEscaped() {
-        assertThat(target("non/x y").request().get(String.class), is(RESPONSE));
+        public EscapedUriTesmplateTest(TestContainerFactory testContainerFactory) {
+            super(testContainerFactory);
+        }
+
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(EscapedUriResource.class, NonEscapedUriResource.class);
+        }
+
+        @Test
+        public void testEscaped() {
+            assertThat(target("x%20y").request().get(String.class), is(RESPONSE));
+        }
+
+        @Test
+        public void testNonEscaped() {
+            assertThat(target("non/x y").request().get(String.class), is(RESPONSE));
+        }
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/GrizzlySlashesWithContextPathTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/GrizzlySlashesWithContextPathTest.java
index 509fdcf..f1323a7 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/GrizzlySlashesWithContextPathTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/GrizzlySlashesWithContextPathTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static junit.framework.TestCase.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test Jersey container implementation of URL resolving.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/GzipContentEncodingTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/GzipContentEncodingTest.java
index 61c463e..2a26a62 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/GzipContentEncodingTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/GzipContentEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,6 +17,8 @@
 package org.glassfish.jersey.tests.e2e.container;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.zip.GZIPInputStream;
 
 import javax.ws.rs.GET;
@@ -34,15 +36,19 @@
 import org.glassfish.jersey.message.GZipEncoder;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.filter.EncodingFilter;
+import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-public class GzipContentEncodingTest extends JerseyContainerTest {
+public class GzipContentEncodingTest {
 
     @Path("/")
     public static class Resource {
@@ -58,37 +64,54 @@
         }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(Resource.class, EncodingFilter.class, GZipEncoder.class);
-    }
-
-    @Override
-    protected void configureClient(final ClientConfig config) {
-        config.register(new ReaderInterceptor() {
-            @Override
-            public Object aroundReadFrom(final ReaderInterceptorContext context) throws IOException, WebApplicationException {
-                context.setInputStream(new GZIPInputStream(context.getInputStream()));
-                return context.proceed();
-            }
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        JerseyContainerTest.parameters().forEach(testContainerFactory -> {
+            GzipContentEncodingTemplateTest test = new GzipContentEncodingTemplateTest(testContainerFactory) {};
+            tests.add(TestHelper.toTestContainer(test, testContainerFactory.getClass().getSimpleName()));
         });
+        return tests;
     }
 
-    @Test
-    public void testGet() {
-        final Response response = target().request()
-                .header(HttpHeaders.ACCEPT_ENCODING, "gzip")
-                .get();
+    public abstract static class GzipContentEncodingTemplateTest extends JerseyContainerTest {
 
-        assertThat(response.readEntity(String.class), is("GET"));
-    }
+        public GzipContentEncodingTemplateTest(TestContainerFactory testContainerFactory) {
+            super(testContainerFactory);
+        }
 
-    @Test
-    public void testPost() {
-        final Response response = target().request()
-                .header(HttpHeaders.ACCEPT_ENCODING, "gzip")
-                .post(Entity.text("POST"));
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(Resource.class, EncodingFilter.class, GZipEncoder.class);
+        }
 
-        assertThat(response.readEntity(String.class), is("POST"));
+        @Override
+        protected void configureClient(final ClientConfig config) {
+            config.register(new ReaderInterceptor() {
+                @Override
+                public Object aroundReadFrom(final ReaderInterceptorContext context) throws IOException, WebApplicationException {
+                    context.setInputStream(new GZIPInputStream(context.getInputStream()));
+                    return context.proceed();
+                }
+            });
+        }
+
+        @Test
+        public void testGet() {
+            final Response response = target().request()
+                    .header(HttpHeaders.ACCEPT_ENCODING, "gzip")
+                    .get();
+
+            assertThat(response.readEntity(String.class), is("GET"));
+        }
+
+        @Test
+        public void testPost() {
+            final Response response = target().request()
+                    .header(HttpHeaders.ACCEPT_ENCODING, "gzip")
+                    .post(Entity.text("POST"));
+
+            assertThat(response.readEntity(String.class), is("POST"));
+        }
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/HeadTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/HeadTest.java
index a143d0f..87b5701 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/HeadTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/HeadTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,6 +22,7 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -31,24 +32,23 @@
 import javax.ws.rs.core.Response;
 
 import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 import org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory;
 import org.glassfish.jersey.test.jetty.JettyTestContainerFactory;
 import org.glassfish.jersey.test.simple.SimpleTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
-public class HeadTest extends JerseyContainerTest {
+public class HeadTest extends JerseyTest {
 
     private static final List<TestContainerFactory> FACTORIES = Arrays.asList(
             new GrizzlyTestContainerFactory(),
@@ -56,9 +56,8 @@
             new SimpleTestContainerFactory(),
             new JettyTestContainerFactory());
 
-    @Parameterized.Parameters(name = "{0}")
-    public static Collection<TestContainerFactory[]> parameters() throws Exception {
-        return FACTORIES.stream().map(input -> new TestContainerFactory[]{input}).collect(Collectors.toList());
+    public static Stream<TestContainerFactory> parameters() throws Exception {
+        return FACTORIES.stream();
     }
 
     @Path("/")
@@ -88,18 +87,21 @@
         return new ResourceConfig(Resource.class);
     }
 
-    @Test
-    public void testHeadString() {
+    @ParameterizedTest
+    @MethodSource("parameters")
+    public void testHeadString(TestContainerFactory factory) {
         _testHead("string", MediaType.TEXT_PLAIN_TYPE);
     }
 
-    @Test
-    public void testHeadByte() {
+    @ParameterizedTest
+    @MethodSource("parameters")
+    public void testHeadByte(TestContainerFactory factory) {
         _testHead("byte", MediaType.APPLICATION_OCTET_STREAM_TYPE);
     }
 
-    @Test
-    public void testHeadByteArrayInputStream() {
+    @ParameterizedTest
+    @MethodSource("parameters")
+    public void testHeadByteArrayInputStream(TestContainerFactory factory) {
         _testHead("ByteArrayInputStream", MediaType.APPLICATION_OCTET_STREAM_TYPE);
     }
 
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JdkSlashesWithContextPathTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JdkSlashesWithContextPathTest.java
index b2276f4..3f7c064 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JdkSlashesWithContextPathTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JdkSlashesWithContextPathTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import org.glassfish.jersey.test.jdkhttp.JdkHttpServerTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Ignore;
-import org.junit.Test;
-import static junit.framework.TestCase.assertEquals;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test Jersey container implementation of URL resolving.
@@ -83,7 +83,7 @@
     }
 
     @Test
-    @Ignore("failing with JDK container.")
+    @Disabled("failing with JDK container.")
     public void testEncodedQueryParams() {
         URI hostPort = UriBuilder.fromUri("http://localhost/").port(getPort()).build();
         WebTarget target = client().target(hostPort).path("//" + CONTEXT_PATH + "///encoded")
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/Jersey2462Test.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/Jersey2462Test.java
index e2243d4..ff5654b 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/Jersey2462Test.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/Jersey2462Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,18 +42,19 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Reproducer tests for JERSEY-2462 on Grizzly, Jetty and Simple HTTP server.
  *
  * @author Marek Potociar
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({Jersey2462Test.GrizzlyContainerTest.class,
+@Suite
+@SelectClasses({Jersey2462Test.GrizzlyContainerTest.class,
         Jersey2462Test.JettyContainerTest.class,
         Jersey2462Test.SimpleContainerTest.class})
 public class Jersey2462Test {
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JerseyContainerTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JerseyContainerTest.java
index fe2b087..cf8603e 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JerseyContainerTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JerseyContainerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,9 +17,8 @@
 package org.glassfish.jersey.tests.e2e.container;
 
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
-import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
@@ -28,15 +27,11 @@
 import org.glassfish.jersey.test.jetty.JettyTestContainerFactory;
 import org.glassfish.jersey.test.netty.NettyTestContainerFactory;
 import org.glassfish.jersey.test.simple.SimpleTestContainerFactory;
-import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 
 /**
  * @author Michal Gajdos
  */
-@RunWith(Parameterized.class)
 public abstract class JerseyContainerTest extends JerseyTest {
 
     private static final List<TestContainerFactory> FACTORIES = Arrays.asList(
@@ -48,17 +43,11 @@
             new NettyTestContainerFactory()
     );
 
-    @Parameterized.Parameters(name = "{0}")
-    public static Collection<TestContainerFactory[]> parameters() throws Exception {
-        return FACTORIES.stream().map(input -> new TestContainerFactory[]{input}).collect(Collectors.toList());
+    public static Stream<TestContainerFactory> parameters() {
+        return FACTORIES.stream();
     }
 
-
-    @Parameterized.Parameter(0)
-    public TestContainerFactory factory;
-
-    @Override
-    protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
-        return factory;
+    public JerseyContainerTest(TestContainerFactory testContainerFactory) {
+        super(testContainerFactory);
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JettyEmptyHeaderParamTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JettyEmptyHeaderParamTest.java
index 4af03c6..ad20f30 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JettyEmptyHeaderParamTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/JettyEmptyHeaderParamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests Jetty getHeader() - returns null in when the header
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/LeadingSlashesTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/LeadingSlashesTest.java
index f9b3bd8..d19b243 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/LeadingSlashesTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/LeadingSlashesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,6 +17,8 @@
 package org.glassfish.jersey.tests.e2e.container;
 
 import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
 
 import javax.ws.rs.Encoded;
 import javax.ws.rs.GET;
@@ -30,11 +32,14 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
+import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertNotEquals;
-
-import static junit.framework.TestCase.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test Jersey container implementation of URL resolving.
@@ -44,20 +49,10 @@
  *
  * @author Petr Bouda
  */
-public class LeadingSlashesTest extends JerseyContainerTest {
+public class LeadingSlashesTest {
 
     public static final String CONTAINER_RESPONSE = "Container-Response";
 
-    @Override
-    protected Application configure() {
-        ResourceConfig resourceConfig = new ResourceConfig(SimpleResource.class,
-                EmptyResource.class,
-                EmptyPathParamResource.class);
-
-        resourceConfig.property(ServerProperties.REDUCE_CONTEXT_PATH_SLASHES_ENABLED, true);
-        return resourceConfig;
-    }
-
     @Path("simple")
     public static class SimpleResource {
 
@@ -101,53 +96,78 @@
         }
     }
 
-    @Test
-    public void testSimpleSlashes() {
-        Response result = call("/simple");
-        assertEquals(CONTAINER_RESPONSE, result.readEntity(String.class));
-
-        result = call("//simple");
-        assertNotEquals(CONTAINER_RESPONSE, result.readEntity(String.class));
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        JerseyContainerTest.parameters().forEach(testContainerFactory -> {
+            LeadingSlashesTemplateTest test = new LeadingSlashesTemplateTest(testContainerFactory) {};
+            tests.add(TestHelper.toTestContainer(test, testContainerFactory.getClass().getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testSlashesWithBeginningEmpty() {
-        Response result = call("/test");
-        assertEquals(CONTAINER_RESPONSE, result.readEntity(String.class));
+    public abstract static class LeadingSlashesTemplateTest extends JerseyContainerTest {
+
+        public LeadingSlashesTemplateTest(TestContainerFactory testContainerFactory) {
+            super(testContainerFactory);
+        }
+
+        @Override
+        protected Application configure() {
+            ResourceConfig resourceConfig = new ResourceConfig(SimpleResource.class,
+                    EmptyResource.class,
+                    EmptyPathParamResource.class);
+
+            resourceConfig.property(ServerProperties.REDUCE_CONTEXT_PATH_SLASHES_ENABLED, true);
+            return resourceConfig;
+        }
+
+        @Test
+        public void testSimpleSlashes() {
+            Response result = call("/simple");
+            assertEquals(CONTAINER_RESPONSE, result.readEntity(String.class));
+
+            result = call("//simple");
+            assertNotEquals(CONTAINER_RESPONSE, result.readEntity(String.class));
+        }
+
+        @Test
+        public void testSlashesWithBeginningEmpty() {
+            Response result = call("/test");
+            assertEquals(CONTAINER_RESPONSE, result.readEntity(String.class));
+        }
+
+        @Test
+        public void testSlashesWithBeginningEmptyPathParam() {
+            Response result = call("///test");
+            assertEquals("-", result.readEntity(String.class));
+        }
+
+        @Test
+        public void testSlashesWithBeginningEmptyPathParamWithQueryParams() {
+            URI hostPort = UriBuilder.fromUri("http://localhost/").port(getPort()).build();
+            WebTarget target = client().target(hostPort).path("///testParams")
+                    .queryParam("bar", "Container")
+                    .queryParam("baz", "Response");
+
+            Response result = target.request().get();
+            assertEquals("PATH PARAM: -, QUERY PARAM Container-Response", result.readEntity(String.class));
+        }
+
+        @Test
+        public void testEncodedQueryParams() {
+            URI hostPort = UriBuilder.fromUri("http://localhost/").port(getPort()).build();
+            WebTarget target = client().target(hostPort).path("///encoded")
+                    .queryParam("query", "%dummy23+a");
+
+            Response response = target.request().get();
+            assertEquals(200, response.getStatus());
+            assertEquals("true:%25dummy23%2Ba", response.readEntity(String.class));
+        }
+
+        private Response call(String path) {
+            URI hostPort = UriBuilder.fromUri("http://localhost/").port(getPort()).build();
+            return client().target(hostPort).path(path).request().get();
+        }
     }
-
-    @Test
-    public void testSlashesWithBeginningEmptyPathParam() {
-        Response result = call("///test");
-        assertEquals("-", result.readEntity(String.class));
-    }
-
-    @Test
-    public void testSlashesWithBeginningEmptyPathParamWithQueryParams() {
-        URI hostPort = UriBuilder.fromUri("http://localhost/").port(getPort()).build();
-        WebTarget target = client().target(hostPort).path("///testParams")
-                .queryParam("bar", "Container")
-                .queryParam("baz", "Response");
-
-        Response result = target.request().get();
-        assertEquals("PATH PARAM: -, QUERY PARAM Container-Response", result.readEntity(String.class));
-    }
-
-    @Test
-    public void testEncodedQueryParams() {
-        URI hostPort = UriBuilder.fromUri("http://localhost/").port(getPort()).build();
-        WebTarget target = client().target(hostPort).path("///encoded")
-                .queryParam("query", "%dummy23+a");
-
-        Response response = target.request().get();
-        assertEquals(200, response.getStatus());
-        assertEquals("true:%25dummy23%2Ba", response.readEntity(String.class));
-    }
-
-
-    private Response call(String path) {
-        URI hostPort = UriBuilder.fromUri("http://localhost/").port(getPort()).build();
-        return client().target(hostPort).path(path).request().get();
-    }
-
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/MatrixParamTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/MatrixParamTest.java
index ed96f47..cf39aa1 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/MatrixParamTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/MatrixParamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,15 +22,22 @@
 import javax.ws.rs.core.Application;
 
 import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import java.util.ArrayList;
+import java.util.Collection;
 
 /**
  * @author Michal Gajdos
  */
-public class MatrixParamTest extends JerseyContainerTest {
+public class MatrixParamTest {
 
     @Path("/")
     public static class Resource {
@@ -41,16 +48,34 @@
         }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(Resource.class);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        JerseyContainerTest.parameters().forEach(testContainerFactory -> {
+            MatrixParamTemplateTest test = new MatrixParamTemplateTest(testContainerFactory) {};
+            tests.add(TestHelper.toTestContainer(test, testContainerFactory.getClass().getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testMatrixParam() {
-        assertThat(target().matrixParam("y", "1").request().get(String.class), is("1"));
-        assertThat(target().matrixParam("x", "1").matrixParam("y", "1%20%2B%202").request().get(String.class), is("1 + 2"));
-        assertThat(target().matrixParam("x", "1").matrixParam("y", "1%20%26%202").request().get(String.class), is("1 & 2"));
-        assertThat(target().matrixParam("x", "1").matrixParam("y", "1%20%7C%7C%202").request().get(String.class), is("1 || 2"));
+    public abstract static class MatrixParamTemplateTest extends JerseyContainerTest {
+
+        public MatrixParamTemplateTest(TestContainerFactory testContainerFactory) {
+            super(testContainerFactory);
+        }
+
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(Resource.class);
+        }
+
+        @Test
+        public void testMatrixParam() {
+            assertThat(target().matrixParam("y", "1").request().get(String.class), is("1"));
+            assertThat(target().matrixParam("x", "1").matrixParam("y", "1%20%2B%202").request().get(String.class), is("1 + 2"));
+            assertThat(target().matrixParam("x", "1").matrixParam("y", "1%20%26%202").request().get(String.class), is("1 & 2"));
+            assertThat(target().matrixParam("x", "1").matrixParam("y", "1%20%7C%7C%202").request().get(String.class),
+                    is("1 || 2"));
+        }
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/QueryParamTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/QueryParamTest.java
index 7e95477..d642c4f 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/QueryParamTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/QueryParamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,15 +22,22 @@
 import javax.ws.rs.core.Application;
 
 import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import java.util.ArrayList;
+import java.util.Collection;
 
 /**
  * @author Michal Gajdos
  */
-public class QueryParamTest extends JerseyContainerTest {
+public class QueryParamTest {
 
     @Path("/")
     public static class Resource {
@@ -40,16 +47,33 @@
         }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(Resource.class);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        JerseyContainerTest.parameters().forEach(testContainerFactory -> {
+            QueryParamTemplteTest test = new QueryParamTemplteTest(testContainerFactory) {};
+            tests.add(TestHelper.toTestContainer(test, testContainerFactory.getClass().getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testQueryParam() {
-        assertThat(target().queryParam("y", "1 %2B 2").request().get(String.class), is("1 + 2"));
-        assertThat(target().queryParam("x", "1").queryParam("y", "1 + 2").request().get(String.class), is("1 + 2"));
-        assertThat(target().queryParam("x", "1").queryParam("y", "1 %26 2").request().get(String.class), is("1 & 2"));
-        assertThat(target().queryParam("x", "1").queryParam("y", "1 %7C%7C 2").request().get(String.class), is("1 || 2"));
+    public abstract static class QueryParamTemplteTest extends JerseyContainerTest {
+
+        public QueryParamTemplteTest(TestContainerFactory testContainerFactory) {
+            super(testContainerFactory);
+        }
+
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(Resource.class);
+        }
+
+        @Test
+        public void testQueryParam() {
+            assertThat(target().queryParam("y", "1 %2B 2").request().get(String.class), is("1 + 2"));
+            assertThat(target().queryParam("x", "1").queryParam("y", "1 + 2").request().get(String.class), is("1 + 2"));
+            assertThat(target().queryParam("x", "1").queryParam("y", "1 %26 2").request().get(String.class), is("1 & 2"));
+            assertThat(target().queryParam("x", "1").queryParam("y", "1 %7C%7C 2").request().get(String.class), is("1 || 2"));
+        }
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/ResponseWriterMetadataTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/ResponseWriterMetadataTest.java
index 3035489..16fdc63 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/ResponseWriterMetadataTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/ResponseWriterMetadataTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,6 +20,8 @@
 import java.io.OutputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Collection;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -34,11 +36,15 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
-import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 import org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory;
-import org.glassfish.jersey.test.jdkhttp.JdkHttpServerTestContainerFactory;
+import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
-import org.junit.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -46,7 +52,7 @@
 /**
  * @author Michal Gajdos
  */
-public class ResponseWriterMetadataTest extends JerseyContainerTest {
+public class ResponseWriterMetadataTest {
 
     public static class ValueHolder {
 
@@ -101,23 +107,42 @@
         }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(Resource.class, ValueHolderWriter.class)
-                .property(ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER, 1);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        JerseyContainerTest.parameters().forEach(testContainerFactory -> {
+            ResponseWriterMetadataTemplateTest test = new ResponseWriterMetadataTemplateTest(testContainerFactory) {};
+            tests.add(TestHelper.toTestContainer(test, testContainerFactory.getClass().getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testResponse() {
-        final Response response = target().request().get();
+    public abstract static class ResponseWriterMetadataTemplateTest extends JerseyContainerTest {
+        public ResponseWriterMetadataTemplateTest(TestContainerFactory testContainerFactory) {
+            super(testContainerFactory);
+        }
 
-        assertThat(response.readEntity(String.class), is("one"));
-        assertThat(response.getHeaderString("X-BEFORE-WRITE"), is("foo"));
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(Resource.class, ValueHolderWriter.class)
+                    .property(ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER, 1);
+        }
 
-        if (factory instanceof InMemoryTestContainerFactory) {
-            assertThat(response.getHeaderString("X-AFTER-WRITE"), is("bar"));
-        } else {
-            assertThat(response.getHeaderString("X-AFTER-WRITE"), nullValue());
+        @Test
+        @ParameterizedTest
+        @MethodSource("parameters")
+        public void testResponse() {
+            final Response response = target().request().get();
+
+            assertThat(response.readEntity(String.class), is("one"));
+            assertThat(response.getHeaderString("X-BEFORE-WRITE"), is("foo"));
+
+            TestContainerFactory factory = getTestContainerFactory();
+            if (factory instanceof InMemoryTestContainerFactory) {
+                assertThat(response.getHeaderString("X-AFTER-WRITE"), is("bar"));
+            } else {
+                assertThat(response.getHeaderString("X-AFTER-WRITE"), nullValue());
+            }
         }
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/ResponseWriterOutputStreamTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/ResponseWriterOutputStreamTest.java
index c88468a..017b0fa 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/ResponseWriterOutputStreamTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/ResponseWriterOutputStreamTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,7 +19,11 @@
 import org.glassfish.jersey.server.ContainerRequest;
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.ResourceConfig;
-import org.junit.Test;
+import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -32,20 +36,22 @@
 import javax.ws.rs.core.Response;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * This is really weird approach and test.
  *
  * @author Michal Gajdos
  */
-public class ResponseWriterOutputStreamTest extends JerseyContainerTest {
+public class ResponseWriterOutputStreamTest {
 
     private static final String CHECK_STRING = "RESOURCE";
 
@@ -80,40 +86,57 @@
         }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(Resource.class);
-    }
-
-    @Test
-    public void testGet() {
-        assertThat(target().request().get(String.class), is(CHECK_STRING));
-    }
-
-    @Test
-    public void testPost() throws InterruptedException, ExecutionException {
-        final CountDownLatch controlLatch = new CountDownLatch(1);
-        final Invocation invocation = target().request().buildPost(Entity.text(CHECK_STRING));
-        final Future<Response> resp = invocation.submit(new InvocationCallback<Response>() {
-            @Override
-            public void completed(Response response) {
-                controlLatch.countDown();
-            }
-
-            @Override
-            public void failed(Throwable throwable) {
-                controlLatch.countDown();
-
-            }
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        JerseyContainerTest.parameters().forEach(testContainerFactory -> {
+            ResponseWriterOutputStreamTemplateTest test = new ResponseWriterOutputStreamTemplateTest(testContainerFactory) {};
+            tests.add(TestHelper.toTestContainer(test, testContainerFactory.getClass().getSimpleName()));
         });
-        controlLatch.await();
-        final String response = resp.get().readEntity(String.class);
-        assertThat(response, is(CHECK_STRING));
+        return tests;
     }
 
-    @Test
-    public void testAll() throws InterruptedException, ExecutionException {
-        testGet();
-        testPost();
+    public abstract static class ResponseWriterOutputStreamTemplateTest extends JerseyContainerTest {
+
+        public ResponseWriterOutputStreamTemplateTest(TestContainerFactory testContainerFactory) {
+            super(testContainerFactory);
+        }
+
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(Resource.class);
+        }
+
+        @Test
+        public void testGet() {
+            assertThat(target().request().get(String.class), is(CHECK_STRING));
+        }
+
+        @Test
+        public void testPost() throws InterruptedException, ExecutionException {
+            final CountDownLatch controlLatch = new CountDownLatch(1);
+            final Invocation invocation = target().request().buildPost(Entity.text(CHECK_STRING));
+            final Future<Response> resp = invocation.submit(new InvocationCallback<Response>() {
+                @Override
+                public void completed(Response response) {
+                    controlLatch.countDown();
+                }
+
+                @Override
+                public void failed(Throwable throwable) {
+                    controlLatch.countDown();
+
+                }
+            });
+            controlLatch.await();
+            final String response = resp.get().readEntity(String.class);
+            assertThat(response, is(CHECK_STRING));
+        }
+
+        @Test
+        public void testAll() throws InterruptedException, ExecutionException {
+            testGet();
+            testPost();
+        }
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/TrailingSlashTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/TrailingSlashTest.java
index b55cb38..3425ee3 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/TrailingSlashTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/TrailingSlashTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,15 +22,22 @@
 import javax.ws.rs.core.Response;
 
 import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
-import org.junit.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import java.util.ArrayList;
+import java.util.Collection;
 
 /**
  * @author Michal Gajdos
  */
-public class TrailingSlashTest extends JerseyContainerTest {
+public class TrailingSlashTest {
 
     @Path("/")
     public static class Resource {
@@ -42,25 +49,42 @@
         }
     }
 
-    @Override
-    protected Application configure() {
-        return new ResourceConfig(Resource.class);
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        JerseyContainerTest.parameters().forEach(testContainerFactory -> {
+            TrailingSlashTemplateTest test = new TrailingSlashTemplateTest(testContainerFactory) {};
+            tests.add(TestHelper.toTestContainer(test, testContainerFactory.getClass().getSimpleName()));
+        });
+        return tests;
     }
 
-    @Test
-    public void testSlash() throws Exception {
-        _test("get/");
-    }
+    public abstract static class TrailingSlashTemplateTest extends JerseyContainerTest {
 
-    @Test
-    public void testNoSlash() throws Exception {
-        _test("get");
-    }
+        public TrailingSlashTemplateTest(TestContainerFactory testContainerFactory) {
+            super(testContainerFactory);
+        }
 
-    private void _test(final String path) {
-        final Response response = target(path).request().get();
+        @Override
+        protected Application configure() {
+            return new ResourceConfig(Resource.class);
+        }
 
-        assertThat(response.getStatus(), is(200));
-        assertThat(response.readEntity(String.class), is("get"));
+        @Test
+        public void testSlash() throws Exception {
+            _test("get/");
+        }
+
+        @Test
+        public void testNoSlash() throws Exception {
+            _test("get");
+        }
+
+        private void _test(final String path) {
+            final Response response = target(path).request().get();
+
+            assertThat(response.getStatus(), is(200));
+            assertThat(response.readEntity(String.class), is("get"));
+        }
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/AccessTokenResource.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/AccessTokenResource.java
index be10824..849165a 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/AccessTokenResource.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/AccessTokenResource.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,9 +30,9 @@
 import org.glassfish.jersey.oauth1.signature.OAuth1SignatureException;
 import org.glassfish.jersey.server.oauth1.internal.OAuthServerRequest;
 
-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;
 
 @Path("/access_token")
 public class AccessTokenResource {
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OAuth2Test.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OAuth2Test.java
index 77323c4..2f4fe12 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OAuth2Test.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OAuth2Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -51,11 +51,11 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Tests OAuth 2 client.
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OAuthClientServerTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OAuthClientServerTest.java
index 533e724..efdd165 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OAuthClientServerTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OAuthClientServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -51,8 +51,8 @@
 import org.glassfish.jersey.server.oauth1.OAuth1ServerProperties;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import com.sun.security.auth.UserPrincipal;
 
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OauthClientAuthorizationFlowTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OauthClientAuthorizationFlowTest.java
index 147772e..1f22a2c 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OauthClientAuthorizationFlowTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OauthClientAuthorizationFlowTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,11 +42,11 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 public class OauthClientAuthorizationFlowTest extends JerseyTest {
 
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/PhotosResource.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/PhotosResource.java
index e9cc2ce..131150b 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/PhotosResource.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/PhotosResource.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,9 +31,9 @@
 import org.glassfish.jersey.oauth1.signature.OAuth1SignatureException;
 import org.glassfish.jersey.server.oauth1.internal.OAuthServerRequest;
 
-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;
 
 @Path("/photos")
 public class PhotosResource {
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/RequestTokenResource.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/RequestTokenResource.java
index 7455e62..9fc2ac2 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/RequestTokenResource.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/RequestTokenResource.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,9 +30,9 @@
 import org.glassfish.jersey.oauth1.signature.OAuth1SignatureException;
 import org.glassfish.jersey.server.oauth1.internal.OAuthServerRequest;
 
-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;
 
 @Path("/request_token")
 public class RequestTokenResource {
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java
index 18fdcb9..8e1c5a3 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,10 +22,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.internal.LocalizationMessages;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
@@ -41,13 +41,13 @@
     private static PrintStream errorStream;
     private static OutputStream readableStream = new ByteArrayOutputStream(800);
 
-    @BeforeClass
+    @BeforeAll
     public static void before() {
         errorStream = System.err;
         System.setErr(new PrintStream(readableStream));
     }
 
-    @AfterClass
+    @AfterAll
     public static void after() {
         System.setErr(errorStream);
     }
@@ -70,13 +70,14 @@
         final boolean shouldHaveJaxb = JdkVersion.getJdkVersion().getMajor() == 1;
 
         // Make sure the test does not have JAX-B on a classpath
-        Assert.assertFalse(ServiceFinder.find("javax.xml.bind.JAXBContext").iterator().hasNext());
+        Assertions.assertFalse(ServiceFinder.find("javax.xml.bind.JAXBContext").iterator().hasNext());
 
         try (Response r = target("dummy").request(MediaTypes.WADL_TYPE).options()) {
             String headers = r.getHeaderString(HttpHeaders.ALLOW);
-            Assert.assertEquals("OPTIONS,PUT", headers);
+            Assertions.assertEquals("OPTIONS,PUT", headers);
         }
         System.out.println(readableStream.toString());
-        Assert.assertEquals(!shouldHaveJaxb, readableStream.toString().contains(LocalizationMessages.WADL_FEATURE_DISABLED()));
+        Assertions.assertEquals(!shouldHaveJaxb,
+                readableStream.toString().contains(LocalizationMessages.WADL_FEATURE_DISABLED()));
     }
 }
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/sonar/SonarJerseyE2ETest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/sonar/SonarJerseyE2ETest.java
index 832db1e..c27dfd3 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/sonar/SonarJerseyE2ETest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/sonar/SonarJerseyE2ETest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,8 +19,8 @@
 import org.glassfish.jersey.internal.sonar.SonarJerseyCommon;
 import org.glassfish.jersey.server.internal.sonar.SonarJerseyServer;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Stepan Vavra
@@ -29,11 +29,11 @@
 
     @Test
     public void testJerseyCommonE2E() {
-        Assert.assertEquals("common e2e", new SonarJerseyCommon().e2e());
+        Assertions.assertEquals("common e2e", new SonarJerseyCommon().e2e());
     }
 
     @Test
     public void testJerseyCoreE2E() {
-        Assert.assertEquals("server e2e", new SonarJerseyServer().e2e());
+        Assertions.assertEquals("server e2e", new SonarJerseyServer().e2e());
     }
 }
diff --git a/tests/integration/JERSEY-2988/src/test/java/org/glassfish/jersey/tests/integration/jersey2988/Jersey2988ITCase.java b/tests/integration/JERSEY-2988/src/test/java/org/glassfish/jersey/tests/integration/jersey2988/Jersey2988ITCase.java
index b5bc49d..f234a08 100644
--- a/tests/integration/JERSEY-2988/src/test/java/org/glassfish/jersey/tests/integration/jersey2988/Jersey2988ITCase.java
+++ b/tests/integration/JERSEY-2988/src/test/java/org/glassfish/jersey/tests/integration/jersey2988/Jersey2988ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * JERSEY-2988 reproducer and JERSEY-2990 (duplicate of the previous one)
diff --git a/tests/integration/asm/pom.xml b/tests/integration/asm/pom.xml
index 90980d0..533ef36 100644
--- a/tests/integration/asm/pom.xml
+++ b/tests/integration/asm/pom.xml
@@ -43,8 +43,8 @@
             <artifactId>jersey-server</artifactId>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/tests/integration/asm/src/test/java/org/glassfish/jersey/integration/asm/AnnotatedClassVisitorTest.java b/tests/integration/asm/src/test/java/org/glassfish/jersey/integration/asm/AnnotatedClassVisitorTest.java
index 74570b7..92fc8b0 100644
--- a/tests/integration/asm/src/test/java/org/glassfish/jersey/integration/asm/AnnotatedClassVisitorTest.java
+++ b/tests/integration/asm/src/test/java/org/glassfish/jersey/integration/asm/AnnotatedClassVisitorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,9 +19,10 @@
 import jersey.repackaged.org.objectweb.asm.ClassVisitor;
 import jersey.repackaged.org.objectweb.asm.Opcodes;
 import org.glassfish.jersey.server.internal.scanning.AnnotationAcceptingListener;
+import org.hamcrest.MatcherAssert;
 import org.hamcrest.Matchers;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -80,7 +81,7 @@
                         .println(" not implemented by AnnotationAcceptingListener.AnnotatedClassVisitor");
             }
         }
-        Assert.assertThat(containsAllMethods, Matchers.is(true));
+        MatcherAssert.assertThat(containsAllMethods, Matchers.is(true));
     }
 
     @Test
@@ -100,10 +101,8 @@
             e.printStackTrace();
         }
 
-        Assert.assertEquals(
-                "You need to set: \nAnnotatedClassVisitor() {\n    super(Opcodes.ASM" + asmOpcode + ");\n}",
-                String.valueOf(asmOpcode), aalOpcode
-        );
+        Assertions.assertEquals(String.valueOf(asmOpcode), aalOpcode,
+                "You need to set: \nAnnotatedClassVisitor() {\n    super(Opcodes.ASM" + asmOpcode + ");\n}");
     }
 
     @Test
@@ -127,10 +126,8 @@
             e.printStackTrace();
         }
 
-        Assert.assertEquals(
-                "You need to set ClassReaderWrapper.WARN_VERSION=Opcodes.V" + jdkVersion,
-                jdkVersion, warnFieldValue
-        );
+        Assertions.assertEquals(jdkVersion, warnFieldValue,
+                "You need to set ClassReaderWrapper.WARN_VERSION=Opcodes.V" + jdkVersion);
     }
 
     @Test
@@ -156,10 +153,8 @@
         }
 
         final String message = new String(log.toByteArray());
-        Assert.assertTrue(
-                "The WARNING `" + warningMsg + "` has not been printed for a class with byte code version " + array[7],
-                message.contains(warningMsg)
-        );
+        Assertions.assertTrue(message.contains(warningMsg),
+                "The WARNING `" + warningMsg + "` has not been printed for a class with byte code version " + array[7]);
     }
 
     private static int getMaxValueOfField(String fieldPrefix, int initialValue) {
diff --git a/tests/integration/async-jersey-filter/src/test/java/org/glassfish/jersey/tests/integration/jersey2730/Jersey2730ITCase.java b/tests/integration/async-jersey-filter/src/test/java/org/glassfish/jersey/tests/integration/jersey2730/Jersey2730ITCase.java
index 7e9dbf4..5c538b0 100644
--- a/tests/integration/async-jersey-filter/src/test/java/org/glassfish/jersey/tests/integration/jersey2730/Jersey2730ITCase.java
+++ b/tests/integration/async-jersey-filter/src/test/java/org/glassfish/jersey/tests/integration/jersey2730/Jersey2730ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,9 +20,9 @@
 
 import org.glassfish.jersey.tests.integration.async.AbstractAsyncJerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 /**
  * JERSEY-2730 reproducer.
@@ -36,9 +36,8 @@
     private void assertLastThreadNotStuck() {
         final boolean lastThreadGotStuck = target("/exceptionTest/exception/rpc/lastthreadstuck").request().get(boolean.class);
 
-        assertFalse("Thread processing last request got stuck while processing the request for "
-                        + TestExceptionResource.class.getCanonicalName(),
-                lastThreadGotStuck);
+        assertFalse(lastThreadGotStuck, "Thread processing last request got stuck while processing the request for "
+                        + TestExceptionResource.class.getCanonicalName());
     }
 
     @Test
diff --git a/tests/integration/async-jersey-filter/src/test/java/org/glassfish/jersey/tests/integration/jersey2812/Jersey2812ITCase.java b/tests/integration/async-jersey-filter/src/test/java/org/glassfish/jersey/tests/integration/jersey2812/Jersey2812ITCase.java
index 663aefe..fe17d5a 100644
--- a/tests/integration/async-jersey-filter/src/test/java/org/glassfish/jersey/tests/integration/jersey2812/Jersey2812ITCase.java
+++ b/tests/integration/async-jersey-filter/src/test/java/org/glassfish/jersey/tests/integration/jersey2812/Jersey2812ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,11 +33,11 @@
 import org.glassfish.jersey.internal.guava.ThreadFactoryBuilder;
 import org.glassfish.jersey.tests.integration.async.AbstractAsyncJerseyTest;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * JERSEY-2812 reproducer.
@@ -56,7 +56,7 @@
     private ExecutorService executorService = Executors
             .newSingleThreadExecutor(new ThreadFactoryBuilder().setDaemon(true).build());
 
-    @Before
+    @BeforeEach
     public void triggerTheWaitRequestInSeparateThread() throws Exception {
         executorService.execute(new Runnable() {
             @Override
@@ -92,17 +92,17 @@
         // [1] wait for the /async/wait request to be processed
         final Response startResponse = target("/asyncTest/async/await").path(uuid).path("started")
                 .queryParam("millis", WAIT_TIMEOUT).request().get();
-        assertTrue("The server-side thread handling the request to /async/wait didn't start in timely fashion. "
+        assertTrue(startResponse.readEntity(Boolean.class),
+                "The server-side thread handling the request to /async/wait didn't start in timely fashion. "
                         + "This error indicates this test is not executed / designed properly rather than a regression in "
-                        + "JERSEY-2812 fix.",
-                startResponse.readEntity(Boolean.class));
+                        + "JERSEY-2812 fix.");
 
         // [2] wait for the /async/wait request to finish
         final Response finishResponse = target("/asyncTest/async/await").path(uuid).path("finished")
                 .queryParam("millis", WAIT_TIMEOUT).request().get();
-        assertTrue("The thread processing the /async/wait request did not respond in timely fashion. "
-                        + "Memory leak / thread got stuck detected!",
-                finishResponse.readEntity(Boolean.class));
+        assertTrue(finishResponse.readEntity(Boolean.class),
+                "The thread processing the /async/wait request did not respond in timely fashion. "
+                        + "Memory leak / thread got stuck detected!");
 
         // [3] release the blocked http call to /async/wait
         final String releaseResponse = target("/asyncTest/async/release").path(uuid).request().post(null, String.class);
@@ -110,18 +110,18 @@
 
         // [4] test whether everything ended as expected
         executorService.shutdown();
-        assertTrue("The test thread did not finish in timely fashion!",
-                executorService.awaitTermination(WAIT_TIMEOUT, TimeUnit.MILLISECONDS));
+        assertTrue(executorService.awaitTermination(WAIT_TIMEOUT, TimeUnit.MILLISECONDS),
+                "The test thread did not finish in timely fashion!");
         assertEquals("async-OK-" + uuid, asyncResult.get());
     }
 
-    @After
+    @AfterEach
     public void releaseResources() {
         // release the server-side thread regardless of whether left un-attended
         target("/asyncTest/async/release").path(uuid).request().post(null);
     }
 
-    @After
+    @AfterEach
     public void terminateThread() {
         // forcibly terminate the test client thread
         executorService.shutdownNow();
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/BaseValidationTest.java b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/BaseValidationTest.java
index 12a9681..e09226f 100644
--- a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/BaseValidationTest.java
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/BaseValidationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Common test for resource validation. The same set of tests is used
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/CombinedTest.java b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/CombinedTest.java
index b1b2961..297ba27 100644
--- a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/CombinedTest.java
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/CombinedTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,12 +34,11 @@
 import org.glassfish.grizzly.http.server.HttpHandler;
 import org.glassfish.grizzly.http.server.HttpServer;
 
-import org.hamcrest.CoreMatchers;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.After;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test both Jersey apps running simultaneously within a single Grizzly HTTP server
@@ -69,7 +68,7 @@
     Client client;
     WebTarget cdiTarget, hk2Target;
 
-    @Before
+    @BeforeEach
     public void before() throws IOException {
         if (isDefaultTestContainerFactorySet && Hk2InjectionManagerFactory.isImmediateStrategy()) {
             initializeWeld();
@@ -78,12 +77,12 @@
         }
     }
 
-    @Before
+    @BeforeEach
     public void beforeIsImmediate() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
-    @After
+    @AfterEach
     public void after() {
         if (isDefaultTestContainerFactorySet && Hk2InjectionManagerFactory.isImmediateStrategy()) {
             cdiServer.shutdownNow();
@@ -94,69 +93,69 @@
 
     @Test
     public void testParamValidatedResourceNoParam() throws Exception {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         BaseValidationTest._testParamValidatedResourceNoParam(cdiTarget);
         BaseValidationTest._testParamValidatedResourceNoParam(hk2Target);
     }
 
     @Test
     public void testParamValidatedResourceParamProvided() throws Exception {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         BaseValidationTest._testParamValidatedResourceParamProvided(cdiTarget);
         BaseValidationTest._testParamValidatedResourceParamProvided(hk2Target);
     }
 
     @Test
     public void testFieldValidatedResourceNoParam() throws Exception {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         BaseValidationTest._testFieldValidatedResourceNoParam(cdiTarget);
         BaseValidationTest._testFieldValidatedResourceNoParam(hk2Target);
     }
 
     @Test
     public void testFieldValidatedResourceParamProvided() throws Exception {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         BaseValidationTest._testFieldValidatedResourceParamProvided(cdiTarget);
         BaseValidationTest._testFieldValidatedResourceParamProvided(hk2Target);
     }
 
     @Test
     public void testPropertyValidatedResourceNoParam() throws Exception {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         BaseValidationTest._testPropertyValidatedResourceNoParam(cdiTarget);
         BaseValidationTest._testPropertyValidatedResourceNoParam(hk2Target);
     }
 
     @Test
     public void testPropertyValidatedResourceParamProvided() throws Exception {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         BaseValidationTest._testPropertyValidatedResourceParamProvided(cdiTarget);
         BaseValidationTest._testPropertyValidatedResourceParamProvided(hk2Target);
     }
 
     @Test
     public void testOldFashionedResourceNoParam() {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         BaseValidationTest._testOldFashionedResourceNoParam(cdiTarget);
         BaseValidationTest._testOldFashionedResourceNoParam(hk2Target);
     }
 
     @Test
     public void testOldFashionedResourceParamProvided() throws Exception {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         BaseValidationTest._testOldFashionedResourceParamProvided(cdiTarget);
         BaseValidationTest._testOldFashionedResourceParamProvided(hk2Target);
     }
 
     @Test
     public void testNonJaxRsValidationFieldValidatedResourceNoParam() {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         BaseValidationTest._testNonJaxRsValidationFieldValidatedResourceNoParam(cdiTarget);
     }
 
     @Test
     public void testNonJaxRsValidationFieldValidatedResourceParamProvided() {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         BaseValidationTest._testNonJaxRsValidationFieldValidatedResourceParamProvided(cdiTarget);
     }
 
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawCdiTest.java b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawCdiTest.java
index 8932fc8..c01e096 100644
--- a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawCdiTest.java
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawCdiTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,9 +23,10 @@
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 
 /**
@@ -37,11 +38,12 @@
 
     Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -53,6 +55,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawHk2Test.java b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawHk2Test.java
index 43e551b..29d0a88 100644
--- a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawHk2Test.java
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawHk2Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,8 +20,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  * Validation result test for raw HK2 environment.
diff --git a/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/org/glassfish/jersey/tests/cdi/client/BeanManagerInjectedOnClientTest.java b/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/org/glassfish/jersey/tests/cdi/client/BeanManagerInjectedOnClientTest.java
index 6eb9064..d5db6e2 100644
--- a/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/org/glassfish/jersey/tests/cdi/client/BeanManagerInjectedOnClientTest.java
+++ b/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/org/glassfish/jersey/tests/cdi/client/BeanManagerInjectedOnClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,10 +20,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -31,11 +32,12 @@
 public class BeanManagerInjectedOnClientTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -47,6 +49,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -65,7 +68,7 @@
     @Test
     public void testBeanManagerIsInjected() {
         try (Response r = target("resource").path("main").request().get()) {
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
             System.out.println(r.readEntity(String.class));
         }
     }
diff --git a/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiIntoEjbTest.java b/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiIntoEjbTest.java
index d98c072..1bd4982 100644
--- a/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiIntoEjbTest.java
+++ b/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiIntoEjbTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,9 +18,9 @@
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test CDI timers injected into EJB beans.
@@ -54,7 +54,7 @@
         sleep(2);
         long secondMillis = _getMillis(target);
 
-        assertTrue("Second request should have greater millis!", secondMillis > firstMillis);
+        assertTrue(secondMillis > firstMillis, "Second request should have greater millis!");
     }
 
     private void _testAppScoped(final String ejbType) {
@@ -64,6 +64,6 @@
         sleep(2);
         long secondMillis = _getMillis(target);
 
-        assertTrue("Second request should have the same millis!", secondMillis == firstMillis);
+        assertTrue(secondMillis == firstMillis, "Second request should have the same millis!");
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/EjbIntoCdiTest.java b/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/EjbIntoCdiTest.java
index b27b0ce..fa5d737 100644
--- a/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/EjbIntoCdiTest.java
+++ b/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/EjbIntoCdiTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,9 +18,9 @@
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.equalTo;
 
diff --git a/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TestBase.java b/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TestBase.java
index 670e4fc..8b53ae7 100644
--- a/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TestBase.java
+++ b/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TestBase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.CoreMatchers.is;
 
 /**
diff --git a/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/EchoResourceTest.java b/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/EchoResourceTest.java
index 7791a8f..cd6063b 100644
--- a/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/EchoResourceTest.java
+++ b/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/EchoResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import javax.ws.rs.core.UriBuilder;
 
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.startsWith;
 
diff --git a/tests/integration/cdi-integration/cdi-log-check/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderWarningTest.java b/tests/integration/cdi-integration/cdi-log-check/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderWarningTest.java
index 24dd485..4f46007 100644
--- a/tests/integration/cdi-integration/cdi-log-check/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderWarningTest.java
+++ b/tests/integration/cdi-integration/cdi-log-check/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderWarningTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,26 +22,28 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class CdiComponentProviderWarningTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -53,6 +55,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -84,7 +87,7 @@
         for (final LogRecord logRecord : getLoggedRecords()) {
             if (logRecord.getLoggerName().equals("org.glassfish.jersey.internal.Errors")
                     && logRecord.getMessage().contains(searchInLog)) {
-                Assert.fail("Checking CDI bean is a JAX-RS resource should not cast warnings");
+                Assertions.fail("Checking CDI bean is a JAX-RS resource should not cast warnings");
             }
         }
     }
diff --git a/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/CdiServiceInjectTest.java b/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/CdiServiceInjectTest.java
index c75dfa7..56d91aa 100644
--- a/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/CdiServiceInjectTest.java
+++ b/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/CdiServiceInjectTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,10 +21,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -32,11 +33,12 @@
 public class CdiServiceInjectTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -48,6 +50,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
@@ -63,7 +66,7 @@
     public void testCdiServiceIsInjected() {
         try (Response response = target().request().get()) {
             String header = response.getStringHeaders().getFirst(NoBeanDefiningAnnotationContainerFilter.class.getSimpleName());
-            Assert.assertEquals(CdiServiceImpl.class.getSimpleName(), header);
+            Assertions.assertEquals(CdiServiceImpl.class.getSimpleName(), header);
         }
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/HK2ServiceInjectTest.java b/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/HK2ServiceInjectTest.java
index e702bdd..50edb62 100644
--- a/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/HK2ServiceInjectTest.java
+++ b/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/HK2ServiceInjectTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,10 +21,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -32,11 +33,12 @@
 public class HK2ServiceInjectTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -48,6 +50,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
@@ -63,7 +66,7 @@
     public void testHK2ServiceIsInjected() {
         try (Response response = target().request().get()) {
             String header = response.getStringHeaders().getFirst(HK2InjectedFilter.class.getSimpleName());
-            Assert.assertEquals(HK2ServiceImpl.class.getSimpleName(), header);
+            Assertions.assertEquals(HK2ServiceImpl.class.getSimpleName(), header);
         }
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-multimodule/war1/src/test/java/org/glassfish/jersey/tests/integration/multimodule/cdi/web1/JaxRsCdiIntegrationTest.java b/tests/integration/cdi-integration/cdi-multimodule/war1/src/test/java/org/glassfish/jersey/tests/integration/multimodule/cdi/web1/JaxRsCdiIntegrationTest.java
index aa74ae4..758be57 100644
--- a/tests/integration/cdi-integration/cdi-multimodule/war1/src/test/java/org/glassfish/jersey/tests/integration/multimodule/cdi/web1/JaxRsCdiIntegrationTest.java
+++ b/tests/integration/cdi-integration/cdi-multimodule/war1/src/test/java/org/glassfish/jersey/tests/integration/multimodule/cdi/web1/JaxRsCdiIntegrationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,7 +26,7 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/integration/cdi-integration/cdi-multimodule/war2/src/test/java/org/glassfish/jersey/tests/integration/multimodule/cdi/web2/JaxRsCdiIntegrationTest.java b/tests/integration/cdi-integration/cdi-multimodule/war2/src/test/java/org/glassfish/jersey/tests/integration/multimodule/cdi/web2/JaxRsCdiIntegrationTest.java
index b6c4f0c..bc093b1 100644
--- a/tests/integration/cdi-integration/cdi-multimodule/war2/src/test/java/org/glassfish/jersey/tests/integration/multimodule/cdi/web2/JaxRsCdiIntegrationTest.java
+++ b/tests/integration/cdi-integration/cdi-multimodule/war2/src/test/java/org/glassfish/jersey/tests/integration/multimodule/cdi/web2/JaxRsCdiIntegrationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
@@ -75,7 +75,7 @@
         _testResource("cdi-multimodule-war2/two/app-scoped/req");
     }
 
-    @Ignore("until JERSEY-2914 gets resolved")
+    @Disabled("until JERSEY-2914 gets resolved")
     @Test
     public void testUriInfoInjectionAppScopedResourceDependentBean() {
 
diff --git a/tests/integration/cdi-integration/cdi-multipart-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MultipartFeatureTest.java b/tests/integration/cdi-integration/cdi-multipart-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MultipartFeatureTest.java
index c5c9250..ac40505 100644
--- a/tests/integration/cdi-integration/cdi-multipart-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MultipartFeatureTest.java
+++ b/tests/integration/cdi-integration/cdi-multipart-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MultipartFeatureTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,8 +17,7 @@
 package org.glassfish.jersey.tests.cdi.resources;
 
 import java.net.URI;
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
@@ -32,11 +31,10 @@
 import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Part of GF-21033 reproducer. Make sure form data processed by the Jersey multi-part
@@ -50,23 +48,10 @@
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class MultipartFeatureTest extends JerseyTest {
 
-    final String TestFormDATA;
-
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"No matter what"},
-                {"You should never"},
-                {"ever"},
-                {"just give up"}
-        });
-    }
-
-    public MultipartFeatureTest(String TestFormDATA) {
-        this.TestFormDATA = TestFormDATA;
+    public static Stream<String> testData() {
+        return Stream.of("No matter what", "You should never", "ever", "just give up");
     }
 
     @Override
@@ -84,8 +69,9 @@
         config.register(MultiPartFeature.class);
     }
 
-    @Test
-    public void testPostFormData() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testPostFormData(String TestFormDATA) {
 
         final WebTarget target = target().path("echo");
 
diff --git a/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/org/glassfish/jersey/tests/cdi/resourceatcontext/ResourceWithConstructorTest.java b/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/org/glassfish/jersey/tests/cdi/resourceatcontext/ResourceWithConstructorTest.java
index ace3e0b..b09db54 100644
--- a/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/org/glassfish/jersey/tests/cdi/resourceatcontext/ResourceWithConstructorTest.java
+++ b/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/org/glassfish/jersey/tests/cdi/resourceatcontext/ResourceWithConstructorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,10 +26,11 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.enterprise.inject.spi.BeanManager;
 import javax.inject.Inject;
@@ -43,11 +44,12 @@
 public class ResourceWithConstructorTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -57,6 +59,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -85,7 +88,7 @@
     @Test
     public void testContextInConstructorAndInjectInClass() throws InterruptedException {
         try (Response r = target().path("get").request().get()) {
-            Assert.assertEquals("OK", r.readEntity(String.class));
+            Assertions.assertEquals("OK", r.readEntity(String.class));
         }
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-singleton/src/test/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTest.java b/tests/integration/cdi-integration/cdi-singleton/src/test/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTest.java
index eb5e9c6..90dae9f 100644
--- a/tests/integration/cdi-integration/cdi-singleton/src/test/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTest.java
+++ b/tests/integration/cdi-integration/cdi-singleton/src/test/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,10 +20,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -31,11 +32,12 @@
 public class SingletonTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -47,6 +49,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
@@ -62,11 +65,11 @@
     public void testSingleton() {
         try (Response response = target().request().get()) {
             String entity = response.readEntity(String.class);
-            Assert.assertEquals(SingletonResource.class.getSimpleName(), entity);
+            Assertions.assertEquals(SingletonResource.class.getSimpleName(), entity);
 
             final SingletonResource actualResource = SingletonTestApp.SINGLETON_RESOURCES[1];
-            Assert.assertEquals(actualResource, SingletonTestApp.SINGLETON_RESOURCES[0]);
-            Assert.assertEquals(actualResource, SingletonTestApp.SINGLETON_RESOURCES[2]);
+            Assertions.assertEquals(actualResource, SingletonTestApp.SINGLETON_RESOURCES[0]);
+            Assertions.assertEquals(actualResource, SingletonTestApp.SINGLETON_RESOURCES[2]);
         }
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderTest.java
index ca98914..c84644d 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderTest.java
@@ -20,7 +20,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.enterprise.inject.Vetoed;
 import javax.enterprise.inject.spi.BeanManager;
@@ -30,11 +32,12 @@
 import javax.ws.rs.core.Application;
 import java.util.Collections;
 
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 public class CdiComponentProviderTest extends JerseyTest {
     Weld weld;
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         weld = new Weld();
@@ -42,6 +45,7 @@
         super.setUp();
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
index 067e2af..30011f1 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,6 +24,8 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.jboss.weld.environment.se.Weld;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 
 /**
  * Test for CDI web application resources.
@@ -39,6 +41,7 @@
 
     Weld weld;
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         weld = new Weld();
@@ -46,6 +49,7 @@
         super.setUp();
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ConstructorInjectionTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ConstructorInjectionTest.java
index f7c8566..442d6cc 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ConstructorInjectionTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ConstructorInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,8 +19,8 @@
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import org.junit.Test;
+import static org.hamcrest.MatcherAssert.assertThat;
+import org.junit.jupiter.api.Test;
 
 /**
  * Part of JERSEY-2526 reproducer. Without the fix, the application would
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CounterTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CounterTest.java
index 0d7e76d..c7e40ac 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CounterTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CounterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,10 +18,10 @@
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.hamcrest.CoreMatchers.is;
 
 /**
@@ -45,6 +45,6 @@
         assertThat(secondResponse.getStatus(), is(200));
         int secondNumber = Integer.decode(secondResponse.readEntity(String.class));
 
-        assertTrue("Second request should have greater number!", secondNumber > firstNumber);
+        assertTrue(secondNumber > firstNumber, "Second request should have greater number!");
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/JaxRsInjectedCdiBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/JaxRsInjectedCdiBeanTest.java
index 64630ee..a4bfcb7 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/JaxRsInjectedCdiBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/JaxRsInjectedCdiBeanTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,11 +19,11 @@
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test that a raw CDI managed bean gets JAX-RS injected.
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/NonJaxRsBeanJaxRsInjectionTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/NonJaxRsBeanJaxRsInjectionTest.java
index a955785..69ea214 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/NonJaxRsBeanJaxRsInjectionTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/NonJaxRsBeanJaxRsInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,12 +34,11 @@
 import org.glassfish.grizzly.http.server.HttpHandler;
 import org.glassfish.grizzly.http.server.HttpServer;
 
-import org.hamcrest.CoreMatchers;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.After;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test two Jersey apps running simultaneously within a single Grizzly HTTP server
@@ -70,9 +69,9 @@
     Client client;
     WebTarget mainTarget, secondaryTarget;
 
-    @Before
+    @BeforeEach
     public void before() throws IOException {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
 
         if (isDefaultTestContainerFactorySet) {
             initializeWeld();
@@ -81,7 +80,7 @@
         }
     }
 
-    @After
+    @AfterEach
     public void after() {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
             if (isDefaultTestContainerFactorySet) {
@@ -94,7 +93,7 @@
 
     @Test
     public void testPathAndHeader() throws Exception {
-        Assume.assumeThat(isDefaultTestContainerFactorySet, CoreMatchers.is(true));
+        Assumptions.assumeTrue(isDefaultTestContainerFactorySet);
         JaxRsInjectedCdiBeanTest._testPathAndHeader(mainTarget);
         SecondJaxRsInjectedCdiBeanTest._testPathAndHeader(secondaryTarget);
     }
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestBeanTest.java
index 973860b..607d339 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestBeanTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2019 Payara Foundation and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -17,20 +17,18 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 
-import org.hamcrest.CoreMatchers;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for the request scoped resource.
@@ -38,32 +36,15 @@
  * @author Jakub Podlesak
  * @author Patrik Dudits
  */
-@RunWith(Parameterized.class)
 public class PerRequestBeanTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"alpha"},
-                {"AAA"},
-                {"$%^"},
-                {"a b"}
-        });
+    public static Stream<String> testData() {
+        return Stream.of("alpha", "AAA", "$%^", "a b");
     }
 
-    final String x;
-
-    /**
-     * Create x new test case based on the above defined parameters.
-     *
-     * @param x query parameter value
-     */
-    public PerRequestBeanTest(String x) {
-        this.x = x;
-    }
-
-    @Test
-    public void testGet() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testGet(String x) {
 
         final WebTarget target = target().path("jcdibean/per-request").queryParam("x", x);
 
@@ -73,8 +54,9 @@
         assertThat(s, containsString(String.format("queryParam=%s", x)));
     }
 
-    @Test
-    public void testSingleResponseFilterInvocation() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testSingleResponseFilterInvocation(String x) {
 
         final WebTarget target = target().path("jcdibean/per-request").queryParam("x", x);
 
@@ -82,8 +64,8 @@
 
         List<Object> invocationIds = response.getHeaders().get("Filter-Invoked");
 
-        assertNotNull("Filter-Invoked header should be set by ResponseFilter", invocationIds);
-        assertEquals("ResponseFilter should be invoked only once", 1, invocationIds.size());
+        assertNotNull(invocationIds, "Filter-Invoked header should be set by ResponseFilter");
+        assertEquals(1, invocationIds.size(), "ResponseFilter should be invoked only once");
     }
 
 }
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestDependentBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestDependentBeanTest.java
index 458e548..49d4e24 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestDependentBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestDependentBeanTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,48 +16,29 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for the request scoped managed bean resource.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class PerRequestDependentBeanTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"alpha"},
-                {"AAA"},
-                {"$%^"},
-                {"a b"}
-        });
+    public static Stream<String> testData() {
+        return Stream.of("alpha", "AAA", "$%^", "a b");
     }
 
-    final String x;
-
-    /**
-     * Create x new test case based on the above defined parameters.
-     *
-     * @param x query parameter value
-     */
-    public PerRequestDependentBeanTest(String x) {
-        this.x = x;
-    }
-
-    @Test
-    public void testGet() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testGet(String x) {
 
         final WebTarget target = target().path("jcdibean/dependent/per-request").queryParam("x", x);
 
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ProducerTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ProducerTest.java
index 418067b..ad06deb 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ProducerTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ProducerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,9 +18,9 @@
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.CoreMatchers.is;
 
 /**
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/QualifiedInjectionSetGetTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/QualifiedInjectionSetGetTest.java
index a928b91..2a2b8e2 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/QualifiedInjectionSetGetTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/QualifiedInjectionSetGetTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,9 +19,9 @@
 import javax.inject.Qualifier;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.CoreMatchers.is;
 
 /**
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ReverseEchoTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ReverseEchoTest.java
index d7ce046..5adf08f 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ReverseEchoTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ReverseEchoTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,49 +16,34 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for qualified injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class ReverseEchoTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"alpha", "ahpla"},
-                {"gogol", "logog"},
-                {"elcaro", "oracle"}
-        });
+    public static Stream<Arguments> testData() {
+        return Stream.of(
+                Arguments.of("alpha", "ahpla"),
+                Arguments.of("gogol", "logog"),
+                Arguments.of("elcaro", "oracle")
+        );
     }
 
-    final String in, out;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param in query parameter.
-     * @param out expected output.
-     */
-    public ReverseEchoTest(String in, String out) {
-        this.in = in;
-        this.out = out;
-    }
-
-    @Test
-    public void testGet() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testGet(String in, String out) {
         WebTarget reverseService = target().path("reverse").queryParam("s", in);
         String s = reverseService.request().get(String.class);
         assertThat(s, equalTo(out));
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SecondJaxRsInjectedCdiBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SecondJaxRsInjectedCdiBeanTest.java
index 5b86192..e416d07 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SecondJaxRsInjectedCdiBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SecondJaxRsInjectedCdiBeanTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,11 +26,12 @@
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test that a raw CDI managed bean gets JAX-RS injected.
@@ -40,6 +41,7 @@
 public class SecondJaxRsInjectedCdiBeanTest extends JerseyTest {
     Weld weld;
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         weld = new Weld();
@@ -47,6 +49,7 @@
         super.setUp();
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonBeanTest.java
index 1dcf301..9e1e4f9 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonBeanTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,51 +16,36 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
 
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for the application scoped resource.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class SingletonBeanTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"alpha", "beta"},
-                {"1", "2"}
-        });
+    public static Stream<Arguments> testData() {
+        return Stream.of(
+                Arguments.of("alpha", "beta"),
+                Arguments.of("1", "2")
+        );
     }
 
-    final String p, x;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param p path parameter.
-     * @param x query parameter.
-     */
-    public SingletonBeanTest(String p, String x) {
-        this.p = p;
-        this.x = x;
-    }
-
-    @Test
-    public void testGet() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testGet(String p, String x) {
         final WebTarget singleton = target().path("jcdibean/singleton").path(p).queryParam("x", x);
         String s = singleton.request().get(String.class);
         assertThat(s, containsString(singleton.getUri().toString()));
@@ -68,8 +53,9 @@
         assertThat(s, containsString(String.format("queryParam=%s", x)));
     }
 
-    @Test
-    public void testCounter() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testCounter(String p, String x) {
 
         final WebTarget counter = target().path("jcdibean/singleton").path(p).queryParam("x", x).path("counter");
 
@@ -92,8 +78,9 @@
         counter.request().put(Entity.text("10"));
     }
 
-    @Test
-    public void testException() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testException(String p, String x) {
         final WebTarget exception = target().path("jcdibean/singleton").path(p).queryParam("x", x).path("exception");
         assertThat(exception.request().get().readEntity(String.class), containsString("JDCIBeanException"));
     }
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonDependentBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonDependentBeanTest.java
index 056c3c5..126ce4d 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonDependentBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonDependentBeanTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,51 +16,36 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
 
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for the application scoped managed bean resource.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class SingletonDependentBeanTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"alpha", "beta"},
-                {"1", "2"}
-        });
+    public static Stream<Arguments> testData() {
+        return Stream.of(
+                Arguments.of("alpha", "beta"),
+                Arguments.of("1", "2")
+        );
     }
 
-    final String p, x;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param p path parameter.
-     * @param x query parameter.
-     */
-    public SingletonDependentBeanTest(String p, String x) {
-        this.p = p;
-        this.x = x;
-    }
-
-    @Test
-    public void testGet() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testGet(String p, String x) {
         final WebTarget singleton = target().path("jcdibean/dependent/singleton").path(p).queryParam("x", x);
         String s = singleton.request().get(String.class);
         assertThat(s, containsString(singleton.getUri().toString()));
@@ -68,8 +53,9 @@
         assertThat(s, containsString(String.format("queryParam=%s", x)));
     }
 
-    @Test
-    public void testCounter() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testCounter(String p, String x) {
 
         final WebTarget counter = target().path("jcdibean/dependent/singleton").path(p).queryParam("x", x).path("counter");
 
@@ -92,8 +78,9 @@
         counter.request().put(Entity.text("10"));
     }
 
-    @Test
-    public void testException() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testException(String p, String x) {
         final WebTarget exception = target().path("jcdibean/dependent/singleton").path(p).queryParam("x", x).path("exception");
         assertThat(exception.request().get().readEntity(String.class), containsString("JDCIBeanDependentException"));
     }
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/StutterEchoTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/StutterEchoTest.java
index b8655a6..ba2d1fd 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/StutterEchoTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/StutterEchoTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,47 +16,32 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for qualified injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class StutterEchoTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][]{
-            {"alpha", "alphaalpha"},
-            {"gogol", "gogolgogol"},
-            {"elcaro", "elcaroelcaro"}
-        });
-    };
-
-    final String in, out;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param in query parameter.
-     * @param out expected output.
-     */
-    public StutterEchoTest(String in, String out) {
-        this.in = in;
-        this.out = out;
+    public static Stream<Arguments> testData() {
+        return Stream.of(
+            Arguments.of("alpha", "alphaalpha"),
+            Arguments.of("gogol", "gogolgogol"),
+            Arguments.of("elcaro", "elcaroelcaro")
+        );
     }
 
-    @Test
-    public void testGet() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testGet(String in, String out) {
         String s = target().path("stutter").queryParam("s", in).request().get(String.class);
         assertThat(s, equalTo(out));
     }
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TimerTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TimerTest.java
index 94eee9f..ec1b822 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TimerTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TimerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,10 +20,10 @@
 import java.util.logging.Logger;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.hamcrest.CoreMatchers.is;
 
 /**
@@ -47,7 +47,7 @@
         assertThat(secondResponse.getStatus(), is(200));
         long secondMillis = Long.decode(secondResponse.readEntity(String.class));
 
-        assertTrue("Second request should have greater millis!", secondMillis > firstMillis);
+        assertTrue(secondMillis > firstMillis, "Second request should have greater millis!");
     }
 
     private void sleep(long ms) {
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java
index e050cff..0c35ea2 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,51 +18,35 @@
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test custom HK2 injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class CustomInjectionTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected"},
-                {"app-ctor-injected"},
-                {"request-field-injected"},
-                {"request-ctor-injected"},
-        });
-    }
-
-    final String resource;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource query parameter.
-     */
-    public CustomInjectionTest(final String resource) {
-        this.resource = resource;
+    public static Stream<String> testData() {
+        return Stream.of("app-field-injected", "app-ctor-injected", "request-field-injected", "request-ctor-injected");
     }
 
     /**
      * Check that for one no NPE happens on the server side,
      * and the custom bound instance of {@link Hk2InjectedType} gets injected.
      */
-    @Test
-    public void testCustomHk2Injection1() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testCustomHk2Injection1(String resource) {
         final WebTarget target = target().path(resource).path("custom");
         final Response response = target.request().get();
         assertThat(response.getStatus(), equalTo(200));
@@ -73,8 +57,9 @@
      * Check that for one no NPE happens on the server side,
      * and the custom bound instance of {@link MyApplication.MyInjection} gets injected.
      */
-    @Test
-    public void testCustomHk2Injection2() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testCustomHk2Injection2(String resource) {
         final WebTarget target = target().path(resource).path("custom2");
         final Response response = target.request().get();
         assertThat(response.getStatus(), equalTo(200));
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java
index 6319cad..c372fe8 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,53 +16,34 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for exception mapper injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class ExceptionMappersTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected"},
-                {"app-ctor-injected"},
-                {"request-field-injected"},
-                {"request-ctor-injected"},
-        });
-    }
-
-    final String resource;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource query parameter.
-     */
-    public ExceptionMappersTest(final String resource) {
-        this.resource = resource;
+    public static Stream<String> testData() {
+        return Stream.of("app-field-injected", "app-ctor-injected", "request-field-injected", "request-ctor-injected");
     }
 
     /**
      * Check that for one no NPE happens on the server side, and for two
      * the injected mappers remains the same across requests.
      */
-    @Test
-    public void testMappersNotNull() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testMappersNotNull(String resource) {
         final WebTarget target = target().path(resource).path("mappers");
         final Response firstResponse = target.request().get();
         assertThat(firstResponse.getStatus(), equalTo(200));
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java
index c8de729..e27e71e 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,44 +16,24 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for monitoring statistics injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class MonitoringTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected"},
-                {"app-ctor-injected"},
-                {"request-field-injected"},
-                {"request-ctor-injected"}
-        });
-    }
-
-    final String resource;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource uri of resource to be tested.
-     */
-    public MonitoringTest(final String resource) {
-        this.resource = resource;
+    public static Stream<String> testData() {
+        return Stream.of("app-field-injected", "app-ctor-injected", "request-field-injected", "request-ctor-injected");
     }
 
     /**
@@ -61,8 +41,9 @@
      *
      * @throws Exception in case of unexpected test failure.
      */
-    @Test
-    public void testRequestCount() throws Exception {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testRequestCount(String resource) throws Exception {
         final WebTarget target = target().path(resource).path("requestCount");
         Thread.sleep(1000); // this is to allow statistics on the server side to get updated
         final int start = Integer.decode(target.request().get(String.class));
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java
index 93370c5..5c90a3d 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,64 +16,48 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test injection of request depending instances works as expected.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class RequestSensitiveTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected", "alpha", "App: alpha"},
-                {"app-field-injected", "gogol", "App: gogol"},
-                {"app-field-injected", "elcaro", "App: elcaro"},
-                {"app-ctor-injected", "alpha", "App: alpha"},
-                {"app-ctor-injected", "gogol", "App: gogol"},
-                {"app-ctor-injected", "elcaro", "App: elcaro"},
-                {"request-field-injected", "alpha", "Request: alpha"},
-                {"request-field-injected", "gogol", "Request: gogol"},
-                {"request-field-injected", "oracle", "Request: oracle"},
-                {"request-ctor-injected", "alpha", "Request: alpha"},
-                {"request-ctor-injected", "gogol", "Request: gogol"},
-                {"request-ctor-injected", "oracle", "Request: oracle"}
-        });
+    public static Stream<Arguments> testData() {
+        return Stream.of(
+                Arguments.of("app-field-injected", "alpha", "App: alpha"),
+                Arguments.of("app-field-injected", "gogol", "App: gogol"),
+                Arguments.of("app-field-injected", "elcaro", "App: elcaro"),
+                Arguments.of("app-ctor-injected", "alpha", "App: alpha"),
+                Arguments.of("app-ctor-injected", "gogol", "App: gogol"),
+                Arguments.of("app-ctor-injected", "elcaro", "App: elcaro"),
+                Arguments.of("request-field-injected", "alpha", "Request: alpha"),
+                Arguments.of("request-field-injected", "gogol", "Request: gogol"),
+                Arguments.of("request-field-injected", "oracle", "Request: oracle"),
+                Arguments.of("request-ctor-injected", "alpha", "Request: alpha"),
+                Arguments.of("request-ctor-injected", "gogol", "Request: gogol"),
+                Arguments.of("request-ctor-injected", "oracle", "Request: oracle")
+        );
     }
 
-    final String resource, straight, echoed;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource uri of the resource to be tested.
-     * @param straight request specific input.
-     * @param echoed   CDI injected service should produce this out of previous, straight, parameter.
-     */
-    public RequestSensitiveTest(final String resource, final String straight, final String echoed) {
-        this.resource = resource;
-        this.straight = straight;
-        this.echoed = echoed;
-    }
-
-    @Test
-    public void testCdiInjection() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testCdiInjection(String resource, String straight, String echoed) {
         final String s = target().path(resource).queryParam("s", straight).request().get(String.class);
         assertThat(s, equalTo(echoed));
     }
 
-    @Test
-    public void testHk2Injection() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testHk2Injection(String resource, String straight, String echoed) {
         final String s = target().path(resource).path("path").path(straight).request().get(String.class);
         assertThat(s, equalTo(String.format("%s/path/%s", resource, straight)));
     }
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
index 2399a21..411b1d1 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,7 +33,7 @@
  *
  * @author Jakub Podlesak
  */
-public class CdiTest extends JerseyTest {
+public abstract class CdiTest extends JerseyTest {
 
     @Override
     protected Application configure() {
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java
index ccdd993..6c7faa0 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,68 +16,73 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
+
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test custom HK2 injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
-public class CustomInjectionTest extends CdiTest {
+public class CustomInjectionTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected"},
-                {"app-ctor-injected"},
-                {"request-field-injected"},
-                {"request-ctor-injected"},
-        });
+    public static List<String> testData() {
+        return Arrays.asList("app-field-injected", "app-ctor-injected", "request-field-injected", "request-ctor-injected");
     }
 
-    final String resource;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource query parameter.
-     */
-    public CustomInjectionTest(final String resource) {
-        this.resource = resource;
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        for (String resource : testData()) {
+            CustomInjectionTemplateTest test = new CustomInjectionTemplateTest(resource) {};
+            tests.add(TestHelper.toTestContainer(test,
+                    String.format("%s (%s)", CustomInjectionTemplateTest.class.getSimpleName(), resource)));
+        }
+        return tests;
     }
 
-    /**
-     * Check that for one no NPE happens on the server side,
-     * and the custom bound instance of {@link CdiInjectedType} gets CDI injected.
-     */
-    @Test
-    public void testCustomHk2Injection1() {
-        final WebTarget target = target().path(resource).path("custom");
-        final Response response = target.request().get();
-        assertThat(response.getStatus(), equalTo(200));
-        assertThat(response.readEntity(String.class), equalTo("CDI injected"));
-    }
+    public abstract static class CustomInjectionTemplateTest extends CdiTest {
+        String resource;
 
-    /**
-     * Check that for one no NPE happens on the server side,
-     * and the custom bound instance of {@link MyApplication.MyInjection} gets CDI injected.
-     */
-    @Test
-    public void testCustomHk2Injection2() {
-        final WebTarget target = target().path(resource).path("custom2");
-        final Response response = target.request().get();
-        assertThat(response.getStatus(), equalTo(200));
-        assertThat(response.readEntity(String.class), equalTo("CDI would love this"));
+        public CustomInjectionTemplateTest(String resource) {
+            this.resource = resource;
+        }
+
+        /**
+         * Check that for one no NPE happens on the server side,
+         * and the custom bound instance of {@link CdiInjectedType} gets CDI injected.
+         */
+        @Test
+        public void testCustomHk2Injection1() {
+            final WebTarget target = target().path(resource).path("custom");
+            final Response response = target.request().get();
+            assertThat(response.getStatus(), equalTo(200));
+            assertThat(response.readEntity(String.class), equalTo("CDI injected"));
+        }
+
+        /**
+         * Check that for one no NPE happens on the server side,
+         * and the custom bound instance of {@link MyApplication.MyInjection} gets CDI injected.
+         */
+        @Test
+        public void testCustomHk2Injection2(String resource) {
+            final WebTarget target = target().path(resource).path("custom2");
+            final Response response = target.request().get();
+            assertThat(response.getStatus(), equalTo(200));
+            assertThat(response.readEntity(String.class), equalTo("CDI would love this"));
+        }
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java
index 00001e0..878aec1 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,57 +16,60 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
+import java.util.Collection;
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for exception mapper injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
-public class ExceptionMappersTest extends CdiTest {
+public class ExceptionMappersTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected"},
-                {"app-ctor-injected"},
-                {"request-field-injected"},
-                {"request-ctor-injected"}
-        });
+    public static Collection<String> testData() {
+        return Arrays.asList("app-field-injected", "app-ctor-injected", "request-field-injected", "request-ctor-injected");
     }
 
-    final String resource;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource query parameter.
-     */
-    public ExceptionMappersTest(final String resource) {
-        this.resource = resource;
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        for (String resource : testData()) {
+            ExceptionMappersTemplateTest test = new ExceptionMappersTemplateTest(resource) {};
+            tests.add(TestHelper.toTestContainer(test,
+                    String.format("%s (%s)", ExceptionMappersTemplateTest.class.getSimpleName(), resource)));
+        }
+        return tests;
     }
 
-    /**
-     * Check that for one no NPE happens on the server side, and for two
-     * the injected mappers remains the same across requests.
-     */
-    @Test
-    public void testMappersNotNull() {
-        final WebTarget target = target().path(resource).path("mappers");
-        final Response firstResponse = target.request().get();
-        assertThat(firstResponse.getStatus(), equalTo(200));
-        final String firstValue = firstResponse.readEntity(String.class);
-        assertThat(target.request().get(String.class), equalTo(firstValue));
+    public abstract static class ExceptionMappersTemplateTest extends CdiTest {
+        String resource;
+
+        public ExceptionMappersTemplateTest(String resource) {
+            this.resource = resource;
+        }
+
+        /**
+         * Check that for one no NPE happens on the server side, and for two
+         * the injected mappers remains the same across requests.
+         */
+        @Test
+        public void testMappersNotNull() {
+            final WebTarget target = target().path(resource).path("mappers");
+            final Response firstResponse = target.request().get();
+            assertThat(firstResponse.getStatus(), equalTo(200));
+            final String firstValue = firstResponse.readEntity(String.class);
+            assertThat(target.request().get(String.class), equalTo(firstValue));
+        }
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java
index c8de729..52a64e3 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,60 +16,63 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
+import java.util.Collection;
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for monitoring statistics injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
-public class MonitoringTest extends CdiTest {
+public class MonitoringTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected"},
-                {"app-ctor-injected"},
-                {"request-field-injected"},
-                {"request-ctor-injected"}
-        });
+    public static Collection<String> testData() {
+        return Arrays.asList("app-field-injected", "app-ctor-injected", "request-field-injected", "request-ctor-injected");
     }
 
-    final String resource;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource uri of resource to be tested.
-     */
-    public MonitoringTest(final String resource) {
-        this.resource = resource;
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        for (String resource : testData()) {
+            MonitoringTemplateTest test = new MonitoringTemplateTest(resource) {};
+            tests.add(TestHelper.toTestContainer(test,
+                    String.format("%s (%s)", MonitoringTemplateTest.class.getSimpleName(), resource)));
+        }
+        return tests;
     }
 
-    /**
-     * Make several requests and check the counter keeps incrementing.
-     *
-     * @throws Exception in case of unexpected test failure.
-     */
-    @Test
-    public void testRequestCount() throws Exception {
-        final WebTarget target = target().path(resource).path("requestCount");
-        Thread.sleep(1000); // this is to allow statistics on the server side to get updated
-        final int start = Integer.decode(target.request().get(String.class));
-        for (int i = 1; i < 4; i++) {
+    public abstract static class MonitoringTemplateTest extends CdiTest {
+        String resource;
+
+        public MonitoringTemplateTest(String resource) {
+            this.resource = resource;
+        }
+
+        /**
+         * Make several requests and check the counter keeps incrementing.
+         *
+         * @throws Exception in case of unexpected test failure.
+         */
+        @Test
+        public void testRequestCount() throws Exception {
+            final WebTarget target = target().path(resource).path("requestCount");
             Thread.sleep(1000); // this is to allow statistics on the server side to get updated
-            final int next = Integer.decode(target.request().get(String.class));
-            assertThat(String.format("testing %s", resource), next, equalTo(start + i));
+            final int start = Integer.decode(target.request().get(String.class));
+            for (int i = 1; i < 4; i++) {
+                Thread.sleep(1000); // this is to allow statistics on the server side to get updated
+                final int next = Integer.decode(target.request().get(String.class));
+                assertThat(String.format("testing %s", resource), next, equalTo(start + i));
+            }
         }
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java
index 93370c5..d8f18df 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,65 +16,73 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
+import java.util.Collection;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.glassfish.jersey.test.spi.TestHelper;
+import org.junit.jupiter.api.DynamicContainer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test injection of request depending instances works as expected.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
-public class RequestSensitiveTest extends CdiTest {
+public class RequestSensitiveTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected", "alpha", "App: alpha"},
-                {"app-field-injected", "gogol", "App: gogol"},
-                {"app-field-injected", "elcaro", "App: elcaro"},
-                {"app-ctor-injected", "alpha", "App: alpha"},
-                {"app-ctor-injected", "gogol", "App: gogol"},
-                {"app-ctor-injected", "elcaro", "App: elcaro"},
-                {"request-field-injected", "alpha", "Request: alpha"},
-                {"request-field-injected", "gogol", "Request: gogol"},
-                {"request-field-injected", "oracle", "Request: oracle"},
-                {"request-ctor-injected", "alpha", "Request: alpha"},
-                {"request-ctor-injected", "gogol", "Request: gogol"},
-                {"request-ctor-injected", "oracle", "Request: oracle"}
-        });
+    public static Collection<String[]> testData() {
+        return Arrays.asList(
+                new String[] {"app-field-injected", "alpha", "App: alpha"},
+                new String[] {"app-field-injected", "gogol", "App: gogol"},
+                new String[] {"app-field-injected", "elcaro", "App: elcaro"},
+                new String[] {"app-ctor-injected", "alpha", "App: alpha"},
+                new String[] {"app-ctor-injected", "gogol", "App: gogol"},
+                new String[] {"app-ctor-injected", "elcaro", "App: elcaro"},
+                new String[] {"request-field-injected", "alpha", "Request: alpha"},
+                new String[] {"request-field-injected", "gogol", "Request: gogol"},
+                new String[] {"request-field-injected", "oracle", "Request: oracle"},
+                new String[] {"request-ctor-injected", "alpha", "Request: alpha"},
+                new String[] {"request-ctor-injected", "gogol", "Request: gogol"},
+                new String[] {"request-ctor-injected", "oracle", "Request: oracle"}
+        );
     }
 
-    final String resource, straight, echoed;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource uri of the resource to be tested.
-     * @param straight request specific input.
-     * @param echoed   CDI injected service should produce this out of previous, straight, parameter.
-     */
-    public RequestSensitiveTest(final String resource, final String straight, final String echoed) {
-        this.resource = resource;
-        this.straight = straight;
-        this.echoed = echoed;
+    @TestFactory
+    public Collection<DynamicContainer> generateTests() {
+        Collection<DynamicContainer> tests = new ArrayList<>();
+        for (String[] args : testData()) {
+            RequestSensitiveTemplateTest test = new RequestSensitiveTemplateTest(args[0], args[1], args[2]) {};
+            tests.add(TestHelper.toTestContainer(test,
+                    String.format("%s (%s)", RequestSensitiveTemplateTest.class.getSimpleName(), Arrays.toString(args))));
+        }
+        return tests;
     }
 
-    @Test
-    public void testCdiInjection() {
-        final String s = target().path(resource).queryParam("s", straight).request().get(String.class);
-        assertThat(s, equalTo(echoed));
-    }
+    public abstract static class RequestSensitiveTemplateTest extends CdiTest {
+        String resource;
+        String straight;
+        String echoed;
 
-    @Test
-    public void testHk2Injection() {
-        final String s = target().path(resource).path("path").path(straight).request().get(String.class);
-        assertThat(s, equalTo(String.format("%s/path/%s", resource, straight)));
+        public RequestSensitiveTemplateTest(String resource, String straight, String echoed) {
+            this.resource = resource;
+            this.straight = straight;
+            this.echoed = echoed;
+        }
+
+        @Test
+        public void testCdiInjection() {
+            final String s = target().path(resource).queryParam("s", straight).request().get(String.class);
+            assertThat(s, equalTo(echoed));
+        }
+
+        @Test
+        public void testHk2Injection() {
+            final String s = target().path(resource).path("path").path(straight).request().get(String.class);
+            assertThat(s, equalTo(String.format("%s/path/%s", resource, straight)));
+        }
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java
index ffc79ad..2225702 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CustomInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,53 +16,34 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test custom HK2 injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class CustomInjectionTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected"},
-                {"app-ctor-injected"},
-                {"request-field-injected"},
-                {"request-ctor-injected"}
-        });
-    }
-
-    final String resource;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource query parameter.
-     */
-    public CustomInjectionTest(String resource) {
-        this.resource = resource;
+    public static Stream<String> testData() {
+        return Stream.of("app-field-injected", "app-ctor-injected", "request-field-injected", "request-ctor-injected");
     }
 
     /**
      * Check that for one no NPE happens on the server side,
      * and the custom bound instance gets injected.
      */
-    @Test
-    public void testCustomHk2InjectionNull() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testCustomHk2InjectionNull(String resource) {
         WebTarget target = target().path(resource).path("custom");
         final Response response = target.request().get();
         assertThat(response.getStatus(), equalTo(200));
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java
index 0dc333d..8eb9726 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ExceptionMappersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,53 +16,34 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for exception mapper injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class ExceptionMappersTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected"},
-                {"app-ctor-injected"},
-                {"request-field-injected"},
-                {"request-ctor-injected"}
-        });
-    }
-
-    final String resource;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource query parameter.
-     */
-    public ExceptionMappersTest(String resource) {
-        this.resource = resource;
+    public static Stream<String> testData() {
+        return Stream.of("app-field-injected", "app-ctor-injected", "request-field-injected", "request-ctor-injected");
     }
 
     /**
      * Check that for one no NPE happens on the server side, and for two
      * the injected mappers remains the same across requests.
      */
-    @Test
-    public void testMappersNotNull() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testMappersNotNull(String resource) {
         WebTarget target = target().path(resource).path("mappers");
         final Response firstResponse = target.request().get();
         assertThat(firstResponse.getStatus(), equalTo(200));
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java
index ff7de39..0835dfa 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/MonitoringTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,33 +16,24 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test for monitoring statistics injection.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class MonitoringTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected"},
-                {"app-ctor-injected"},
-                {"request-field-injected"},
-                {"request-ctor-injected"}
-        });
+    public static Stream<String> testData() {
+        return Stream.of("app-field-injected", "app-ctor-injected", "request-field-injected", "request-ctor-injected");
     }
 
     final String resource;
@@ -61,8 +52,9 @@
      *
      * @throws Exception in case of unexpected test failure.
      */
-    @Test
-    public void testRequestCount() throws Exception {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testRequestCount(String resource) throws Exception {
         WebTarget target = target().path(resource).path("requestCount");
         Thread.sleep(1000); // this is to allow statistics on the server side to get updated
         int start = Integer.decode(target.request().get(String.class));
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java
index 930eb37..1ac7e2a 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/RequestSensitiveTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,64 +16,48 @@
 
 package org.glassfish.jersey.tests.cdi.resources;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Test injection of request depending instances works as expected.
  *
  * @author Jakub Podlesak
  */
-@RunWith(Parameterized.class)
 public class RequestSensitiveTest extends CdiTest {
 
-    @Parameterized.Parameters
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"app-field-injected", "alpha", "App: alpha"},
-                {"app-field-injected", "gogol", "App: gogol"},
-                {"app-field-injected", "elcaro", "App: elcaro"},
-                {"app-ctor-injected", "alpha", "App: alpha"},
-                {"app-ctor-injected", "gogol", "App: gogol"},
-                {"app-ctor-injected", "elcaro", "App: elcaro"},
-                {"request-field-injected", "alpha", "Request: alpha"},
-                {"request-field-injected", "gogol", "Request: gogol"},
-                {"request-field-injected", "oracle", "Request: oracle"},
-                {"request-ctor-injected", "alpha", "Request: alpha"},
-                {"request-ctor-injected", "gogol", "Request: gogol"},
-                {"request-ctor-injected", "oracle", "Request: oracle"}
-        });
+    public static Stream<Arguments> testData() {
+        return Stream.of(
+                Arguments.of("app-field-injected", "alpha", "App: alpha"),
+                Arguments.of("app-field-injected", "gogol", "App: gogol"),
+                Arguments.of("app-field-injected", "elcaro", "App: elcaro"),
+                Arguments.of("app-ctor-injected", "alpha", "App: alpha"),
+                Arguments.of("app-ctor-injected", "gogol", "App: gogol"),
+                Arguments.of("app-ctor-injected", "elcaro", "App: elcaro"),
+                Arguments.of("request-field-injected", "alpha", "Request: alpha"),
+                Arguments.of("request-field-injected", "gogol", "Request: gogol"),
+                Arguments.of("request-field-injected", "oracle", "Request: oracle"),
+                Arguments.of("request-ctor-injected", "alpha", "Request: alpha"),
+                Arguments.of("request-ctor-injected", "gogol", "Request: gogol"),
+                Arguments.of("request-ctor-injected", "oracle", "Request: oracle")
+        );
     }
 
-    final String resource, straight, echoed;
-
-    /**
-     * Construct instance with the above test data injected.
-     *
-     * @param resource uri of the resource to be tested.
-     * @param straight request specific input.
-     * @param echoed CDI injected service should produce this out of previous, straight, parameter.
-     */
-    public RequestSensitiveTest(String resource, String straight, String echoed) {
-        this.resource = resource;
-        this.straight = straight;
-        this.echoed = echoed;
-    }
-
-    @Test
-    public void testCdiInjection() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testCdiInjection(String resource, String straight, String echoed) {
         String s = target().path(resource).queryParam("s", straight).request().get(String.class);
         assertThat(s, equalTo(echoed));
     }
 
-    @Test
-    public void testHk2Injection() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testHk2Injection(String resource, String straight, String echoed) {
         String s = target().path(resource).path("path").path(straight).request().get(String.class);
         assertThat(s, equalTo(String.format("%s/path/%s", resource, straight)));
     }
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedApplicationInjectTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedApplicationInjectTest.java
index 95c0ae1..fe9a307 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedApplicationInjectTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedApplicationInjectTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,10 +25,11 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -36,11 +37,12 @@
 public class NonScopedApplicationInjectTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -50,6 +52,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -80,7 +83,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("nonscoped").path("inject").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 
@@ -89,7 +92,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("nonscoped").path("context").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 }
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedInjectionTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedInjectionTest.java
index acb77b4..35b6bc9 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedInjectionTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,10 +25,11 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -36,11 +37,12 @@
 public class NonScopedInjectionTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -50,6 +52,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -81,7 +84,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("nonscope").path("injected").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 
@@ -90,7 +93,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("nonscope").path("contexted").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 
@@ -99,7 +102,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("nonexisting").path("contexted").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.EXPECTATION_FAILED.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.EXPECTATION_FAILED.getStatusCode(), r.getStatus());
         }
     }
 
@@ -108,7 +111,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("nonexisting").path("injected").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.EXPECTATION_FAILED.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.EXPECTATION_FAILED.getStatusCode(), r.getStatus());
         }
     }
 
@@ -117,7 +120,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("nonscope").path("iae").path("injected").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 
@@ -126,7 +129,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("nonscope").path("iae").path("contexted").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 }
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedApplicationInjectTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedApplicationInjectTest.java
index 155c80a..2d02d15 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedApplicationInjectTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedApplicationInjectTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,10 +25,11 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -36,11 +37,12 @@
 public class ScopedApplicationInjectTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -50,6 +52,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -80,7 +83,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("scoped").path("inject").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 
@@ -89,7 +92,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("scoped").path("context").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 }
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedInjectionTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedInjectionTest.java
index fc15cb1..91da432 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedInjectionTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedInjectionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,10 +25,11 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -36,11 +37,12 @@
 public class ScopedInjectionTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -50,6 +52,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -80,7 +83,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("scope").path("injected").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 
@@ -89,7 +92,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("scope").path("contexted").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 
@@ -98,7 +101,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("nonexisting").path("contexted").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.EXPECTATION_FAILED.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.EXPECTATION_FAILED.getStatusCode(), r.getStatus());
         }
     }
 
@@ -107,7 +110,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("nonexisting").path("injected").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.EXPECTATION_FAILED.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.EXPECTATION_FAILED.getStatusCode(), r.getStatus());
         }
     }
 
@@ -116,7 +119,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("scope").path("iae").path("injected").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 
@@ -125,7 +128,7 @@
         try (Response r = target(InjectionChecker.ROOT).path("scope").path("iae").path("contexted").request()
                 .header(InjectionChecker.HEADER, InjectionChecker.HEADER).get()) {
             System.out.println(r.readEntity(String.class));
-            Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            Assertions.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
         }
     }
 }
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ServletTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ServletTest.java
index c3a77c7..b0f2a19 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ServletTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ServletTest.java
@@ -25,10 +25,11 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
@@ -36,12 +37,13 @@
 public class ServletTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
     @Override
+    @BeforeEach
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
             weld = new Weld();
@@ -51,6 +53,7 @@
     }
 
     @Override
+    @AfterEach
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
             weld.shutdown();
@@ -81,7 +84,7 @@
             if (response.getStatus() != Response.Status.OK.getStatusCode()) {
                 System.out.println(response.readEntity(String.class));
             }
-            Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
+            Assertions.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
         }
     }
 
@@ -92,7 +95,7 @@
             if (response.getStatus() != Response.Status.OK.getStatusCode()) {
                 System.out.println(response.readEntity(String.class));
             }
-            Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
+            Assertions.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
         }
     }
 
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/SseTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/SseTest.java
index 331cf3b..8ed3e31 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/SseTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/SseTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,10 +25,11 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
@@ -44,11 +45,12 @@
 public class SseTest extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -58,6 +60,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -112,19 +115,19 @@
             });
             source.open();
             registerLatch.await(5000, TimeUnit.MILLISECONDS);
-            Assert.assertEquals(0, registerLatch.getCount());
+            Assertions.assertEquals(0, registerLatch.getCount());
 
             try (Response response = target(InjectionChecker.ROOT).path("broadcast").path(injectType)
                     .request()
                     .post(Entity.entity(entity, MediaType.MULTIPART_FORM_DATA_TYPE))) {
                 String readEntity = response.readEntity(String.class);
                 // System.out.println(readEntity);
-                Assert.assertEquals(readEntity, response.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
+                Assertions.assertEquals(response.getStatus(), Response.Status.NO_CONTENT.getStatusCode(), readEntity);
 
             }
             broadcastLatch.await(5000, TimeUnit.MILLISECONDS);
         }
-        Assert.assertTrue(byteArrayOutputStream.toString().contains(entity));
-        Assert.assertEquals(0, broadcastLatch.getCount());
+        Assertions.assertTrue(byteArrayOutputStream.toString().contains(entity));
+        Assertions.assertEquals(0, broadcastLatch.getCount());
     }
 }
diff --git a/tests/integration/cdi-integration/gf-cdi-inject/pom.xml b/tests/integration/cdi-integration/gf-cdi-inject/pom.xml
index dc889cf..2227989 100644
--- a/tests/integration/cdi-integration/gf-cdi-inject/pom.xml
+++ b/tests/integration/cdi-integration/gf-cdi-inject/pom.xml
@@ -34,14 +34,12 @@
         <glassfish.home>${project.build.directory}/payara5</glassfish.home>
         <modules.dir>${glassfish.home}/glassfish/modules</modules.dir>
         <glassfish.container.version>${gf.impl.version}</glassfish.container.version>
-        <junit.jupiter.version>5.7.2</junit.jupiter.version>
     </properties>
 
     <dependencies>
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter</artifactId>
-            <version>${junit.jupiter.version}</version>
             <scope>test</scope>
         </dependency>
 
@@ -79,7 +77,7 @@
         <dependency>
             <groupId>org.jboss.arquillian.junit5</groupId>
             <artifactId>arquillian-junit5-container</artifactId>
-            <version>1.7.0.Alpha10</version>
+            <version>1.7.0.Alpha12</version>
             <scope>test</scope>
         </dependency>
 
diff --git a/tests/integration/client-connector-provider/src/test/java/org/glassfish/jersey/tests/integration/client/connector/provider/CustomConnectorProviderTest.java b/tests/integration/client-connector-provider/src/test/java/org/glassfish/jersey/tests/integration/client/connector/provider/CustomConnectorProviderTest.java
index 677cc27..a86d98a 100644
--- a/tests/integration/client-connector-provider/src/test/java/org/glassfish/jersey/tests/integration/client/connector/provider/CustomConnectorProviderTest.java
+++ b/tests/integration/client-connector-provider/src/test/java/org/glassfish/jersey/tests/integration/client/connector/provider/CustomConnectorProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,10 +21,10 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/ejb-multimodule-reload/war1/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/reload/web1/ReloadTest.java b/tests/integration/ejb-multimodule-reload/war1/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/reload/web1/ReloadTest.java
index 0fcfe45..ab5956a 100644
--- a/tests/integration/ejb-multimodule-reload/war1/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/reload/web1/ReloadTest.java
+++ b/tests/integration/ejb-multimodule-reload/war1/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/reload/web1/ReloadTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,7 +24,7 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/integration/ejb-multimodule-reload/war2/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/reload/web2/JaxRsFromEjbLibraryTest.java b/tests/integration/ejb-multimodule-reload/war2/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/reload/web2/JaxRsFromEjbLibraryTest.java
index 58ee352..f751078 100644
--- a/tests/integration/ejb-multimodule-reload/war2/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/reload/web2/JaxRsFromEjbLibraryTest.java
+++ b/tests/integration/ejb-multimodule-reload/war2/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/reload/web2/JaxRsFromEjbLibraryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/integration/ejb-multimodule/war/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/web1/JaxRsFromEjbLibraryTest.java b/tests/integration/ejb-multimodule/war/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/web1/JaxRsFromEjbLibraryTest.java
index a2dbf02..f69a61e 100644
--- a/tests/integration/ejb-multimodule/war/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/web1/JaxRsFromEjbLibraryTest.java
+++ b/tests/integration/ejb-multimodule/war/src/test/java/org/glassfish/jersey/tests/integration/multimodule/ejb/web1/JaxRsFromEjbLibraryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/integration/ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/ejb/resources/EjbTest.java b/tests/integration/ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/ejb/resources/EjbTest.java
index 777d28d..83c41a4 100644
--- a/tests/integration/ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/ejb/resources/EjbTest.java
+++ b/tests/integration/ejb-test-webapp/src/test/java/org/glassfish/jersey/tests/ejb/resources/EjbTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,7 +26,7 @@
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.endsWith;
 import static org.hamcrest.CoreMatchers.is;
diff --git a/tests/integration/externalproperties/pom.xml b/tests/integration/externalproperties/pom.xml
index 05e8225..519e3b0 100644
--- a/tests/integration/externalproperties/pom.xml
+++ b/tests/integration/externalproperties/pom.xml
@@ -33,8 +33,8 @@
 
     <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/tests/integration/externalproperties/src/test/java/org/glassfish/jersey/tests/externalproperties/HttpProxyTest.java b/tests/integration/externalproperties/src/test/java/org/glassfish/jersey/tests/externalproperties/HttpProxyTest.java
index f74a55d..56792d3 100644
--- a/tests/integration/externalproperties/src/test/java/org/glassfish/jersey/tests/externalproperties/HttpProxyTest.java
+++ b/tests/integration/externalproperties/src/test/java/org/glassfish/jersey/tests/externalproperties/HttpProxyTest.java
@@ -22,9 +22,9 @@
 import org.glassfish.jersey.ExternalProperties;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -54,7 +54,7 @@
         return new ResourceConfig(ProxyTestResource.class);
     }
 
-    @Before
+    @BeforeEach
     public void startFakeProxy() {
         System.setProperty(ExternalProperties.HTTP_PROXY_HOST, PROXY_HOST);
         System.setProperty(ExternalProperties.HTTP_PROXY_PORT, PROXY_PORT);
@@ -73,7 +73,7 @@
 
         Response response = target("resource").request().get();
 
-        Assert.assertEquals(407, response.getStatus());
+        Assertions.assertEquals(407, response.getStatus());
     }
 
     @Test
@@ -82,9 +82,9 @@
 
         Response response = target("resource").request().get();
 
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("OK", response.readEntity(String.class));
-        Assert.assertFalse(proxyHit);
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("OK", response.readEntity(String.class));
+        Assertions.assertFalse(proxyHit);
     }
 
     class ProxyHandler extends AbstractHandler {
diff --git a/tests/integration/j-376/src/test/java/org/glassfish/jersey/tests/integration/j376/J376Test.java b/tests/integration/j-376/src/test/java/org/glassfish/jersey/tests/integration/j376/J376Test.java
index 91b6c50..784069d 100644
--- a/tests/integration/j-376/src/test/java/org/glassfish/jersey/tests/integration/j376/J376Test.java
+++ b/tests/integration/j-376/src/test/java/org/glassfish/jersey/tests/integration/j376/J376Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,11 +22,11 @@
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Adam Lindenthal
@@ -35,12 +35,12 @@
     final Client client = ClientBuilder.newClient();
     final WebTarget target = client.target(GrizzlyApp.getBaseUri());
 
-    @BeforeClass
+    @BeforeAll
     public static void setUpTest() {
         GrizzlyApp.start();
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDownTest() {
         GrizzlyApp.stop();
     }
diff --git a/tests/integration/j-441/war1/src/test/java/org/glassfish/jersey/tests/integration/j441/one/ContextPathTest.java b/tests/integration/j-441/war1/src/test/java/org/glassfish/jersey/tests/integration/j441/one/ContextPathTest.java
index 285859e..d6320f6 100644
--- a/tests/integration/j-441/war1/src/test/java/org/glassfish/jersey/tests/integration/j441/one/ContextPathTest.java
+++ b/tests/integration/j-441/war1/src/test/java/org/glassfish/jersey/tests/integration/j441/one/ContextPathTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,7 +23,7 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/integration/j-441/war2/src/test/java/org/glassfish/jersey/tests/integration/j441/two/ContextPathTest.java b/tests/integration/j-441/war2/src/test/java/org/glassfish/jersey/tests/integration/j441/two/ContextPathTest.java
index bb4f68b..b7b2c78 100644
--- a/tests/integration/j-441/war2/src/test/java/org/glassfish/jersey/tests/integration/j441/two/ContextPathTest.java
+++ b/tests/integration/j-441/war2/src/test/java/org/glassfish/jersey/tests/integration/j441/two/ContextPathTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,7 +23,7 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/integration/j-59/war/src/test/java/org/glassfish/jersey/tests/integration/j59/cdi/web/NameBeanTest.java b/tests/integration/j-59/war/src/test/java/org/glassfish/jersey/tests/integration/j59/cdi/web/NameBeanTest.java
index 8335282..8a1abf8 100644
--- a/tests/integration/j-59/war/src/test/java/org/glassfish/jersey/tests/integration/j59/cdi/web/NameBeanTest.java
+++ b/tests/integration/j-59/war/src/test/java/org/glassfish/jersey/tests/integration/j59/cdi/web/NameBeanTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,7 +24,7 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
diff --git a/tests/integration/jaxrs-component-inject/src/test/java/org/glassfish/jersey/tests/jaxrs/inject/ApplicationInjectITCase.java b/tests/integration/jaxrs-component-inject/src/test/java/org/glassfish/jersey/tests/jaxrs/inject/ApplicationInjectITCase.java
index 50c1ff8..f68c289 100644
--- a/tests/integration/jaxrs-component-inject/src/test/java/org/glassfish/jersey/tests/jaxrs/inject/ApplicationInjectITCase.java
+++ b/tests/integration/jaxrs-component-inject/src/test/java/org/glassfish/jersey/tests/jaxrs/inject/ApplicationInjectITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests {@link javax.ws.rs.core.Context} injection into JAX-RS components Provider, Resource, Application.
diff --git a/tests/integration/jersey-1107/src/test/java/org/glassfish/jersey/tests/integration/jersey1107/ApplicationHandlerITCase.java b/tests/integration/jersey-1107/src/test/java/org/glassfish/jersey/tests/integration/jersey1107/ApplicationHandlerITCase.java
index 11cb216..28420c6 100644
--- a/tests/integration/jersey-1107/src/test/java/org/glassfish/jersey/tests/integration/jersey1107/ApplicationHandlerITCase.java
+++ b/tests/integration/jersey-1107/src/test/java/org/glassfish/jersey/tests/integration/jersey1107/ApplicationHandlerITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,9 +30,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests for JERSEY-1107: Thread gets stuck if no MessageBodyWriter is found in ApplicationHandler#writeResponse.
diff --git a/tests/integration/jersey-1223/src/test/java/org/glassfish/jersey/tests/integration/jersey1223/ApplicationHandlerITCase.java b/tests/integration/jersey-1223/src/test/java/org/glassfish/jersey/tests/integration/jersey1223/ApplicationHandlerITCase.java
index 6ea3471..a198102 100644
--- a/tests/integration/jersey-1223/src/test/java/org/glassfish/jersey/tests/integration/jersey1223/ApplicationHandlerITCase.java
+++ b/tests/integration/jersey-1223/src/test/java/org/glassfish/jersey/tests/integration/jersey1223/ApplicationHandlerITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests JERSEY issue 1223.
diff --git a/tests/integration/jersey-1604/src/test/java/org/glassfish/jersey/tests/integration/jersey1604/ConnectionCloseITCase.java b/tests/integration/jersey-1604/src/test/java/org/glassfish/jersey/tests/integration/jersey1604/ConnectionCloseITCase.java
index 067cbff..b4e79b8 100644
--- a/tests/integration/jersey-1604/src/test/java/org/glassfish/jersey/tests/integration/jersey1604/ConnectionCloseITCase.java
+++ b/tests/integration/jersey-1604/src/test/java/org/glassfish/jersey/tests/integration/jersey1604/ConnectionCloseITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,7 +26,7 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/integration/jersey-1667/src/test/java/org/glassfish/jersey/tests/integration/jersey1667/Jersey1667ITCase.java b/tests/integration/jersey-1667/src/test/java/org/glassfish/jersey/tests/integration/jersey1667/Jersey1667ITCase.java
index 4e9523e..0475085 100644
--- a/tests/integration/jersey-1667/src/test/java/org/glassfish/jersey/tests/integration/jersey1667/Jersey1667ITCase.java
+++ b/tests/integration/jersey-1667/src/test/java/org/glassfish/jersey/tests/integration/jersey1667/Jersey1667ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,7 +35,7 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/integration/jersey-1829/src/test/java/org/glassfish/jersey/tests/integration/jersey1829/ApplicationHandlerITCase.java b/tests/integration/jersey-1829/src/test/java/org/glassfish/jersey/tests/integration/jersey1829/ApplicationHandlerITCase.java
index 11f81af..b983ea2 100644
--- a/tests/integration/jersey-1829/src/test/java/org/glassfish/jersey/tests/integration/jersey1829/ApplicationHandlerITCase.java
+++ b/tests/integration/jersey-1829/src/test/java/org/glassfish/jersey/tests/integration/jersey1829/ApplicationHandlerITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests JERSEY issue 1744. Custom status reason phrase returned from the resource method was not propagated out of the
@@ -48,15 +48,15 @@
     @Test
     public void testCustomResponse428() {
         final Response response = target().path("resource/428").request().get();
-        Assert.assertEquals(428, response.getStatusInfo().getStatusCode());
-        Assert.assertEquals("my-phrase", response.getStatusInfo().getReasonPhrase());
+        Assertions.assertEquals(428, response.getStatusInfo().getStatusCode());
+        Assertions.assertEquals("my-phrase", response.getStatusInfo().getReasonPhrase());
     }
 
     @Test
     public void testCustomResponse428WithEntity() {
         final Response response = target().path("resource/428-entity").request().get();
-        Assert.assertEquals(428, response.getStatusInfo().getStatusCode());
-        Assert.assertEquals("my-phrase", response.getStatusInfo().getReasonPhrase());
+        Assertions.assertEquals(428, response.getStatusInfo().getStatusCode());
+        Assertions.assertEquals("my-phrase", response.getStatusInfo().getReasonPhrase());
 
     }
 }
diff --git a/tests/integration/jersey-1883/src/test/java/org/glassfish/jersey/tests/integration/jersey1883/Jersey1883ITCase.java b/tests/integration/jersey-1883/src/test/java/org/glassfish/jersey/tests/integration/jersey1883/Jersey1883ITCase.java
index 703543d..9e0610e 100644
--- a/tests/integration/jersey-1883/src/test/java/org/glassfish/jersey/tests/integration/jersey1883/Jersey1883ITCase.java
+++ b/tests/integration/jersey-1883/src/test/java/org/glassfish/jersey/tests/integration/jersey1883/Jersey1883ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,9 +26,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -37,9 +37,9 @@
  */
 public class Jersey1883ITCase extends JerseyTest {
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
     @Override
diff --git a/tests/integration/jersey-1928/src/test/java/org/glassfish/jersey/tests/integration/jersey1928/Jersey1928ITCase.java b/tests/integration/jersey-1928/src/test/java/org/glassfish/jersey/tests/integration/jersey1928/Jersey1928ITCase.java
index 8fa797b..0ae62bd 100644
--- a/tests/integration/jersey-1928/src/test/java/org/glassfish/jersey/tests/integration/jersey1928/Jersey1928ITCase.java
+++ b/tests/integration/jersey-1928/src/test/java/org/glassfish/jersey/tests/integration/jersey1928/Jersey1928ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,7 +24,7 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/integration/jersey-1960/src/test/java/org/glassfish/jersey/tests/integration/jersey1960/Jersey1960ITCase.java b/tests/integration/jersey-1960/src/test/java/org/glassfish/jersey/tests/integration/jersey1960/Jersey1960ITCase.java
index d4317ac..cb52a3f 100644
--- a/tests/integration/jersey-1960/src/test/java/org/glassfish/jersey/tests/integration/jersey1960/Jersey1960ITCase.java
+++ b/tests/integration/jersey-1960/src/test/java/org/glassfish/jersey/tests/integration/jersey1960/Jersey1960ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Reproducer tests for JERSEY-1960.
diff --git a/tests/integration/jersey-1964/src/test/java/org/glassfish/jersey/tests/integration/jersey1964/Jersey1964ITCase.java b/tests/integration/jersey-1964/src/test/java/org/glassfish/jersey/tests/integration/jersey1964/Jersey1964ITCase.java
index 8329fd5..874390c 100644
--- a/tests/integration/jersey-1964/src/test/java/org/glassfish/jersey/tests/integration/jersey1964/Jersey1964ITCase.java
+++ b/tests/integration/jersey-1964/src/test/java/org/glassfish/jersey/tests/integration/jersey1964/Jersey1964ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,10 +29,11 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Reproducer tests for JERSEY-1964.
@@ -59,31 +60,35 @@
         assertThat(response.readEntity(Issue1964Resource.JsonStringWrapper.class).getValue(), equalTo("foo"));
     }
 
-    @Test(expected = ConnectException.class)
+    @Test
     public void testJackson2JsonGetInvalidEndpoint() throws Throwable {
-        try {
-            ClientBuilder.newClient()
-                    .target("http://localhost:1234")
-                    .request()
-                    .get();
+        assertThrows(ConnectException.class, () -> {
+            try {
+                ClientBuilder.newClient()
+                        .target("http://localhost:1234")
+                        .request()
+                        .get();
 
-            fail("End-point shouldn't exist.");
-        } catch (final ProcessingException pe) {
-            throw pe.getCause();
-        }
+                fail("End-point shouldn't exist.");
+            } catch (final ProcessingException pe) {
+                throw pe.getCause();
+            }
+        });
     }
 
-    @Test(expected = ConnectException.class)
+    @Test
     public void testJackson2JsonPutInvalidEndpoint() throws Throwable {
-        try {
-            ClientBuilder.newClient()
-                    .target("http://localhost:1234")
-                    .request()
-                    .put(Entity.json(new Issue1964Resource.JsonStringWrapper("foo")));
+        assertThrows(ConnectException.class, () -> {
+            try {
+                ClientBuilder.newClient()
+                        .target("http://localhost:1234")
+                        .request()
+                        .put(Entity.json(new Issue1964Resource.JsonStringWrapper("foo")));
 
-            fail("End-point shouldn't exist.");
-        } catch (final ProcessingException pe) {
-            throw pe.getCause();
-        }
+                fail("End-point shouldn't exist.");
+            } catch (final ProcessingException pe) {
+                throw pe.getCause();
+            }
+        });
     }
 }
diff --git a/tests/integration/jersey-2031/src/test/java/org/glassfish/jersey/tests/integration/jersey2031/Jersey2031ITCase.java b/tests/integration/jersey-2031/src/test/java/org/glassfish/jersey/tests/integration/jersey2031/Jersey2031ITCase.java
index 594129b..3038675 100644
--- a/tests/integration/jersey-2031/src/test/java/org/glassfish/jersey/tests/integration/jersey2031/Jersey2031ITCase.java
+++ b/tests/integration/jersey-2031/src/test/java/org/glassfish/jersey/tests/integration/jersey2031/Jersey2031ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,7 +24,7 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/integration/jersey-2136/src/test/java/org/glassfish/jersey/tests/integration/jersey2136/Jersey2136ITCase.java b/tests/integration/jersey-2136/src/test/java/org/glassfish/jersey/tests/integration/jersey2136/Jersey2136ITCase.java
index 418666a..026939f 100644
--- a/tests/integration/jersey-2136/src/test/java/org/glassfish/jersey/tests/integration/jersey2136/Jersey2136ITCase.java
+++ b/tests/integration/jersey-2136/src/test/java/org/glassfish/jersey/tests/integration/jersey2136/Jersey2136ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -50,7 +50,7 @@
     // which was causing intermittent problems with hanging app engine process.
     // After un-ignoring this test, make sure to uncomment the app engine plugin
     // execution in the project's pom.xml
-    @Ignore
+    @Disabled
     @Test
     public void testGet() throws Exception {
         final Response response = target().request().get();
diff --git a/tests/integration/jersey-2137/src/test/java/org/glassfish/jersey/tests/integration/jersey2137/WaeExceptionMappingTest.java b/tests/integration/jersey-2137/src/test/java/org/glassfish/jersey/tests/integration/jersey2137/WaeExceptionMappingTest.java
index 3759b0f..f5c3301 100644
--- a/tests/integration/jersey-2137/src/test/java/org/glassfish/jersey/tests/integration/jersey2137/WaeExceptionMappingTest.java
+++ b/tests/integration/jersey-2137/src/test/java/org/glassfish/jersey/tests/integration/jersey2137/WaeExceptionMappingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,9 +26,9 @@
 import javax.ws.rs.core.UriBuilder;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.CoreMatchers.equalTo;
 
 /**
diff --git a/tests/integration/jersey-2154/src/test/java/org/glassfish/jersey/tests/integration/jersey2154/EjbExceptionMappingTest.java b/tests/integration/jersey-2154/src/test/java/org/glassfish/jersey/tests/integration/jersey2154/EjbExceptionMappingTest.java
index 2c81076..c5713a6 100644
--- a/tests/integration/jersey-2154/src/test/java/org/glassfish/jersey/tests/integration/jersey2154/EjbExceptionMappingTest.java
+++ b/tests/integration/jersey-2154/src/test/java/org/glassfish/jersey/tests/integration/jersey2154/EjbExceptionMappingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,9 +26,9 @@
 import javax.ws.rs.core.UriBuilder;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.core.StringContains.containsString;
 
diff --git a/tests/integration/jersey-2160/src/test/java/org/glassfish/jersey/tests/integration/jersey2160/Jersey2160ITCase.java b/tests/integration/jersey-2160/src/test/java/org/glassfish/jersey/tests/integration/jersey2160/Jersey2160ITCase.java
index 788a76b..12556db 100644
--- a/tests/integration/jersey-2160/src/test/java/org/glassfish/jersey/tests/integration/jersey2160/Jersey2160ITCase.java
+++ b/tests/integration/jersey-2160/src/test/java/org/glassfish/jersey/tests/integration/jersey2160/Jersey2160ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Reproducer tests for JERSEY-2160.
diff --git a/tests/integration/jersey-2164/src/test/java/org/glassfish/jersey/tests/integration/jersey2164/Jersey2164ITCase.java b/tests/integration/jersey-2164/src/test/java/org/glassfish/jersey/tests/integration/jersey2164/Jersey2164ITCase.java
index 79c24c9..683a69e 100644
--- a/tests/integration/jersey-2164/src/test/java/org/glassfish/jersey/tests/integration/jersey2164/Jersey2164ITCase.java
+++ b/tests/integration/jersey-2164/src/test/java/org/glassfish/jersey/tests/integration/jersey2164/Jersey2164ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,7 +29,7 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/integration/jersey-2167/src/test/java/org/glassfish/jersey/tests/integration/jersey2167/Jersey2167ITCase.java b/tests/integration/jersey-2167/src/test/java/org/glassfish/jersey/tests/integration/jersey2167/Jersey2167ITCase.java
index b090745..354a3eb 100644
--- a/tests/integration/jersey-2167/src/test/java/org/glassfish/jersey/tests/integration/jersey2167/Jersey2167ITCase.java
+++ b/tests/integration/jersey-2167/src/test/java/org/glassfish/jersey/tests/integration/jersey2167/Jersey2167ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Reproducer tests for JERSEY-2167.
@@ -53,7 +53,7 @@
         // that hk2 injected the parameter and invoked the method preliminary and during Jersey-driven invocation,
         // there was no parameter injection any more. If parameter was injected and Response.Status.OK (200) returned,
         // the resource method was called only once (by Jersey).
-        assertEquals("Parameter not injected into resource method. Resource method could have been called twice. ",
-                response.getStatus(), Response.Status.OK.getStatusCode());
+        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode(),
+                "Parameter not injected into resource method. Resource method could have been called twice. ");
     }
 }
diff --git a/tests/integration/jersey-2176/src/test/java/org/glassfish/jersey/tests/integration/jersey2176/Jersey2176ITCaseBase.java b/tests/integration/jersey-2176/src/test/java/org/glassfish/jersey/tests/integration/jersey2176/Jersey2176ITCaseBase.java
index 4210502..e1ccf74 100644
--- a/tests/integration/jersey-2176/src/test/java/org/glassfish/jersey/tests/integration/jersey2176/Jersey2176ITCaseBase.java
+++ b/tests/integration/jersey-2176/src/test/java/org/glassfish/jersey/tests/integration/jersey2176/Jersey2176ITCaseBase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Reproducer tests for JERSEY-2176.
@@ -120,18 +120,18 @@
         final Response response = builder.get();
         final String assertMessage = uc + "|" + responseEntity;
 
-        Assert.assertEquals(assertMessage, uc, response.getStatus());
+        Assertions.assertEquals(uc, response.getStatus(), assertMessage);
         if (!sendErrorExpected(uc, responseEntity)) {
-            Assert.assertEquals(assertMessage, "OK", response.getHeaderString(TraceResponseFilter.X_STATUS_HEADER));
-            Assert.assertNotNull(assertMessage, response.getHeaderString(TraceResponseFilter.X_SERVER_DURATION_HEADER));
+            Assertions.assertEquals("OK", response.getHeaderString(TraceResponseFilter.X_STATUS_HEADER), assertMessage);
+            Assertions.assertNotNull(response.getHeaderString(TraceResponseFilter.X_SERVER_DURATION_HEADER), assertMessage);
             if (responseEntity) {
-                Assert.assertEquals(assertMessage, expectedContent, response.readEntity(String.class));
-                Assert.assertEquals(assertMessage, String.valueOf(expectedContent.length()),
-                        response.getHeaderString(HttpHeaders.CONTENT_LENGTH));
+                Assertions.assertEquals(expectedContent, response.readEntity(String.class), assertMessage);
+                Assertions.assertEquals(String.valueOf(expectedContent.length()),
+                        response.getHeaderString(HttpHeaders.CONTENT_LENGTH), assertMessage);
             }
         } else {
-            Assert.assertNull(assertMessage, response.getHeaderString(TraceResponseFilter.X_STATUS_HEADER));
-            Assert.assertNull(assertMessage, response.getHeaderString(TraceResponseFilter.X_SERVER_DURATION_HEADER));
+            Assertions.assertNull(response.getHeaderString(TraceResponseFilter.X_STATUS_HEADER), assertMessage);
+            Assertions.assertNull(response.getHeaderString(TraceResponseFilter.X_SERVER_DURATION_HEADER), assertMessage);
         }
     }
 
@@ -147,16 +147,16 @@
         final String expectedContent = "[FILTER][/FILTER]";
         final String assertMessage = uc + ":" + expectedStatus + "|" + fail;
 
-        Assert.assertEquals(assertMessage, expectedStatus, response.getStatus());
+        Assertions.assertEquals(expectedStatus, response.getStatus(), assertMessage);
         if (!sendErrorExpected(expectedStatus, false)) {
-            Assert.assertEquals(assertMessage, expectedStatus == 500 ? "FAIL" : "OK",
-                    response.getHeaderString(TraceResponseFilter.X_STATUS_HEADER));
-            Assert.assertNotNull(assertMessage, response.getHeaderString(TraceResponseFilter.X_SERVER_DURATION_HEADER));
-            Assert.assertEquals(assertMessage, String.valueOf(expectedContent.length()),
-                    response.getHeaderString(HttpHeaders.CONTENT_LENGTH));
+            Assertions.assertEquals(expectedStatus == 500 ? "FAIL" : "OK",
+                    response.getHeaderString(TraceResponseFilter.X_STATUS_HEADER), assertMessage);
+            Assertions.assertNotNull(response.getHeaderString(TraceResponseFilter.X_SERVER_DURATION_HEADER), assertMessage);
+            Assertions.assertEquals(String.valueOf(expectedContent.length()),
+                    response.getHeaderString(HttpHeaders.CONTENT_LENGTH), assertMessage);
         } else {
-            Assert.assertNull(assertMessage, response.getHeaderString(TraceResponseFilter.X_STATUS_HEADER));
-            Assert.assertNull(assertMessage, response.getHeaderString(TraceResponseFilter.X_SERVER_DURATION_HEADER));
+            Assertions.assertNull(response.getHeaderString(TraceResponseFilter.X_STATUS_HEADER), assertMessage);
+            Assertions.assertNull(response.getHeaderString(TraceResponseFilter.X_SERVER_DURATION_HEADER), assertMessage);
         }
     }
 
diff --git a/tests/integration/jersey-2184/src/test/java/org/glassfish/jersey/tests/integration/jersey2184/Jersey2184ITCase.java b/tests/integration/jersey-2184/src/test/java/org/glassfish/jersey/tests/integration/jersey2184/Jersey2184ITCase.java
index 8aa9544..ecfc37b 100644
--- a/tests/integration/jersey-2184/src/test/java/org/glassfish/jersey/tests/integration/jersey2184/Jersey2184ITCase.java
+++ b/tests/integration/jersey-2184/src/test/java/org/glassfish/jersey/tests/integration/jersey2184/Jersey2184ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,10 +28,10 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests the JERSEY-2184 fix (the ability to inject ServletContext into application subclass constructor).
@@ -40,9 +40,9 @@
  */
 public class Jersey2184ITCase extends JerseyTest {
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
     @Override
diff --git a/tests/integration/jersey-2255/src/test/java/org/glassfish/jersey/tests/integration/jersey2255/Jersey2255ITCase.java b/tests/integration/jersey-2255/src/test/java/org/glassfish/jersey/tests/integration/jersey2255/Jersey2255ITCase.java
index a996eba..061db6b 100644
--- a/tests/integration/jersey-2255/src/test/java/org/glassfish/jersey/tests/integration/jersey2255/Jersey2255ITCase.java
+++ b/tests/integration/jersey-2255/src/test/java/org/glassfish/jersey/tests/integration/jersey2255/Jersey2255ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,10 +27,10 @@
 import org.glassfish.jersey.tests.integration.jersey2255.Issue2255Resource.A;
 import org.glassfish.jersey.tests.integration.jersey2255.Issue2255Resource.B;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Reproducer tests for JERSEY-2255.
diff --git a/tests/integration/jersey-2322/src/test/java/org/glassfish/jersey/tests/integration/jersey2322/Jersey2322ITCase.java b/tests/integration/jersey-2322/src/test/java/org/glassfish/jersey/tests/integration/jersey2322/Jersey2322ITCase.java
index f3700cf..f25b9ce 100644
--- a/tests/integration/jersey-2322/src/test/java/org/glassfish/jersey/tests/integration/jersey2322/Jersey2322ITCase.java
+++ b/tests/integration/jersey-2322/src/test/java/org/glassfish/jersey/tests/integration/jersey2322/Jersey2322ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/integration/jersey-2335/src/test/java/org/glassfish/jersey/tests/integration/jersey2335/Jersey2335ITCase.java b/tests/integration/jersey-2335/src/test/java/org/glassfish/jersey/tests/integration/jersey2335/Jersey2335ITCase.java
index 6face63..cabb45e 100644
--- a/tests/integration/jersey-2335/src/test/java/org/glassfish/jersey/tests/integration/jersey2335/Jersey2335ITCase.java
+++ b/tests/integration/jersey-2335/src/test/java/org/glassfish/jersey/tests/integration/jersey2335/Jersey2335ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,10 +29,10 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Reproducer tests for JERSEY-2335.
diff --git a/tests/integration/jersey-2421/pom.xml b/tests/integration/jersey-2421/pom.xml
index 50afcf6..3690c69 100644
--- a/tests/integration/jersey-2421/pom.xml
+++ b/tests/integration/jersey-2421/pom.xml
@@ -43,8 +43,14 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 
diff --git a/tests/integration/jersey-2421/src/test/java/org/glassfish/jersey/tests/integration/jersey2421/Jersey2421Test.java b/tests/integration/jersey-2421/src/test/java/org/glassfish/jersey/tests/integration/jersey2421/Jersey2421Test.java
index dc71185..1bf3cb7 100644
--- a/tests/integration/jersey-2421/src/test/java/org/glassfish/jersey/tests/integration/jersey2421/Jersey2421Test.java
+++ b/tests/integration/jersey-2421/src/test/java/org/glassfish/jersey/tests/integration/jersey2421/Jersey2421Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -41,9 +41,10 @@
 import org.glassfish.jersey.message.internal.NullOutputStream;
 import org.glassfish.jersey.message.internal.OutboundMessageContext;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Reproducer tests for JERSEY-2421.
@@ -115,8 +116,8 @@
     /**
      * Test that classes from jersey-server module cannot be loaded.
      */
-    @Test(expected = ClassNotFoundException.class)
+    @Test
     public void testLoadJerseyServerClass() throws Exception {
-        Class.forName("org.glassfish.jersey.server.ResourceConfig");
+        assertThrows(ClassNotFoundException.class, () -> Class.forName("org.glassfish.jersey.server.ResourceConfig"));
     }
 }
diff --git a/tests/integration/jersey-2551/src/test/java/org/glassfish/jersey/tests/integration/jersey2551/Jersey2551ITCase.java b/tests/integration/jersey-2551/src/test/java/org/glassfish/jersey/tests/integration/jersey2551/Jersey2551ITCase.java
index a45e1b4..03c0028 100644
--- a/tests/integration/jersey-2551/src/test/java/org/glassfish/jersey/tests/integration/jersey2551/Jersey2551ITCase.java
+++ b/tests/integration/jersey-2551/src/test/java/org/glassfish/jersey/tests/integration/jersey2551/Jersey2551ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,7 +23,7 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/integration/jersey-2612/src/test/java/org/glassfish/jersey/tests/integration/jersey2612/Jersey2612ITCase.java b/tests/integration/jersey-2612/src/test/java/org/glassfish/jersey/tests/integration/jersey2612/Jersey2612ITCase.java
index 0ffbad5..d50dda8 100644
--- a/tests/integration/jersey-2612/src/test/java/org/glassfish/jersey/tests/integration/jersey2612/Jersey2612ITCase.java
+++ b/tests/integration/jersey-2612/src/test/java/org/glassfish/jersey/tests/integration/jersey2612/Jersey2612ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,7 +23,7 @@
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/tests/integration/jersey-2637/src/test/java/org/glassfish/jersey/tests/integration/jersey2637/Jersey2637DisabledITCase.java b/tests/integration/jersey-2637/src/test/java/org/glassfish/jersey/tests/integration/jersey2637/Jersey2637DisabledITCase.java
index de6b68e..f2dcca3 100644
--- a/tests/integration/jersey-2637/src/test/java/org/glassfish/jersey/tests/integration/jersey2637/Jersey2637DisabledITCase.java
+++ b/tests/integration/jersey-2637/src/test/java/org/glassfish/jersey/tests/integration/jersey2637/Jersey2637DisabledITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,7 +26,7 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
diff --git a/tests/integration/jersey-2637/src/test/java/org/glassfish/jersey/tests/integration/jersey2637/Jersey2637EnabledITCase.java b/tests/integration/jersey-2637/src/test/java/org/glassfish/jersey/tests/integration/jersey2637/Jersey2637EnabledITCase.java
index 1240bc1..8cd4f0b 100644
--- a/tests/integration/jersey-2637/src/test/java/org/glassfish/jersey/tests/integration/jersey2637/Jersey2637EnabledITCase.java
+++ b/tests/integration/jersey-2637/src/test/java/org/glassfish/jersey/tests/integration/jersey2637/Jersey2637EnabledITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,7 @@
 
 package org.glassfish.jersey.tests.integration.jersey2637;
 
-import java.util.Arrays;
-import java.util.Collection;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.core.Application;
@@ -29,26 +28,20 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Reproducer tests for JERSEY-2637 - Query params can be injected using {@link javax.ws.rs.FormParam}.
  */
-@RunWith(Parameterized.class)
 public class Jersey2637EnabledITCase extends JerseyTest {
 
-    @Parameterized.Parameters(name = "path = {0}")
-    public static Collection<Object[]> paths() {
-        return Arrays.asList(new Object[][]{{"defaut"}, {"enabled"}});
+    public static Stream<String> paths() {
+        return Stream.of("defaut", "enabled");
     }
 
-    @Parameterized.Parameter
-    public String path;
-
     @Override
     protected Application configure() {
         return new Jersey2637();
@@ -59,8 +52,9 @@
         return new ExternalTestContainerFactory();
     }
 
-    @Test
-    public void testFormParams() throws Exception {
+    @ParameterizedTest
+    @MethodSource("paths")
+    public void testFormParams(String path) throws Exception {
         final Form form = new Form()
                 .param("username", "user")
                 .param("password", "pass");
@@ -70,8 +64,9 @@
         assertThat(response.readEntity(String.class), is("user_pass"));
     }
 
-    @Test
-    public void testQueryParams() throws Exception {
+    @ParameterizedTest
+    @MethodSource("paths")
+    public void testQueryParams(String path) throws Exception {
         final Response response = target(path)
                 .queryParam("username", "user").queryParam("password", "pass")
                 .request()
@@ -80,8 +75,9 @@
         assertThat(response.readEntity(String.class), is("user_pass"));
     }
 
-    @Test
-    public void testDoubleQueryParams() throws Exception {
+    @ParameterizedTest
+    @MethodSource("paths")
+    public void testDoubleQueryParams(String path) throws Exception {
         final Response response = target(path)
                 .queryParam("username", "user").queryParam("password", "pass")
                 .queryParam("username", "user").queryParam("password", "pass")
@@ -91,8 +87,9 @@
         assertThat(response.readEntity(String.class), is("user_pass"));
     }
 
-    @Test
-    public void testEncodedQueryParams() throws Exception {
+    @ParameterizedTest
+    @MethodSource("paths")
+    public void testEncodedQueryParams(String path) throws Exception {
         final Response response = target(path)
                 .queryParam("username", "us%20er").queryParam("password", "pass")
                 .request()
@@ -101,8 +98,9 @@
         assertThat(response.readEntity(String.class), is("us er_pass"));
     }
 
-    @Test
-    public void testFormAndQueryParams() throws Exception {
+    @ParameterizedTest
+    @MethodSource("paths")
+    public void testFormAndQueryParams(String path) throws Exception {
         final Form form = new Form()
                 .param("username", "user")
                 .param("password", "pass");
diff --git a/tests/integration/jersey-2654/src/test/java/org/glassfish/jersey/tests/integration/jersey2654/Jersey2654ITCase.java b/tests/integration/jersey-2654/src/test/java/org/glassfish/jersey/tests/integration/jersey2654/Jersey2654ITCase.java
index c6793b6..e2afbc8 100644
--- a/tests/integration/jersey-2654/src/test/java/org/glassfish/jersey/tests/integration/jersey2654/Jersey2654ITCase.java
+++ b/tests/integration/jersey-2654/src/test/java/org/glassfish/jersey/tests/integration/jersey2654/Jersey2654ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,9 +31,9 @@
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Reproducer for JERSEY-2654
diff --git a/tests/integration/jersey-2673/src/test/java/org/glassfish/jersey/tests/integration/jersey2673/Jersey2673ITCase.java b/tests/integration/jersey-2673/src/test/java/org/glassfish/jersey/tests/integration/jersey2673/Jersey2673ITCase.java
index f157001..48911ef 100644
--- a/tests/integration/jersey-2673/src/test/java/org/glassfish/jersey/tests/integration/jersey2673/Jersey2673ITCase.java
+++ b/tests/integration/jersey-2673/src/test/java/org/glassfish/jersey/tests/integration/jersey2673/Jersey2673ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Reproducer for JERSEY-2673: 400 errors generated by a ValidationException are returning default error page instead of
diff --git a/tests/integration/jersey-2689/src/test/java/org/glassfish/jersey/tests/integration/jersey2689/Jersey2689ITCase.java b/tests/integration/jersey-2689/src/test/java/org/glassfish/jersey/tests/integration/jersey2689/Jersey2689ITCase.java
index 2db2efa..b773a5f 100644
--- a/tests/integration/jersey-2689/src/test/java/org/glassfish/jersey/tests/integration/jersey2689/Jersey2689ITCase.java
+++ b/tests/integration/jersey-2689/src/test/java/org/glassfish/jersey/tests/integration/jersey2689/Jersey2689ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,9 +32,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
diff --git a/tests/integration/jersey-2704/src/test/java/org/glassfish/jersey/tests/integration/jersey2704/Jersey2704ITCase.java b/tests/integration/jersey-2704/src/test/java/org/glassfish/jersey/tests/integration/jersey2704/Jersey2704ITCase.java
index 2ed829e..c5b2c43 100644
--- a/tests/integration/jersey-2704/src/test/java/org/glassfish/jersey/tests/integration/jersey2704/Jersey2704ITCase.java
+++ b/tests/integration/jersey-2704/src/test/java/org/glassfish/jersey/tests/integration/jersey2704/Jersey2704ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.glassfish.jersey.tests.integration.jersey2704.services.HappyService;
 import org.glassfish.jersey.tests.integration.jersey2704.services.SadService;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 
 /**
@@ -82,7 +82,7 @@
      */
     @Test
     public void testCorrectInjection() throws IOException {
-        Assert.assertEquals(200, test(HappyService.class));
+        Assertions.assertEquals(200, test(HappyService.class));
     }
 
     /**
@@ -93,6 +93,6 @@
      */
     @Test
     public void testMisingInjection() throws IOException {
-        Assert.assertEquals(600, test(SadService.class));
+        Assertions.assertEquals(600, test(SadService.class));
     }
 }
diff --git a/tests/integration/jersey-2776/src/test/java/org/glassfish/jersey/tests/integration/jersey2776/Jersey2776ITCase.java b/tests/integration/jersey-2776/src/test/java/org/glassfish/jersey/tests/integration/jersey2776/Jersey2776ITCase.java
index 7a6d2af..ac57a93 100644
--- a/tests/integration/jersey-2776/src/test/java/org/glassfish/jersey/tests/integration/jersey2776/Jersey2776ITCase.java
+++ b/tests/integration/jersey-2776/src/test/java/org/glassfish/jersey/tests/integration/jersey2776/Jersey2776ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -36,17 +36,17 @@
 import org.apache.cxf.jaxrs.ext.multipart.AttachmentBuilder;
 import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition;
 import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Code under test: {@link MultiPartReaderClientSide} (unquoteMediaTypeParameters)
  *
  * @author Jonatan Jönsson (jontejj at gmail.com)
  */
-@Ignore
+@Disabled
 public class Jersey2776ITCase extends JerseyTest {
 
     @Override
diff --git a/tests/integration/jersey-2794/src/test/java/org/glassfish/jersey/tests/integration/jersey2794/Jersey2794ITCase.java b/tests/integration/jersey-2794/src/test/java/org/glassfish/jersey/tests/integration/jersey2794/Jersey2794ITCase.java
index 60a54ca..27f2ffb 100644
--- a/tests/integration/jersey-2794/src/test/java/org/glassfish/jersey/tests/integration/jersey2794/Jersey2794ITCase.java
+++ b/tests/integration/jersey-2794/src/test/java/org/glassfish/jersey/tests/integration/jersey2794/Jersey2794ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,9 +35,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * JERSEY-2794 reproducer.
diff --git a/tests/integration/jersey-2846/src/test/java/org/glassfish/jersey/tests/integration/jersey2846/Jersey2846ITCase.java b/tests/integration/jersey-2846/src/test/java/org/glassfish/jersey/tests/integration/jersey2846/Jersey2846ITCase.java
index 0aecaa2..7656af8 100644
--- a/tests/integration/jersey-2846/src/test/java/org/glassfish/jersey/tests/integration/jersey2846/Jersey2846ITCase.java
+++ b/tests/integration/jersey-2846/src/test/java/org/glassfish/jersey/tests/integration/jersey2846/Jersey2846ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -41,9 +41,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * JERSEY-2846 reproducer.
diff --git a/tests/integration/jersey-2878/src/test/java/org/glassfish/jersey/tests/integration/jersey2878/Jersey2878ITCase.java b/tests/integration/jersey-2878/src/test/java/org/glassfish/jersey/tests/integration/jersey2878/Jersey2878ITCase.java
index a31f49f..2a15d4a 100644
--- a/tests/integration/jersey-2878/src/test/java/org/glassfish/jersey/tests/integration/jersey2878/Jersey2878ITCase.java
+++ b/tests/integration/jersey-2878/src/test/java/org/glassfish/jersey/tests/integration/jersey2878/Jersey2878ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,8 +33,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.fail;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.fail;
 
 public class Jersey2878ITCase extends JerseyTest {
 
diff --git a/tests/integration/jersey-2892/src/test/java/org/glassfish/jersey/tests/integration/jersey2892/AbstractJerseyEntityFilteringITCase.java b/tests/integration/jersey-2892/src/test/java/org/glassfish/jersey/tests/integration/jersey2892/AbstractJerseyEntityFilteringITCase.java
index 4b32ba9..73ac0a3 100644
--- a/tests/integration/jersey-2892/src/test/java/org/glassfish/jersey/tests/integration/jersey2892/AbstractJerseyEntityFilteringITCase.java
+++ b/tests/integration/jersey-2892/src/test/java/org/glassfish/jersey/tests/integration/jersey2892/AbstractJerseyEntityFilteringITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests whether classes repeating in the object graph are filtered out correctly.
@@ -57,8 +57,8 @@
 
         final TestResource.Persons persons = response.readEntity(TestResource.Persons.class);
 
-        Assert.assertEquals("Amphitheatre Pkwy", persons.first.address.street.name);
-        Assert.assertEquals("Microsoft Way", persons.second.address.street.name);
+        Assertions.assertEquals("Amphitheatre Pkwy", persons.first.address.street.name);
+        Assertions.assertEquals("Microsoft Way", persons.second.address.street.name);
     }
 
     /**
@@ -71,8 +71,8 @@
 
         final TestResource.Pointer pointer = response.readEntity(TestResource.Pointer.class);
 
-        Assert.assertEquals("Amphitheatre Pkwy", pointer.persons.first.address.street.name);
-        Assert.assertEquals("Microsoft Way", pointer.persons.second.address.street.name);
+        Assertions.assertEquals("Amphitheatre Pkwy", pointer.persons.first.address.street.name);
+        Assertions.assertEquals("Microsoft Way", pointer.persons.second.address.street.name);
     }
 
     /**
@@ -84,7 +84,7 @@
 
         final TestResource.Recursive recursive = response.readEntity(TestResource.Recursive.class);
 
-        Assert.assertEquals("c", recursive.subField.subSubField.idSubSubField);
+        Assertions.assertEquals("c", recursive.subField.subSubField.idSubSubField);
     }
 
     /**
diff --git a/tests/integration/jersey-3662/pom.xml b/tests/integration/jersey-3662/pom.xml
index 0d7dbb7..8ac75ea 100644
--- a/tests/integration/jersey-3662/pom.xml
+++ b/tests/integration/jersey-3662/pom.xml
@@ -40,8 +40,8 @@
             <version>${project.version}</version>
             <exclusions>
                 <exclusion>
-                    <groupId>junit</groupId>
-                    <artifactId>junit</artifactId>
+                    <groupId>org.junit.jupiter</groupId>
+                    <artifactId>junit-jupiter</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
diff --git a/tests/integration/jersey-3670/src/test/java/org/glassfish/jersey/tests/integration/jersey3670/ExternalApplicationParamConverterTest.java b/tests/integration/jersey-3670/src/test/java/org/glassfish/jersey/tests/integration/jersey3670/ExternalApplicationParamConverterTest.java
index a166ed1..963b4b5 100644
--- a/tests/integration/jersey-3670/src/test/java/org/glassfish/jersey/tests/integration/jersey3670/ExternalApplicationParamConverterTest.java
+++ b/tests/integration/jersey-3670/src/test/java/org/glassfish/jersey/tests/integration/jersey3670/ExternalApplicationParamConverterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,11 +20,11 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class ExternalApplicationParamConverterTest extends JerseyTest {
 
diff --git a/tests/integration/jersey-3796/src/test/java/org/glassfish/jersey/tests/integration/jersey3796/Jersey3796ITCase.java b/tests/integration/jersey-3796/src/test/java/org/glassfish/jersey/tests/integration/jersey3796/Jersey3796ITCase.java
index 7d552e8..ebe4c52 100644
--- a/tests/integration/jersey-3796/src/test/java/org/glassfish/jersey/tests/integration/jersey3796/Jersey3796ITCase.java
+++ b/tests/integration/jersey-3796/src/test/java/org/glassfish/jersey/tests/integration/jersey3796/Jersey3796ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.MediaType;
@@ -48,14 +48,14 @@
     public void testSameInstanceForProviders() {
         final Map response = target("/myresource").request(MediaType.APPLICATION_JSON_TYPE).get(Map.class);
         //Map shall not be null
-        Assert.assertNotNull(response);
+        Assertions.assertNotNull(response);
         //Map shall contain exactly three elements
-        Assert.assertEquals(3, response.size());
+        Assertions.assertEquals(3, response.size());
         //Map shall contain ony keys Feature, Request and Response
         //Values of that keys shall be equals.
         //Equality of all values indicates the class is only one per all tested providers
-        Assert.assertEquals(response.get("Feature"), response.get("Request"));
-        Assert.assertEquals(response.get("Feature"), response.get("Response"));
-        Assert.assertEquals(response.get("Response"), response.get("Request"));
+        Assertions.assertEquals(response.get("Feature"), response.get("Request"));
+        Assertions.assertEquals(response.get("Feature"), response.get("Response"));
+        Assertions.assertEquals(response.get("Response"), response.get("Request"));
     }
 }
diff --git a/tests/integration/jersey-3992/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java b/tests/integration/jersey-3992/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
index c6ad8e5..212a115 100644
--- a/tests/integration/jersey-3992/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
+++ b/tests/integration/jersey-3992/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -23,6 +23,8 @@
 import javax.ws.rs.core.UriBuilder;
 import org.glassfish.jersey.test.JerseyTest;
 import org.jboss.weld.environment.se.Weld;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 
 /**
  * Test for CDI web application resources.
@@ -38,6 +40,7 @@
 
     Weld weld;
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         weld = new Weld();
@@ -45,6 +48,7 @@
         super.setUp();
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         weld.shutdown();
diff --git a/tests/integration/jersey-3992/src/test/java/org/glassfish/jersey/tests/cdi/resources/InheritanceTest.java b/tests/integration/jersey-3992/src/test/java/org/glassfish/jersey/tests/cdi/resources/InheritanceTest.java
index 24479fb..a05656b 100644
--- a/tests/integration/jersey-3992/src/test/java/org/glassfish/jersey/tests/cdi/resources/InheritanceTest.java
+++ b/tests/integration/jersey-3992/src/test/java/org/glassfish/jersey/tests/cdi/resources/InheritanceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 Payara Foundation and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2022 Payara Foundation and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,8 +18,8 @@
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
-import org.junit.Test;
-import static org.junit.Assert.assertThat;
+import org.junit.jupiter.api.Test;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.CoreMatchers.is;
 
 /**
diff --git a/tests/integration/jersey-4003/src/test/java/org/glassfish/jersey/tests/integration/jersey4003/LostResponseTest.java b/tests/integration/jersey-4003/src/test/java/org/glassfish/jersey/tests/integration/jersey4003/LostResponseTest.java
index 1780d05..2bc3a12 100644
--- a/tests/integration/jersey-4003/src/test/java/org/glassfish/jersey/tests/integration/jersey4003/LostResponseTest.java
+++ b/tests/integration/jersey-4003/src/test/java/org/glassfish/jersey/tests/integration/jersey4003/LostResponseTest.java
@@ -41,9 +41,9 @@
 import org.glassfish.jersey.client.HttpUrlConnectorProvider;
 import org.glassfish.jersey.client.JerseyClientBuilder;
 import org.glassfish.jersey.client.JerseyCompletionStageRxInvoker;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 public class LostResponseTest {
@@ -54,7 +54,7 @@
     private Client client;
     private Entity<?> bodyEntity;
 
-    @Before
+    @BeforeEach
     public void setup() throws IOException {
         HttpUrlConnectorProvider.ConnectionFactory connectionFactory =
                 Mockito.mock(HttpUrlConnectorProvider.ConnectionFactory.class);
@@ -85,10 +85,10 @@
     public void putEntityFailure() {
         try {
             client.target(DUMMY_URL).request().put(bodyEntity);
-            Assert.fail("Expected ResponseProcessing exception has not been thrown");
+            Assertions.fail("Expected ResponseProcessing exception has not been thrown");
         } catch (ResponseProcessingException rpe) {
             try (Response response = rpe.getResponse()) {
-                Assert.assertEquals(RESPONSE_CODE, response.getStatus());
+                Assertions.assertEquals(RESPONSE_CODE, response.getStatus());
             }
         }
     }
@@ -97,10 +97,10 @@
     public void putEntityAndClassTypeFailure() {
         try {
             client.target(DUMMY_URL).request().put(bodyEntity, String.class);
-            Assert.fail("Expected ResponseProcessing exception has not been thrown");
+            Assertions.fail("Expected ResponseProcessing exception has not been thrown");
         } catch (ResponseProcessingException rpe) {
             try (Response response = rpe.getResponse()) {
-                Assert.assertEquals(RESPONSE_CODE, response.getStatus());
+                Assertions.assertEquals(RESPONSE_CODE, response.getStatus());
             }
         }
     }
@@ -109,10 +109,10 @@
     public void putEntityAndGenericTypeTypeFailure() {
         try {
             client.target(DUMMY_URL).request().put(bodyEntity, new GenericType<String>(){});
-            Assert.fail("Expected ResponseProcessing exception has not been thrown");
+            Assertions.fail("Expected ResponseProcessing exception has not been thrown");
         } catch (ResponseProcessingException rpe) {
             try (Response response = rpe.getResponse()) {
-                Assert.assertEquals(RESPONSE_CODE, response.getStatus());
+                Assertions.assertEquals(RESPONSE_CODE, response.getStatus());
             }
         }
     }
@@ -122,13 +122,13 @@
         try {
             Future<Response> future = client.target(DUMMY_URL).request().async().put(bodyEntity);
             future.get();
-            Assert.fail("Expected ResponseProcessing exception has not been thrown");
+            Assertions.fail("Expected ResponseProcessing exception has not been thrown");
         } catch (ExecutionException ee) {
             try {
                 throw (RuntimeException) ee.getCause();
             } catch (ResponseProcessingException rpe) {
                 try (Response response = rpe.getResponse()) {
-                    Assert.assertEquals(RESPONSE_CODE, response.getStatus());
+                    Assertions.assertEquals(RESPONSE_CODE, response.getStatus());
                 }
             }
         }
@@ -139,13 +139,13 @@
         try {
             Future<String> future = client.target(DUMMY_URL).request().async().put(bodyEntity, String.class);
             future.get();
-            Assert.fail("Expected ResponseProcessing exception has not been thrown");
+            Assertions.fail("Expected ResponseProcessing exception has not been thrown");
         } catch (ExecutionException ee) {
             try {
                 throw (RuntimeException) ee.getCause();
             } catch (ResponseProcessingException rpe) {
                 try (Response response = rpe.getResponse()) {
-                    Assert.assertEquals(RESPONSE_CODE, response.getStatus());
+                    Assertions.assertEquals(RESPONSE_CODE, response.getStatus());
                 }
             }
         }
@@ -156,13 +156,13 @@
         try {
             Future<String> future = client.target(DUMMY_URL).request().async().put(bodyEntity, new GenericType<String>(){});
             future.get();
-            Assert.fail("Expected ResponseProcessing exception has not been thrown");
+            Assertions.fail("Expected ResponseProcessing exception has not been thrown");
         } catch (ExecutionException ee) {
             try {
                 throw (RuntimeException) ee.getCause();
             } catch (ResponseProcessingException rpe) {
                 try (Response response = rpe.getResponse()) {
-                    Assert.assertEquals(RESPONSE_CODE, response.getStatus());
+                    Assertions.assertEquals(RESPONSE_CODE, response.getStatus());
                 }
             }
         }
@@ -177,7 +177,7 @@
                     client.target(DUMMY_URL).request().async().put(bodyEntity, new InvocationCallback<Response>() {
                 @Override
                 public void completed(Response response) {
-                    Assert.fail("Expected ResponseProcessing exception has not been thrown");
+                    Assertions.fail("Expected ResponseProcessing exception has not been thrown");
                 }
 
                 @Override
@@ -187,20 +187,20 @@
                 }
             });
             future.get();
-            Assert.fail("Expected ResponseProcessing exception has not been thrown");
+            Assertions.fail("Expected ResponseProcessing exception has not been thrown");
         } catch (ExecutionException ee) {
             try {
                 throw (RuntimeException) ee.getCause();
             } catch (ResponseProcessingException rpe) {
                 try (Response response = rpe.getResponse()) {
-                    Assert.assertEquals(RESPONSE_CODE, response.getStatus());
+                    Assertions.assertEquals(RESPONSE_CODE, response.getStatus());
                 }
             }
             failedLatch.await(5000, TimeUnit.MILLISECONDS);
             Throwable ct = callbackThrowable.get();
-            Assert.assertTrue("Callback has not been hit", ct != null);
-            Assert.assertTrue("The exception is " + ct.getClass().getName(),
-                    ResponseProcessingException.class.isInstance(ct));
+            Assertions.assertTrue(ct != null, "Callback has not been hit");
+            Assertions.assertTrue(ResponseProcessingException.class.isInstance(ct),
+                    "The exception is " + ct.getClass().getName());
         }
     }
 
@@ -209,13 +209,13 @@
         try {
             CompletionStage<Response> future = client.target(DUMMY_URL).request().rx().put(bodyEntity);
             future.toCompletableFuture().get();
-            Assert.fail("Expected ResponseProcessing exception has not been thrown");
+            Assertions.fail("Expected ResponseProcessing exception has not been thrown");
         } catch (ExecutionException ee) {
             try {
                 throw (RuntimeException) ee.getCause();
             } catch (ResponseProcessingException rpe) {
                 try (Response response = rpe.getResponse()) {
-                    Assert.assertEquals(RESPONSE_CODE, response.getStatus());
+                    Assertions.assertEquals(RESPONSE_CODE, response.getStatus());
                 }
             }
         }
@@ -231,7 +231,7 @@
                             .put(bodyEntity, new InvocationCallback<Response>() {
                         @Override
                         public void completed(Response response) {
-                            Assert.fail("Expected ResponseProcessing exception has not been thrown");
+                            Assertions.fail("Expected ResponseProcessing exception has not been thrown");
                         }
 
                         @Override
@@ -241,20 +241,20 @@
                         }
                     });
             future.get();
-            Assert.fail("Expected ResponseProcessing exception has not been thrown");
+            Assertions.fail("Expected ResponseProcessing exception has not been thrown");
         } catch (ExecutionException ee) {
             try {
                 throw (RuntimeException) ee.getCause();
             } catch (ResponseProcessingException rpe) {
                 try (Response response = rpe.getResponse()) {
-                    Assert.assertEquals(RESPONSE_CODE, response.getStatus());
+                    Assertions.assertEquals(RESPONSE_CODE, response.getStatus());
                 }
             }
             failedLatch.await(5000, TimeUnit.MILLISECONDS);
             Throwable ct = callbackThrowable.get();
-            Assert.assertTrue("Callback has not been hit", ct != null);
-            Assert.assertTrue("The exception is " + ct.getClass().getName(),
-                    ResponseProcessingException.class.isInstance(ct));
+            Assertions.assertTrue(ct != null, "Callback has not been hit");
+            Assertions.assertTrue(ResponseProcessingException.class.isInstance(ct),
+                    "The exception is " + ct.getClass().getName());
         }
     }
 }
diff --git a/tests/integration/jersey-4099/src/test/java/org/glassfish/jersey/tests/integration/jersey4099/PriorityAnnotationOnExceptionMappersTest.java b/tests/integration/jersey-4099/src/test/java/org/glassfish/jersey/tests/integration/jersey4099/PriorityAnnotationOnExceptionMappersTest.java
index 3d9ca2e..25e1899 100644
--- a/tests/integration/jersey-4099/src/test/java/org/glassfish/jersey/tests/integration/jersey4099/PriorityAnnotationOnExceptionMappersTest.java
+++ b/tests/integration/jersey-4099/src/test/java/org/glassfish/jersey/tests/integration/jersey4099/PriorityAnnotationOnExceptionMappersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Christian Kaltepoth. All rights reserved.
+ * Copyright (c) 2019, 2022 Christian Kaltepoth. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,15 +19,18 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 public class PriorityAnnotationOnExceptionMappersTest extends JerseyTest {
 
     private Weld weld;
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         weld = new Weld();
@@ -35,6 +38,7 @@
         super.setUp();
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         super.tearDown();
diff --git a/tests/integration/jersey-4321/src/test/java/org/glassfish/jersey/tests/integration/jersey4321/StreamingTest.java b/tests/integration/jersey-4321/src/test/java/org/glassfish/jersey/tests/integration/jersey4321/StreamingTest.java
index 93c441c..5c4be42 100644
--- a/tests/integration/jersey-4321/src/test/java/org/glassfish/jersey/tests/integration/jersey4321/StreamingTest.java
+++ b/tests/integration/jersey-4321/src/test/java/org/glassfish/jersey/tests/integration/jersey4321/StreamingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,7 +21,7 @@
 import org.glassfish.jersey.server.ChunkedOutput;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.inject.Singleton;
 import javax.ws.rs.GET;
@@ -33,7 +33,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Brought over from Apache connector module, Jersey 2.28 style
diff --git a/tests/integration/jersey-4507/src/test/java/org/glassfish/jersey/tests/integration/jersey4507/SSETest.java b/tests/integration/jersey-4507/src/test/java/org/glassfish/jersey/tests/integration/jersey4507/SSETest.java
index b02eda5..f111e44 100644
--- a/tests/integration/jersey-4507/src/test/java/org/glassfish/jersey/tests/integration/jersey4507/SSETest.java
+++ b/tests/integration/jersey-4507/src/test/java/org/glassfish/jersey/tests/integration/jersey4507/SSETest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,8 +27,9 @@
 import org.glassfish.jersey.media.sse.SseFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Assert;
-import org.junit.Test;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.core.Application;
@@ -99,8 +100,8 @@
                         }
                     });
 
-            Assert.assertTrue("Waiting for receiver thread to start has timed out.",
-                    startLatch.await(15000, TimeUnit.SECONDS));
+            Assertions.assertTrue(startLatch.await(15000, TimeUnit.SECONDS),
+                    "Waiting for receiver thread to start has timed out.");
 
             for (int i = 0; i < MAX_MESSAGES; i++) {
                 target(App.ROOT_PATH).request().post(Entity.text("message " + i));
@@ -108,7 +109,7 @@
 
             int i = 0;
             for (String message : futureMessages.get(50, TimeUnit.SECONDS)) {
-                Assert.assertThat("Unexpected SSE event data value.", message, equalTo("message " + i++));
+                MatcherAssert.assertThat("Unexpected SSE event data value.", message, equalTo("message " + i++));
             }
         } finally {
             executor.shutdownNow();
@@ -125,8 +126,8 @@
         closeLatch.await(15_000, TimeUnit.MILLISECONDS);
         // One ClientConfig is on the Client
         // + COUNT of them is created by .register(SseFeature.class)
-        Assert.assertEquals(COUNT + 1, atomicInteger.get());
-        Assert.assertEquals(0, closeLatch.getCount());
+        Assertions.assertEquals(COUNT + 1, atomicInteger.get());
+        Assertions.assertEquals(0, closeLatch.getCount());
     }
 
 
diff --git a/tests/integration/jersey-4542/src/test/java/org.glassfish.jersey.tests.integration.jersey4542/ProgrammaticValidationTest.java b/tests/integration/jersey-4542/src/test/java/org.glassfish.jersey.tests.integration.jersey4542/ProgrammaticValidationTest.java
index ba34e63..41ff2e3 100644
--- a/tests/integration/jersey-4542/src/test/java/org.glassfish.jersey.tests.integration.jersey4542/ProgrammaticValidationTest.java
+++ b/tests/integration/jersey-4542/src/test/java/org.glassfish.jersey.tests.integration.jersey4542/ProgrammaticValidationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,13 +30,14 @@
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * Bean Validation tests for programmatically created resources.
@@ -47,11 +48,12 @@
 
     Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -63,6 +65,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
diff --git a/tests/integration/jersey-4697/src/test/java/org/glassfish/jersey/tests/integration/jersey4697/MonitoringEventListenerTest.java b/tests/integration/jersey-4697/src/test/java/org/glassfish/jersey/tests/integration/jersey4697/MonitoringEventListenerTest.java
index 308d342..cfc4d23 100644
--- a/tests/integration/jersey-4697/src/test/java/org/glassfish/jersey/tests/integration/jersey4697/MonitoringEventListenerTest.java
+++ b/tests/integration/jersey-4697/src/test/java/org/glassfish/jersey/tests/integration/jersey4697/MonitoringEventListenerTest.java
@@ -46,15 +46,16 @@
 import org.glassfish.jersey.server.monitoring.RequestEvent;
 import org.glassfish.jersey.server.monitoring.RequestEventListener;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class MonitoringEventListenerTest extends JerseyTest {
 
     private static final long TIMEOUT = 1000;
+    private static final String APPLICATION_NAME = "MonitoringEventListenerTest";
     private static final String MBEAN_EXCEPTION =
-            "org.glassfish.jersey:type=MonitoringEventListenerTest,subType=Global,exceptions=ExceptionMapper";
+            "org.glassfish.jersey:type=" + APPLICATION_NAME + ",subType=Global,exceptions=ExceptionMapper";
 
     @Path("/example")
     public static class ExampleResource {
@@ -118,7 +119,7 @@
         resourceConfig.property(ServerProperties.MONITORING_STATISTICS_MBEANS_ENABLED, true);
         // Scheduler will process 1000 events per second
         resourceConfig.property(ServerProperties.MONITORING_STATISTICS_REFRESH_INTERVAL, 1);
-        resourceConfig.setApplicationName("MonitoringEventListenerTest");
+        resourceConfig.setApplicationName(APPLICATION_NAME);
         return resourceConfig;
     }
 
diff --git a/tests/integration/jersey-4722/src/test/java/org/glassfish/jersey/tests/integration/jersey4722/Jersey4722Test.java b/tests/integration/jersey-4722/src/test/java/org/glassfish/jersey/tests/integration/jersey4722/Jersey4722Test.java
index 277aea0..74a367bd 100644
--- a/tests/integration/jersey-4722/src/test/java/org/glassfish/jersey/tests/integration/jersey4722/Jersey4722Test.java
+++ b/tests/integration/jersey-4722/src/test/java/org/glassfish/jersey/tests/integration/jersey4722/Jersey4722Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.test.ServletDeploymentContext;
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.core.HttpHeaders;
@@ -52,7 +52,7 @@
         try (Response response = target().request()
                 .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON)
                 .put(Entity.entity("ENTITY", MediaType.TEXT_PLAIN_TYPE))) {
-            Assert.assertEquals(204, response.getStatus());
+            Assertions.assertEquals(204, response.getStatus());
         }
     }
 
@@ -60,7 +60,7 @@
     public void testDefaultConsumesMediaType() {
         try (Response response = target().request()
                 .put(Entity.entity("ENTITY", new MediaType("TEST", "TEST415")))) {
-            Assert.assertEquals(204, response.getStatus());
+            Assertions.assertEquals(204, response.getStatus());
         }
     }
 }
diff --git a/tests/integration/jersey-4949/src/test/java/org/glassfish/jersey/tests/integration/jersey4949/Jersey4949ITCase.java b/tests/integration/jersey-4949/src/test/java/org/glassfish/jersey/tests/integration/jersey4949/Jersey4949ITCase.java
index 9ddaa1e..592a761 100644
--- a/tests/integration/jersey-4949/src/test/java/org/glassfish/jersey/tests/integration/jersey4949/Jersey4949ITCase.java
+++ b/tests/integration/jersey-4949/src/test/java/org/glassfish/jersey/tests/integration/jersey4949/Jersey4949ITCase.java
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -57,9 +57,9 @@
             assertThat(response.getStatus(), is(200));
 
             String entity = response.readEntity(String.class);
-            Assert.assertTrue(entity.contains(CONTEXT_PATH));
-            Assert.assertTrue(entity.contains(SERVLET_PATH));
-            Assert.assertTrue(entity.contains(Issue4949Resource.PATH));
+            Assertions.assertTrue(entity.contains(CONTEXT_PATH));
+            Assertions.assertTrue(entity.contains(SERVLET_PATH));
+            Assertions.assertTrue(entity.contains(Issue4949Resource.PATH));
         }
     }
 }
diff --git a/tests/integration/jersey-780/src/test/java/org/glassfish/jersey/tests/integration/jersey780/HelloWorldResourceITCase.java b/tests/integration/jersey-780/src/test/java/org/glassfish/jersey/tests/integration/jersey780/HelloWorldResourceITCase.java
index f54d531..a849fd4 100644
--- a/tests/integration/jersey-780/src/test/java/org/glassfish/jersey/tests/integration/jersey780/HelloWorldResourceITCase.java
+++ b/tests/integration/jersey-780/src/test/java/org/glassfish/jersey/tests/integration/jersey780/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,8 +29,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Michal Gajdos
@@ -65,9 +65,9 @@
 
         connection.disconnect();
 
-        assertTrue("Wrong response status code: " + statusCode,
-                expectedCodes.contains(statusCode));
-        assertTrue("Wrong response status reason: " + statusMessage,
-                expectedPhrases.contains(statusMessage));
+        assertTrue(expectedCodes.contains(statusCode),
+                "Wrong response status code: " + statusCode);
+        assertTrue(expectedPhrases.contains(statusMessage),
+                "Wrong response status reason: " + statusMessage);
     }
 }
diff --git a/tests/integration/jetty-response-close/pom.xml b/tests/integration/jetty-response-close/pom.xml
index 2b04641..5ab2bb1 100644
--- a/tests/integration/jetty-response-close/pom.xml
+++ b/tests/integration/jetty-response-close/pom.xml
@@ -59,4 +59,14 @@
         <surefire.security.argline>-Djava.security.manager -Djava.security.policy=${project.build.directory}/test-classes/surefire.policy</surefire.security.argline>
     </properties>
 
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <forkMode>none</forkMode>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
\ No newline at end of file
diff --git a/tests/integration/microprofile/config/helidon/src/test/java/org/glassfish/jersey/tests/integration/config/HelidonConfigApplicationTest.java b/tests/integration/microprofile/config/helidon/src/test/java/org/glassfish/jersey/tests/integration/config/HelidonConfigApplicationTest.java
index 0543f63..4c6dd4e 100644
--- a/tests/integration/microprofile/config/helidon/src/test/java/org/glassfish/jersey/tests/integration/config/HelidonConfigApplicationTest.java
+++ b/tests/integration/microprofile/config/helidon/src/test/java/org/glassfish/jersey/tests/integration/config/HelidonConfigApplicationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.MediaType;
@@ -44,6 +44,6 @@
         final String response = target("/config/getProperty/{name}")
                 .resolveTemplate("name", "jersey.config.disableMetainfServicesLookup")
                 .request(MediaType.TEXT_PLAIN).get(String.class);
-        Assert.assertEquals("true", response);
+        Assertions.assertEquals("true", response);
     }
 }
\ No newline at end of file
diff --git a/tests/integration/microprofile/rest-client/pom.xml b/tests/integration/microprofile/rest-client/pom.xml
index e5b78cf..ba499b6 100644
--- a/tests/integration/microprofile/rest-client/pom.xml
+++ b/tests/integration/microprofile/rest-client/pom.xml
@@ -64,8 +64,8 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -154,7 +154,7 @@
                         <dependencies>
                             <dependency>
                                 <groupId>org.apache.maven.surefire</groupId>
-                                <artifactId>surefire-junit47</artifactId>
+                                <artifactId>surefire-junit-platform</artifactId>
                                 <version>${surefire.version}</version>
                             </dependency>
                             <dependency>
@@ -173,7 +173,7 @@
                     <plugin>
                         <groupId>uk.co.deliverymind</groupId>
                         <artifactId>wiremock-maven-plugin</artifactId>
-                        <version>2.7.0</version>
+                        <version>2.11.0</version>
                         <executions>
                             <execution>
                                 <phase>test-compile</phase>
diff --git a/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/ConnectorTest.java b/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/ConnectorTest.java
index 6a3cb19..a516052 100644
--- a/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/ConnectorTest.java
+++ b/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/ConnectorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,7 +29,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.testng.Assert.assertEquals;
 
diff --git a/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/ConsumesAndProducesTest.java b/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/ConsumesAndProducesTest.java
index 24a1c89..0c5f7a2 100644
--- a/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/ConsumesAndProducesTest.java
+++ b/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/ConsumesAndProducesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,11 +33,12 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Created by David Kral.
@@ -98,7 +99,7 @@
             .baseUri(new URI("http://localhost:9998"))
             .build(ApplicationResource.class);
 
-        assertEquals(app.regex("bar"), "bar");
+        assertEquals("bar", app.regex("bar"));
     }
 
     @Test
@@ -110,13 +111,15 @@
         assertEquals(app.regex0("foo", "1234"), "foo_1234");
     }
 
-    @Test(expected = WebApplicationException.class)
+    @Test
     public void testMethodWithRegexPathParam0Failure() throws URISyntaxException {
-        ApplicationResource app = RestClientBuilder.newBuilder()
-            .baseUri(new URI("http://localhost:9998"))
-            .build(ApplicationResource.class);
+        assertThrows(WebApplicationException.class, () -> {
+            ApplicationResource app = RestClientBuilder.newBuilder()
+                .baseUri(new URI("http://localhost:9998"))
+                .build(ApplicationResource.class);
 
-        app.regex0("foo", "12345");
+            app.regex0("foo", "12345");
+        });
     }
 
     private static class TestClientRequestFilter implements ClientRequestFilter {
diff --git a/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/InboundHeadersProviderTest.java b/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/InboundHeadersProviderTest.java
index 23aee87..922de9e 100644
--- a/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/InboundHeadersProviderTest.java
+++ b/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/InboundHeadersProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -41,10 +41,10 @@
 import org.glassfish.jersey.microprofile.restclient.InboundHeadersProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests if {@link InboundHeadersProvider} is called when it is actually needed.
@@ -60,7 +60,7 @@
         return new ResourceConfig(HeaderProviderTestResource.class);
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void clientSetup() {
         clientWithoutProvider = RestClientBuilder.newBuilder()
                 .baseUri(URI.create("http://localhost:9998"))
diff --git a/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/RestClientModelTest.java b/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/RestClientModelTest.java
index 186b3c6..07189c6 100644
--- a/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/RestClientModelTest.java
+++ b/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/restclient/RestClientModelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Created by David Kral.
diff --git a/tests/integration/microprofile/rest-client14-compatibility/pom.xml b/tests/integration/microprofile/rest-client14-compatibility/pom.xml
index fc40862..99b6681 100644
--- a/tests/integration/microprofile/rest-client14-compatibility/pom.xml
+++ b/tests/integration/microprofile/rest-client14-compatibility/pom.xml
@@ -91,8 +91,8 @@
             </exclusions>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/tests/integration/microprofile/rest-client14-compatibility/src/test/java/org/glassfish/jersey/tests/restclient/compatibility/Compatibility14Test.java b/tests/integration/microprofile/rest-client14-compatibility/src/test/java/org/glassfish/jersey/tests/restclient/compatibility/Compatibility14Test.java
index 8507722..bb58885 100644
--- a/tests/integration/microprofile/rest-client14-compatibility/src/test/java/org/glassfish/jersey/tests/restclient/compatibility/Compatibility14Test.java
+++ b/tests/integration/microprofile/rest-client14-compatibility/src/test/java/org/glassfish/jersey/tests/restclient/compatibility/Compatibility14Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,10 +24,11 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 import org.jboss.weld.environment.se.Weld;
-import org.junit.Assert;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.enterprise.context.RequestScoped;
 import javax.inject.Inject;
@@ -41,11 +42,12 @@
 public class Compatibility14Test extends JerseyTest {
     private Weld weld;
 
-    @Before
+    @BeforeEach
     public void setup() {
-        Assume.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
+        Assumptions.assumeTrue(Hk2InjectionManagerFactory.isImmediateStrategy());
     }
 
+    @BeforeEach
     @Override
     public void setUp() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -55,6 +57,7 @@
         }
     }
 
+    @AfterEach
     @Override
     public void tearDown() throws Exception {
         if (Hk2InjectionManagerFactory.isImmediateStrategy()) {
@@ -104,7 +107,7 @@
 
         try (Response r = target("/resource").request().get()) {
             String entity = r.readEntity(String.class);
-            Assert.assertEquals(new InnerResource().get(), entity);
+            Assertions.assertEquals(new InnerResource().get(), entity);
         }
 
         int warningCounts = 0;
@@ -114,6 +117,6 @@
             }
         }
 
-        Assert.assertEquals(3, warningCounts);
+        Assertions.assertEquals(3, warningCounts);
     }
 }
diff --git a/tests/integration/portability-jersey-2/src/test/java/org/glassfish/jersey/tests/integration/portability/PortabilityITCase.java b/tests/integration/portability-jersey-2/src/test/java/org/glassfish/jersey/tests/integration/portability/PortabilityITCase.java
index b158fda..dc0cba3 100644
--- a/tests/integration/portability-jersey-2/src/test/java/org/glassfish/jersey/tests/integration/portability/PortabilityITCase.java
+++ b/tests/integration/portability-jersey-2/src/test/java/org/glassfish/jersey/tests/integration/portability/PortabilityITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
diff --git a/tests/integration/property-check/pom.xml b/tests/integration/property-check/pom.xml
index ee47d73..a03d3d2 100644
--- a/tests/integration/property-check/pom.xml
+++ b/tests/integration/property-check/pom.xml
@@ -58,9 +58,8 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.13.1</version>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/tests/integration/property-check/src/test/java/org/glassfish/jersey/internal/config/SystemPropertiesConfigurationModelTest.java b/tests/integration/property-check/src/test/java/org/glassfish/jersey/internal/config/SystemPropertiesConfigurationModelTest.java
index f943686..2a07280 100644
--- a/tests/integration/property-check/src/test/java/org/glassfish/jersey/internal/config/SystemPropertiesConfigurationModelTest.java
+++ b/tests/integration/property-check/src/test/java/org/glassfish/jersey/internal/config/SystemPropertiesConfigurationModelTest.java
@@ -16,9 +16,9 @@
 
 package org.glassfish.jersey.internal.config;
 
-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 com.google.common.reflect.ClassPath;
 
@@ -44,7 +44,7 @@
 import org.glassfish.jersey.server.oauth1.OAuth1ServerProperties;
 import org.glassfish.jersey.servlet.ServletProperties;
 import org.glassfish.jersey.test.TestProperties;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class SystemPropertiesConfigurationModelTest {
 
@@ -70,9 +70,9 @@
                     containsAnnotation).stream().map(Class::getName).collect(Collectors.toList());
             assertFalse(propertyClasses.isEmpty());
             propertyClasses.removeAll(JerseySystemPropertiesConfigurationModel.PROPERTY_CLASSES);
-            assertEquals("New properties have been found. "
+            assertEquals(0, propertyClasses.size(), "New properties have been found. "
                     + "Make sure you add next classes in SystemPropertiesConfigurationModel.PROPERTY_CLASSES: "
-                    + propertyClasses, 0, propertyClasses.size());
+                    + propertyClasses);
         }
     }
 
diff --git a/tests/integration/property-check/src/test/java/org/glassfish/jersey/tests/integration/propertycheck/PropertyOverlappingCheckTest.java b/tests/integration/property-check/src/test/java/org/glassfish/jersey/tests/integration/propertycheck/PropertyOverlappingCheckTest.java
index 9eba3fa..6b5eb3d 100644
--- a/tests/integration/property-check/src/test/java/org/glassfish/jersey/tests/integration/propertycheck/PropertyOverlappingCheckTest.java
+++ b/tests/integration/property-check/src/test/java/org/glassfish/jersey/tests/integration/propertycheck/PropertyOverlappingCheckTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,8 +40,8 @@
 import org.glassfish.jersey.servlet.ServletProperties;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test, that there are no properties with overlapping names in known Jersey {@code *Properties} and {@code *Feature}
diff --git a/tests/integration/reactive-streams/sse/pom.xml b/tests/integration/reactive-streams/sse/pom.xml
index 021862a..a580842 100644
--- a/tests/integration/reactive-streams/sse/pom.xml
+++ b/tests/integration/reactive-streams/sse/pom.xml
@@ -40,8 +40,8 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/tests/integration/reactive-streams/sse/src/test/java/org/glassfish/jersey/media/sse/internal/SseSubscriberTest.java b/tests/integration/reactive-streams/sse/src/test/java/org/glassfish/jersey/media/sse/internal/SseSubscriberTest.java
index 27c06b1..d7a3afd 100644
--- a/tests/integration/reactive-streams/sse/src/test/java/org/glassfish/jersey/media/sse/internal/SseSubscriberTest.java
+++ b/tests/integration/reactive-streams/sse/src/test/java/org/glassfish/jersey/media/sse/internal/SseSubscriberTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,14 +40,14 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.sse.SseEventSource;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import io.reactivex.Flowable;
 import org.glassfish.jersey.internal.jsr166.Flow;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Daniel Kec
diff --git a/tests/integration/security-digest/src/test/java/org/glassfish/jersey/tests/integration/securitydigest/SecurityDigestAuthenticationITCase.java b/tests/integration/security-digest/src/test/java/org/glassfish/jersey/tests/integration/securitydigest/SecurityDigestAuthenticationITCase.java
index 22b422c..28c8613 100644
--- a/tests/integration/security-digest/src/test/java/org/glassfish/jersey/tests/integration/securitydigest/SecurityDigestAuthenticationITCase.java
+++ b/tests/integration/security-digest/src/test/java/org/glassfish/jersey/tests/integration/securitydigest/SecurityDigestAuthenticationITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -32,8 +32,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Miroslav Fuksa
@@ -69,8 +69,8 @@
         final Response response = target().path("rest/resource")
                 .register(feature).request().get();
 
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("homer/scheme:DIGEST", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("homer/scheme:DIGEST", response.readEntity(String.class));
     }
 
     @Test
@@ -83,7 +83,7 @@
         final Response response = target().path("rest/resource")
                 .register(feature).request().get();
 
-        Assert.assertEquals(401, response.getStatus());
+        Assertions.assertEquals(401, response.getStatus());
     }
 
     @Test
@@ -97,8 +97,8 @@
                 .register(feature).request()
                 .post(Entity.entity("helloworld", MediaType.TEXT_PLAIN_TYPE));
 
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("post-helloworld-homer/scheme:DIGEST", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("post-helloworld-homer/scheme:DIGEST", response.readEntity(String.class));
     }
 
     @Test
@@ -111,7 +111,7 @@
         final Response response = target().path("rest/resource/sub")
                 .register(feature).request().get();
 
-        Assert.assertEquals(403, response.getStatus());
+        Assertions.assertEquals(403, response.getStatus());
     }
 
     @Test
@@ -124,8 +124,8 @@
         final Response response = target().path("rest/resource/sub")
                 .register(feature).request().get();
 
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("subget-bart/scheme:DIGEST", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("subget-bart/scheme:DIGEST", response.readEntity(String.class));
     }
 
     @Test
@@ -139,8 +139,8 @@
         final Response response = target().path("rest/resource/locator")
                 .register(feature).request().get();
 
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("locator-bart/scheme:DIGEST", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("locator-bart/scheme:DIGEST", response.readEntity(String.class));
     }
 
     @Test
@@ -154,23 +154,23 @@
                 .register(haf);
         Response response = target.request().get();
 
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("homer/scheme:DIGEST", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("homer/scheme:DIGEST", response.readEntity(String.class));
 
         response = target.request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("homer/scheme:DIGEST", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("homer/scheme:DIGEST", response.readEntity(String.class));
 
         response = target.path("sub").request().get();
-        Assert.assertEquals(403, response.getStatus());
+        Assertions.assertEquals(403, response.getStatus());
 
         response = target.request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("homer/scheme:DIGEST", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("homer/scheme:DIGEST", response.readEntity(String.class));
 
         response = target.path("locator").request().get();
-        Assert.assertEquals(200, response.getStatus());
-        Assert.assertEquals("locator-homer/scheme:DIGEST", response.readEntity(String.class));
+        Assertions.assertEquals(200, response.getStatus());
+        Assertions.assertEquals("locator-homer/scheme:DIGEST", response.readEntity(String.class));
     }
 
 }
diff --git a/tests/integration/servlet-2.5-autodiscovery-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_autodiscovery_1/LanguageVariantResourceITCase.java b/tests/integration/servlet-2.5-autodiscovery-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_autodiscovery_1/LanguageVariantResourceITCase.java
index af45d99..80806a9 100644
--- a/tests/integration/servlet-2.5-autodiscovery-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_autodiscovery_1/LanguageVariantResourceITCase.java
+++ b/tests/integration/servlet-2.5-autodiscovery-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_autodiscovery_1/LanguageVariantResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/integration/servlet-2.5-autodiscovery-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_autodiscovery_2/ValidationResourceITCase.java b/tests/integration/servlet-2.5-autodiscovery-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_autodiscovery_2/ValidationResourceITCase.java
index 646aeda..4bb0205 100644
--- a/tests/integration/servlet-2.5-autodiscovery-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_autodiscovery_2/ValidationResourceITCase.java
+++ b/tests/integration/servlet-2.5-autodiscovery-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_autodiscovery_2/ValidationResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/integration/servlet-2.5-filter/src/test/java/org/glassfish/jersey/tests/integration/servlet_2_5_filter/MyResourceITCase.java b/tests/integration/servlet-2.5-filter/src/test/java/org/glassfish/jersey/tests/integration/servlet_2_5_filter/MyResourceITCase.java
index 7bff80f..4b11bcf 100644
--- a/tests/integration/servlet-2.5-filter/src/test/java/org/glassfish/jersey/tests/integration/servlet_2_5_filter/MyResourceITCase.java
+++ b/tests/integration/servlet-2.5-filter/src/test/java/org/glassfish/jersey/tests/integration/servlet_2_5_filter/MyResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Adam Lindenthal
diff --git a/tests/integration/servlet-2.5-inflector-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_inflector_1/InflectorInjectionTestITCase.java b/tests/integration/servlet-2.5-inflector-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_inflector_1/InflectorInjectionTestITCase.java
index 9ccb2cb..77e5d16 100644
--- a/tests/integration/servlet-2.5-inflector-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_inflector_1/InflectorInjectionTestITCase.java
+++ b/tests/integration/servlet-2.5-inflector-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_inflector_1/InflectorInjectionTestITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/integration/servlet-2.5-init-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_1/Servlet25Init1ITCase.java b/tests/integration/servlet-2.5-init-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_1/Servlet25Init1ITCase.java
index 48324c9..97ef64c 100644
--- a/tests/integration/servlet-2.5-init-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_1/Servlet25Init1ITCase.java
+++ b/tests/integration/servlet-2.5-init-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_1/Servlet25Init1ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,11 +28,11 @@
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.glassfish.jersey.uri.UriTemplate;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Servlet 2.5 initialization test #01.
@@ -61,10 +61,9 @@
     @Test
     public void testHelloWorldAtWrongPath() {
         Response r = target().path("application_path/helloworld").request().get();
-        assertTrue(
+        assertTrue(r.getStatus() >= 400,
                 "Request to application_path/helloworld should have failed, but did not. That means two applications are "
-                        + "registered.",
-                r.getStatus() >= 400);
+                        + "registered.");
     }
 
     @Test
@@ -76,13 +75,13 @@
     @Test
     public void testUnreachableResource() {
         Response r = target().path("servlet_path/unreachable").request().get();
-        assertTrue("Managed to reach a resource that is not registered in the application.", r.getStatus() >= 400);
+        assertTrue(r.getStatus() >= 400, "Managed to reach a resource that is not registered in the application.");
     }
 
     @Test
     public void testUnreachableResourceAtWrongPath() {
         Response r = target().path("application_path/unreachable").request().get();
-        assertTrue("Managed to reach a resource that is not registered in the application.", r.getStatus() >= 400);
+        assertTrue(r.getStatus() >= 400, "Managed to reach a resource that is not registered in the application.");
     }
 
     @Test
diff --git a/tests/integration/servlet-2.5-init-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_2/HelloWorldResourceITCase.java b/tests/integration/servlet-2.5-init-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_2/HelloWorldResourceITCase.java
index 6d97207..b6c5a74 100644
--- a/tests/integration/servlet-2.5-init-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_2/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-2.5-init-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_2/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/servlet-2.5-init-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_3/HelloWorldResourceITCase.java b/tests/integration/servlet-2.5-init-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_3/HelloWorldResourceITCase.java
index b87c539..3a63913 100644
--- a/tests/integration/servlet-2.5-init-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_3/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-2.5-init-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_3/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/servlet-2.5-init-4/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_4/HelloWorldResourceITCase.java b/tests/integration/servlet-2.5-init-4/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_4/HelloWorldResourceITCase.java
index 1efb844..ea791df 100644
--- a/tests/integration/servlet-2.5-init-4/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_4/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-2.5-init-4/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_4/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/servlet-2.5-init-5/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_5/HelloWorldResourceITCase.java b/tests/integration/servlet-2.5-init-5/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_5/HelloWorldResourceITCase.java
index ab485e1..a6f30ae 100644
--- a/tests/integration/servlet-2.5-init-5/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_5/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-2.5-init-5/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_5/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,10 +24,10 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
@@ -53,22 +53,21 @@
     @Test
     public void testHelloWorldAtWrongPath() {
         Response r = target().path("application_path/filter_path/helloworld").request().get();
-        assertTrue(
+        assertTrue(r.getStatus() >= 400,
                 "Request to application_path/helloworld should have failed, but did not. That means two applications are "
-                        + "registered.",
-                r.getStatus() >= 400);
+                        + "registered.");
     }
 
     @Test
-    @Ignore
+    @Disabled
     public void testUnreachableResource() {
         Response r = target().path("filter_path/unreachable").request().get();
-        assertTrue("Managed to reach a resource that is not registered in the application.", r.getStatus() >= 400);
+        assertTrue(r.getStatus() >= 400, "Managed to reach a resource that is not registered in the application.");
     }
 
     @Test
     public void testUnreachableResourceAtWrongPath() {
         Response r = target().path("application_path/filter_path/unreachable").request().get();
-        assertTrue("Managed to reach a resource that is not registered in the application.", r.getStatus() >= 400);
+        assertTrue(r.getStatus() >= 400, "Managed to reach a resource that is not registered in the application.");
     }
 }
diff --git a/tests/integration/servlet-2.5-init-6/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_6/HelloWorldResourceITCase.java b/tests/integration/servlet-2.5-init-6/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_6/HelloWorldResourceITCase.java
index a8d2c8c..3d8e2b7 100644
--- a/tests/integration/servlet-2.5-init-6/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_6/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-2.5-init-6/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_6/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/servlet-2.5-init-7/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_7/HelloWorldResourceITCase.java b/tests/integration/servlet-2.5-init-7/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_7/HelloWorldResourceITCase.java
index c40a8cf..ba4570b 100644
--- a/tests/integration/servlet-2.5-init-7/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_7/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-2.5-init-7/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_7/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/servlet-2.5-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_8/HelloWorldResourceITCase.java b/tests/integration/servlet-2.5-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_8/HelloWorldResourceITCase.java
index 418e5fa..9b50ba7 100644
--- a/tests/integration/servlet-2.5-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_8/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-2.5-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_init_8/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/BookstoreITCase.java b/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/BookstoreITCase.java
index a751b9c..40b1ab9 100644
--- a/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/BookstoreITCase.java
+++ b/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/BookstoreITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,10 +22,10 @@
 
 import org.glassfish.jersey.tests.integration.servlet_25_mvc_1.resource.Bookstore;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class BookstoreITCase extends TestSupport {
 
@@ -42,8 +42,8 @@
     public void testResourceAsXml() throws Exception {
         final Bookstore response = target().request("application/xml").get(Bookstore.class);
 
-        assertNotNull("Should have returned a bookstore!", response);
-        assertEquals("bookstore name", "Czech Bookstore", response.getName());
+        assertNotNull(response, "Should have returned a bookstore!");
+        assertEquals("Czech Bookstore", response.getName(), "bookstore name");
     }
 
     @Test
@@ -54,12 +54,12 @@
     }
 
     private void assertStatusContentTypeAndLength(Response response) {
-        assertEquals("Should have returned a 200 response!", 200, response.getStatus());
-        assertTrue("Should contain a Content-Type header!", response.getHeaders().containsKey(HttpHeaders.CONTENT_TYPE));
-        assertEquals("Should have a single Content-Type header!", 1, response.getHeaders().get(HttpHeaders.CONTENT_TYPE).size());
-        assertTrue("Should contain a Content-Length header!", response.getHeaders().containsKey(HttpHeaders.CONTENT_LENGTH));
-        assertEquals("Should have a single Content-Length header!",
-                1, response.getHeaders().get(HttpHeaders.CONTENT_LENGTH).size());
+        assertEquals(200, response.getStatus(), "Should have returned a 200 response!");
+        assertTrue(response.getHeaders().containsKey(HttpHeaders.CONTENT_TYPE), "Should contain a Content-Type header!");
+        assertEquals(1, response.getHeaders().get(HttpHeaders.CONTENT_TYPE).size(), "Should have a single Content-Type header!");
+        assertTrue(response.getHeaders().containsKey(HttpHeaders.CONTENT_LENGTH), "Should contain a Content-Length header!");
+        assertEquals(1, response.getHeaders().get(HttpHeaders.CONTENT_LENGTH).size(),
+                "Should have a single Content-Length header!");
     }
 
     @Test
diff --git a/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/ItemITCase.java b/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/ItemITCase.java
index 90d9118..0fa94d5 100644
--- a/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/ItemITCase.java
+++ b/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/ItemITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,10 +21,10 @@
 
 import org.glassfish.jersey.tests.integration.servlet_25_mvc_1.resource.Book;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 public class ItemITCase extends TestSupport {
 
@@ -44,8 +44,8 @@
         System.out.println("Item XML is: " + text);
 
         final Book response = item1resource().request("application/xml").get(Book.class);
-        assertNotNull("Should have returned an item!", response);
-        assertEquals("item title", "Svejk", response.getTitle());
+        assertNotNull(response, "Should have returned an item!");
+        assertEquals("Svejk", response.getTitle(), "item title");
     }
 
     @Test
diff --git a/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/TestSupport.java b/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/TestSupport.java
index 0ae958f..50b8938 100644
--- a/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/TestSupport.java
+++ b/tests/integration/servlet-2.5-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_1/TestSupport.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-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;
 
 /**
  * A base class for test cases which boots up a GlassFish server for in container testing of RESTful resources.
@@ -45,13 +45,13 @@
     }
 
     protected void assertHtmlResponse(String response) {
-        assertNotNull("No text returned!", response);
+        assertNotNull(response, "No text returned!");
 
         assertResponseContains(response, "<html>");
         assertResponseContains(response, "</html>");
     }
 
     protected void assertResponseContains(String response, String text) {
-        assertTrue("Response should contain " + text + " but was: " + response, response.contains(text));
+        assertTrue(response.contains(text), "Response should contain " + text + " but was: " + response);
     }
 }
diff --git a/tests/integration/servlet-2.5-mvc-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_2/BookstoreITCase.java b/tests/integration/servlet-2.5-mvc-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_2/BookstoreITCase.java
index 0d20972..5089322 100644
--- a/tests/integration/servlet-2.5-mvc-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_2/BookstoreITCase.java
+++ b/tests/integration/servlet-2.5-mvc-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_2/BookstoreITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,9 +20,9 @@
 
 import org.glassfish.jersey.tests.integration.servlet_25_mvc_2.resource.Bookstore;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class BookstoreITCase extends TestSupport {
 
@@ -45,7 +45,7 @@
     }
 
     protected void assertBookstoreXmlResponse(final Bookstore response) {
-        assertNotNull("Should have returned a bookstore!", response);
-        assertEquals("bookstore name", "Czech Bookstore", response.getName());
+        assertNotNull(response, "Should have returned a bookstore!");
+        assertEquals("Czech Bookstore", response.getName(), "bookstore name");
     }
 }
diff --git a/tests/integration/servlet-2.5-mvc-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_2/ItemITCase.java b/tests/integration/servlet-2.5-mvc-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_2/ItemITCase.java
index e4a793b..62dab08 100644
--- a/tests/integration/servlet-2.5-mvc-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_2/ItemITCase.java
+++ b/tests/integration/servlet-2.5-mvc-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_2/ItemITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,9 +21,9 @@
 
 import org.glassfish.jersey.tests.integration.servlet_25_mvc_2.resource.Book;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class ItemITCase extends TestSupport {
 
@@ -48,8 +48,8 @@
     }
 
     private void assertItemXmlResponse(final Book response) {
-        assertNotNull("Should have returned an item!", response);
-        assertEquals("item title", "Svejk", response.getTitle());
+        assertNotNull(response, "Should have returned an item!");
+        assertEquals("Svejk", response.getTitle(), "item title");
     }
 
     protected WebTarget item1resource() {
diff --git a/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/BookstoreITCase.java b/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/BookstoreITCase.java
index 11f57e4..35ddced 100644
--- a/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/BookstoreITCase.java
+++ b/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/BookstoreITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,10 +20,10 @@
 
 import org.glassfish.jersey.tests.integration.servlet_25_mvc_3.resource.Bookstore;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-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;
 
 public class BookstoreITCase extends TestSupport {
 
@@ -40,8 +40,8 @@
     public void testResourceAsXml() throws Exception {
         final Bookstore response = target().request("application/xml").get(Bookstore.class);
 
-        assertNotNull("Should have returned a bookstore!", response);
-        assertEquals("bookstore name", "Czech Bookstore", response.getName());
+        assertNotNull(response, "Should have returned a bookstore!");
+        assertEquals("Czech Bookstore", response.getName(), "bookstore name");
     }
 
     @Test
diff --git a/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/ItemITCase.java b/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/ItemITCase.java
index 0cb6d97..d0c3ba2 100644
--- a/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/ItemITCase.java
+++ b/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/ItemITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,14 +21,14 @@
 import javax.ws.rs.core.Response;
 
 import org.glassfish.jersey.tests.integration.servlet_25_mvc_3.resource.Book;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 import java.nio.charset.Charset;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class ItemITCase extends TestSupport {
 
@@ -52,7 +52,7 @@
     }
 
     @Test
-    @Ignore("Jetty 9 is ignoring the charset")
+    @Disabled("Jetty 9 is ignoring the charset")
     public void testResourceAsHtmlIso88592() throws Exception {
         final Response response = item1resource().path("iso").request().get();
         response.bufferEntity();
@@ -60,13 +60,13 @@
         final String htmlUtf8 = response.readEntity(String.class);
 
         assertItemHtmlResponse(htmlUtf8);
-        assertFalse("Response shouldn't contain Ha\u0161ek but was: " + htmlUtf8, htmlUtf8.contains("Ha\u0161ek"));
+        assertFalse(htmlUtf8.contains("Ha\u0161ek"), "Response shouldn't contain Ha\u0161ek but was: " + htmlUtf8);
 
         final byte[] bytes = response.readEntity(byte[].class);
         final String htmlIso = new String(bytes, "ISO-8859-2");
 
         assertItemHtmlResponse(htmlIso);
-        assertFalse("Response shouldn't contain Ha\u0161ek but was: " + htmlIso, htmlIso.contains("Ha\u0161ek"));
+        assertFalse(htmlIso.contains("Ha\u0161ek"), "Response shouldn't contain Ha\u0161ek but was: " + htmlIso);
         assertResponseContains(htmlIso, new String("Ha\u0161ek".getBytes(Charset.forName("UTF-8")), "ISO-8859-2"));
     }
 
@@ -76,8 +76,8 @@
         System.out.println("Item XML is: " + text);
 
         final Book response = item1resource().request("application/xml").get(Book.class);
-        assertNotNull("Should have returned an item!", response);
-        assertEquals("item title", "Svejk", response.getTitle());
+        assertNotNull(response, "Should have returned an item!");
+        assertEquals("Svejk", response.getTitle(), "item title");
     }
 
     @Test
diff --git a/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/TestSupport.java b/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/TestSupport.java
index 69121ee..eb101a2 100644
--- a/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/TestSupport.java
+++ b/tests/integration/servlet-2.5-mvc-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_mvc_3/TestSupport.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-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;
 
 /**
  * A base class for test cases which boots up a GlassFish server for in container testing of RESTful resources.
@@ -48,13 +48,13 @@
     }
 
     protected void assertHtmlResponse(final String response) {
-        assertNotNull("No text returned!", response);
+        assertNotNull(response, "No text returned!");
 
         assertResponseContains(response, "<html>");
         assertResponseContains(response, "</html>");
     }
 
     protected void assertResponseContains(final String response, final String text) {
-        assertTrue("Response should contain " + text + " but was: " + response, response.contains(text));
+        assertTrue(response.contains(text), "Response should contain " + text + " but was: " + response);
     }
 }
diff --git a/tests/integration/servlet-2.5-reload/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_config_reload/ReloadTestIT.java b/tests/integration/servlet-2.5-reload/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_config_reload/ReloadTestIT.java
index 67095bb..21b86d4 100644
--- a/tests/integration/servlet-2.5-reload/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_config_reload/ReloadTestIT.java
+++ b/tests/integration/servlet-2.5-reload/src/test/java/org/glassfish/jersey/tests/integration/servlet_25_config_reload/ReloadTestIT.java
@@ -24,10 +24,10 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Jakub Podlesak
@@ -45,7 +45,7 @@
     }
 
     @Test
-    @Ignore //TODO - fix after 2.36
+    @Disabled //TODO - fix after 2.36
     public void testReload() throws Exception {
         Response response = target().path("helloworld").request().get();
         assertEquals(200, response.getStatus());
diff --git a/tests/integration/servlet-3-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncServletResourceITCase.java b/tests/integration/servlet-3-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncServletResourceITCase.java
index fb202af..e7ba9a6 100644
--- a/tests/integration/servlet-3-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncServletResourceITCase.java
+++ b/tests/integration/servlet-3-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncServletResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -40,9 +40,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Asynchronous servlet-deployed resource test.
@@ -139,8 +139,8 @@
             if (debugMode) {
                 getRequestLatch.await();
             } else {
-                assertTrue("Waiting for all GET requests to complete has timed out.", getRequestLatch.await(LATCH_WAIT_TIMEOUT,
-                        TimeUnit.SECONDS));
+                assertTrue(getRequestLatch.await(LATCH_WAIT_TIMEOUT, TimeUnit.SECONDS),
+                        "Waiting for all GET requests to complete has timed out.");
             }
         } finally {
             executor.shutdownNow();
@@ -156,12 +156,10 @@
 
         assertEquals(MAX_MESSAGES, getResponses.size());
         for (Map.Entry<Integer, ResponseRecord> entry : getResponses.entrySet()) {
-            assertEquals(
-                    "Unexpected GET response status for request " + entry.getKey(),
-                    200, entry.getValue().status);
-            assertEquals(
-                    "Unexpected GET response message for request " + entry.getKey(),
-                    expectedResponse, entry.getValue().message);
+            assertEquals(200, entry.getValue().status,
+                    "Unexpected GET response status for request " + entry.getKey());
+            assertEquals(expectedResponse, entry.getValue().message,
+                    "Unexpected GET response message for request " + entry.getKey());
         }
     }
 
@@ -253,10 +251,10 @@
                 postRequestLatch.await();
                 getRequestLatch.await();
             } else {
-                assertTrue("Waiting for all POST requests to complete has timed out.",
-                        postRequestLatch.await(LATCH_WAIT_TIMEOUT, TimeUnit.SECONDS));
-                assertTrue("Waiting for all GET requests to complete has timed out.", getRequestLatch.await(LATCH_WAIT_TIMEOUT,
-                        TimeUnit.SECONDS));
+                assertTrue(postRequestLatch.await(LATCH_WAIT_TIMEOUT, TimeUnit.SECONDS),
+                        "Waiting for all POST requests to complete has timed out.");
+                assertTrue(getRequestLatch.await(LATCH_WAIT_TIMEOUT, TimeUnit.SECONDS),
+                        "Waiting for all GET requests to complete has timed out.");
             }
         } finally {
             executor.shutdownNow();
@@ -278,17 +276,16 @@
 
         assertEquals(MAX_MESSAGES, postResponses.size());
         for (Map.Entry<Integer, String> postResponseEntry : postResponses.entrySet()) {
-            assertTrue("Unexpected POST notification response for message " + postResponseEntry.getKey(),
-                    postResponseEntry.getValue().startsWith(AsyncServletResource.CANCELED));
+            assertTrue(postResponseEntry.getValue().startsWith(AsyncServletResource.CANCELED),
+                    "Unexpected POST notification response for message " + postResponseEntry.getKey());
         }
 
         assertEquals(MAX_MESSAGES, getResponses.size());
         final Collection<Integer> getResponseKeys = getResponses.keySet();
         for (int i = 0; i < MAX_MESSAGES; i++) {
-            assertTrue("Detected a GET message response loss: " + i, getResponseKeys.contains(i));
+            assertTrue(getResponseKeys.contains(i), "Detected a GET message response loss: " + i);
             final String getResponseEntry = getResponses.get(i);
-            assertTrue("Unexpected canceled GET response status for request " + i,
-                    getResponseEntry.startsWith("503: "));
+            assertTrue(getResponseEntry.startsWith("503: "), "Unexpected canceled GET response status for request " + i);
         }
     }
 }
diff --git a/tests/integration/servlet-3-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncTimeoutResourceITCase.java b/tests/integration/servlet-3-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncTimeoutResourceITCase.java
index 8bfb646..ee941a3 100644
--- a/tests/integration/servlet-3-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncTimeoutResourceITCase.java
+++ b/tests/integration/servlet-3-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncTimeoutResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -29,9 +29,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Asynchronous servlet-deployed resource for testing {@link javax.ws.rs.container.AsyncResponse async response} timeouts.
diff --git a/tests/integration/servlet-3-chunked-io/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_chunked_io/ChunkedInputOutputITCase.java b/tests/integration/servlet-3-chunked-io/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_chunked_io/ChunkedInputOutputITCase.java
index e71406d..a4dcefc 100644
--- a/tests/integration/servlet-3-chunked-io/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_chunked_io/ChunkedInputOutputITCase.java
+++ b/tests/integration/servlet-3-chunked-io/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_chunked_io/ChunkedInputOutputITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -35,8 +35,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Chunked I/O integration tests.
@@ -83,11 +83,10 @@
     public void testChunkedOutputToSingleString() throws Exception {
         final String response = target().path("test/from-string").request(MediaType.APPLICATION_JSON_TYPE).get(String.class);
 
-        assertEquals("Unexpected value of chunked response unmarshalled as a single string.",
-                "{\"id\":0,\"data\":\"test\"}\r\n"
+        assertEquals("{\"id\":0,\"data\":\"test\"}\r\n"
                         + "{\"id\":1,\"data\":\"test\"}\r\n"
                         + "{\"id\":2,\"data\":\"test\"}\r\n",
-                response);
+                response, "Unexpected value of chunked response unmarshalled as a single string.");
     }
 
     /**
@@ -104,11 +103,11 @@
         int counter = 0;
         Message chunk;
         while ((chunk = input.read()) != null) {
-            assertEquals("Unexpected value of chunk " + counter, new Message(counter, "test"), chunk);
+            assertEquals(new Message(counter, "test"), chunk, "Unexpected value of chunk " + counter);
             counter++;
         }
 
-        assertEquals("Unexpected numbed of received chunks.", 3, counter);
+        assertEquals(3, counter, "Unexpected numbed of received chunks.");
     }
 
     /**
@@ -125,11 +124,11 @@
         int counter = 0;
         Message chunk;
         while ((chunk = input.read()) != null) {
-            assertEquals("Unexpected value of chunk " + counter, new Message(counter, "test"), chunk);
+            assertEquals(new Message(counter, "test"), chunk, "Unexpected value of chunk " + counter);
             counter++;
         }
 
-        assertEquals("Unexpected numbed of received chunks.", 3, counter);
+        assertEquals(3, counter, "Unexpected numbed of received chunks.");
     }
 
     /**
@@ -144,11 +143,11 @@
         int counter = 0;
         Message chunk;
         while ((chunk = input.read()) != null) {
-            assertEquals("Unexpected value of chunk " + counter, new Message(counter, "test"), chunk);
+            assertEquals(new Message(counter, "test"), chunk, "Unexpected value of chunk " + counter);
             counter++;
         }
 
-        assertEquals("Unexpected numbed of received chunks.", 3, counter);
+        assertEquals(3, counter, "Unexpected numbed of received chunks.");
     }
 
     /**
@@ -169,10 +168,10 @@
         String line;
         int counter = 0;
         while ((line = reader.readLine()) != null) {
-            assertEquals("Unexpected value of chunk " + counter, new Message(counter, "test").toString(), line);
+            assertEquals(new Message(counter, "test").toString(), line, "Unexpected value of chunk " + counter);
             counter++;
         }
 
-        assertEquals("Unexpected numbed of received chunks.", 3, counter);
+        assertEquals(3, counter, "Unexpected numbed of received chunks.");
     }
 }
diff --git a/tests/integration/servlet-3-filter/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_filter/MyResourceITCase.java b/tests/integration/servlet-3-filter/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_filter/MyResourceITCase.java
index e3eb454..31eab22 100644
--- a/tests/integration/servlet-3-filter/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_filter/MyResourceITCase.java
+++ b/tests/integration/servlet-3-filter/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_filter/MyResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Adam Lindenthal
diff --git a/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncCancelTimeoutResourceTest.java b/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncCancelTimeoutResourceTest.java
index 5735317..9ac8798 100644
--- a/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncCancelTimeoutResourceTest.java
+++ b/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncCancelTimeoutResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,9 +31,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Asynchronous servlet-deployed resource for testing {@link javax.ws.rs.container.AsyncResponse async response} timeouts.
diff --git a/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncResumeTimeoutResourceTest.java b/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncResumeTimeoutResourceTest.java
index a40976a..ddcb4e8 100644
--- a/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncResumeTimeoutResourceTest.java
+++ b/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncResumeTimeoutResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,9 +31,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Asynchronous servlet-deployed resource for testing {@link javax.ws.rs.container.AsyncResponse async response} timeouts.
diff --git a/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncServletResourceTest.java b/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncServletResourceTest.java
index 3656086..e583eb9 100644
--- a/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncServletResourceTest.java
+++ b/tests/integration/servlet-3-gf-async/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_async/AsyncServletResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -42,9 +42,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Asynchronous servlet-deployed resource test.
@@ -144,8 +144,8 @@
             if (debugMode) {
                 getRequestLatch.await();
             } else {
-                assertTrue("Waiting for all GET requests to complete has timed out.",
-                        getRequestLatch.await(LATCH_WAIT_TIMEOUT * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS));
+                assertTrue(getRequestLatch.await(LATCH_WAIT_TIMEOUT * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS),
+                        "Waiting for all GET requests to complete has timed out.");
             }
         } finally {
             executor.shutdownNow();
@@ -160,9 +160,9 @@
 
         assertEquals(MAX_MESSAGES, getResponses.size());
         for (final Map.Entry<Integer, ResponseRecord> entry : getResponses.entrySet()) {
-            assertEquals("Unexpected GET response status for request " + entry.getKey(), 200, entry.getValue().status);
-            assertEquals("Unexpected GET response message for request " + entry.getKey(), expectedResponse,
-                    entry.getValue().message);
+            assertEquals(200, entry.getValue().status, "Unexpected GET response status for request " + entry.getKey());
+            assertEquals(expectedResponse, entry.getValue().message,
+                    "Unexpected GET response message for request " + entry.getKey());
         }
     }
 
@@ -254,11 +254,10 @@
                 postRequestLatch.await();
                 getRequestLatch.await();
             } else {
-                assertTrue("Waiting for all POST requests to complete has timed out.",
-                        postRequestLatch.await(LATCH_WAIT_TIMEOUT * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS));
-                assertTrue("Waiting for all GET requests to complete has timed out.",
-                        getRequestLatch.await(LATCH_WAIT_TIMEOUT * getAsyncTimeoutMultiplier(),
-                                TimeUnit.SECONDS));
+                assertTrue(postRequestLatch.await(LATCH_WAIT_TIMEOUT * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS),
+                        "Waiting for all POST requests to complete has timed out.");
+                assertTrue(getRequestLatch.await(LATCH_WAIT_TIMEOUT * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS),
+                        "Waiting for all GET requests to complete has timed out.");
             }
         } finally {
             executor.shutdownNow();
@@ -278,16 +277,16 @@
 
         assertEquals(MAX_MESSAGES, postResponses.size());
         for (final Map.Entry<Integer, String> postResponseEntry : postResponses.entrySet()) {
-            assertTrue("Unexpected POST notification response for message " + postResponseEntry.getKey(),
-                    postResponseEntry.getValue().startsWith(AsyncServletResource.CANCELED));
+            assertTrue(postResponseEntry.getValue().startsWith(AsyncServletResource.CANCELED),
+                    "Unexpected POST notification response for message " + postResponseEntry.getKey());
         }
 
         assertEquals(MAX_MESSAGES, getResponses.size());
         final Collection<Integer> getResponseKeys = getResponses.keySet();
         for (int i = 0; i < MAX_MESSAGES; i++) {
-            assertTrue("Detected a GET message response loss: " + i, getResponseKeys.contains(i));
+            assertTrue(getResponseKeys.contains(i), "Detected a GET message response loss: " + i);
             final String getResponseEntry = getResponses.get(i);
-            assertTrue("Unexpected canceled GET response status for request " + i, getResponseEntry.startsWith("503: "));
+            assertTrue(getResponseEntry.startsWith("503: "), "Unexpected canceled GET response status for request " + i);
         }
     }
 }
diff --git a/tests/integration/servlet-3-inflector-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_inflector_1/InflectorInjectionTestITCase.java b/tests/integration/servlet-3-inflector-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_inflector_1/InflectorInjectionTestITCase.java
index 4dff377..651e2a5 100644
--- a/tests/integration/servlet-3-inflector-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_inflector_1/InflectorInjectionTestITCase.java
+++ b/tests/integration/servlet-3-inflector-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_inflector_1/InflectorInjectionTestITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/integration/servlet-3-init-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_1/HelloWorldResourceITCase.java b/tests/integration/servlet-3-init-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_1/HelloWorldResourceITCase.java
index bbfb9a9..83ecd1c 100644
--- a/tests/integration/servlet-3-init-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_1/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-3-init-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_1/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
@@ -57,6 +57,6 @@
     @Test
     public void testUnreachableResource() {
         Response r = target().path("unreachable").request().get();
-        assertEquals("Managed to reach a resource that is not registered in the application.", 404, r.getStatus());
+        assertEquals(404, r.getStatus(), "Managed to reach a resource that is not registered in the application.");
     }
 }
diff --git a/tests/integration/servlet-3-init-2/pom.xml b/tests/integration/servlet-3-init-2/pom.xml
index e76eb65..e298737 100644
--- a/tests/integration/servlet-3-init-2/pom.xml
+++ b/tests/integration/servlet-3-init-2/pom.xml
@@ -41,9 +41,8 @@
             <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.13.1</version>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
             <scope>compile</scope>
         </dependency>
 
diff --git a/tests/integration/servlet-3-init-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_2/HelloWorldResourceITCase.java b/tests/integration/servlet-3-init-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_2/HelloWorldResourceITCase.java
index fd8388f..5395717 100644
--- a/tests/integration/servlet-3-init-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_2/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-3-init-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_2/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/servlet-3-init-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_3/EmptyApplicationTestITCase.java b/tests/integration/servlet-3-init-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_3/EmptyApplicationTestITCase.java
index f762576..417f310 100644
--- a/tests/integration/servlet-3-init-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_3/EmptyApplicationTestITCase.java
+++ b/tests/integration/servlet-3-init-3/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_3/EmptyApplicationTestITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.tests.integration.servlet_3_init_3.resource.ResourceOne;
 import org.glassfish.jersey.tests.integration.servlet_3_init_3.resource.ResourceTwo;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/integration/servlet-3-init-4/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_4/EmptyApplicationTestITCase.java b/tests/integration/servlet-3-init-4/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_4/EmptyApplicationTestITCase.java
index 4c3b2b6..c723b0c 100644
--- a/tests/integration/servlet-3-init-4/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_4/EmptyApplicationTestITCase.java
+++ b/tests/integration/servlet-3-init-4/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_4/EmptyApplicationTestITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.tests.integration.servlet_3_init_4.resource.ResourceOne;
 import org.glassfish.jersey.tests.integration.servlet_3_init_4.resource.ResourceTwo;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/integration/servlet-3-init-5/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_5/HelloWorldResourceITCase.java b/tests/integration/servlet-3-init-5/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_5/HelloWorldResourceITCase.java
index 0eaa27d..d5a6e54 100644
--- a/tests/integration/servlet-3-init-5/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_5/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-3-init-5/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_5/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/servlet-3-init-6/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_6/EmptyApplicationITCase.java b/tests/integration/servlet-3-init-6/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_6/EmptyApplicationITCase.java
index c85d8bb..c4c0927 100644
--- a/tests/integration/servlet-3-init-6/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_6/EmptyApplicationITCase.java
+++ b/tests/integration/servlet-3-init-6/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_6/EmptyApplicationITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,9 +26,9 @@
 import org.glassfish.jersey.tests.integration.servlet_3_init_6.resource.ResourceOne;
 import org.glassfish.jersey.tests.integration.servlet_3_init_6.resource.ResourceTwo;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/integration/servlet-3-init-7/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_7/HelloWorldResourceITCase.java b/tests/integration/servlet-3-init-7/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_7/HelloWorldResourceITCase.java
index 4955e48..d85bb33 100644
--- a/tests/integration/servlet-3-init-7/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_7/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-3-init-7/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_7/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/servlet-3-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_8/HelloWorldResourceITCase.java b/tests/integration/servlet-3-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_8/HelloWorldResourceITCase.java
index ba14d28..c28aa23 100644
--- a/tests/integration/servlet-3-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_8/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-3-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_8/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,7 @@
 
 package org.glassfish.jersey.tests.integration.servlet_3_init_8;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Application;
@@ -29,43 +28,34 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test reachable resources.
  *
  * @author Libor Kramolis
  */
-@RunWith(Parameterized.class)
 public class HelloWorldResourceITCase extends JerseyTest {
 
-    private final String appPath;
-    private final String resourcePath;
-    private final String helloName;
-
-    public HelloWorldResourceITCase(String appPath, String resourcePath, String helloName) {
-        this.appPath = appPath;
-        this.resourcePath = resourcePath;
-        this.helloName = helloName;
-    }
-
-    @Parameterized.Parameters(name = "{index}: {0}/{1} \"{2}\"")
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"/app1", "helloworld1", "World 1"}, //app1 - overridden using a servlet-mapping element in the web.xml
-                {"/app2ann", "helloworld2", "World 2"}, //app2ann - no servlet-mapping in the web.xml, used ApplicationPath.value
-                {"/app3ann", "helloworld3", "World 3"}, //app3ann - no servlet in the web.xml, used ApplicationPath.value
-                {"/app4", "helloworld4", "World 4"}, //app4 - fully configured in web.xml
+    public static Stream<Arguments> testData() {
+        return Stream.of(
+                //app1 - overridden using a servlet-mapping element in the web.xml
+                Arguments.of("/app1", "helloworld1", "World 1"),
+                //app2ann - no servlet-mapping in the web.xml, used ApplicationPath.value
+                Arguments.of("/app2ann", "helloworld2", "World 2"),
+                //app3ann - no servlet in the web.xml, used ApplicationPath.value
+                Arguments.of("/app3ann", "helloworld3", "World 3"),
+                Arguments.of("/app4", "helloworld4", "World 4"), //app4 - fully configured in web.xml
                 //app5 -  automatic registration of all resources, no explicit classes/singletons provided by Servlet3Init8App5
-                {"/app5", "helloworld1", "World 1"},
-                {"/app5", "helloworld2", "World 2"},
-                {"/app5", "helloworld3", "World 3"},
-                {"/app5", "helloworld4", "World 4"},
-                {"/app5", "unreachable", "Unreachable"},
-        });
+                Arguments.of("/app5", "helloworld1", "World 1"),
+                Arguments.of("/app5", "helloworld2", "World 2"),
+                Arguments.of("/app5", "helloworld3", "World 3"),
+                Arguments.of("/app5", "helloworld4", "World 4"),
+                Arguments.of("/app5", "unreachable", "Unreachable")
+        );
     }
 
     @Override
@@ -78,8 +68,9 @@
         return new ExternalTestContainerFactory();
     }
 
-    @Test
-    public void testHelloWorld() throws Exception {
+    @ParameterizedTest(name = "{index}: {0}/{1} \"{2}\"")
+    @MethodSource("testData")
+    public void testHelloWorld(String appPath, String resourcePath, String helloName) throws Exception {
         WebTarget t = target(appPath);
         t.register(LoggingFeature.class);
         Response r = t.path(resourcePath).request().get();
diff --git a/tests/integration/servlet-3-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_8/HelloWorldResourceUnreachableITCase.java b/tests/integration/servlet-3-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_8/HelloWorldResourceUnreachableITCase.java
index 4a2b21c..6a56d18 100644
--- a/tests/integration/servlet-3-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_8/HelloWorldResourceUnreachableITCase.java
+++ b/tests/integration/servlet-3-init-8/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_8/HelloWorldResourceUnreachableITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,7 @@
 
 package org.glassfish.jersey.tests.integration.servlet_3_init_8;
 
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Application;
@@ -28,38 +27,27 @@
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test unreachable resources.
  *
  * @author Libor Kramolis
  */
-@RunWith(Parameterized.class)
 public class HelloWorldResourceUnreachableITCase extends JerseyTest {
 
-    private final String appPath;
-    private final String resourcePath;
-
-    public HelloWorldResourceUnreachableITCase(String appPath,
-                                               String resourcePath) {
-        this.appPath = appPath;
-        this.resourcePath = resourcePath;
-    }
-
-    @Parameterized.Parameters(name = "{index}: {0}/{1}")
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"/app1", "unreachable"}, //unreachable - no explicitly mentioned resource
-                {"/app1ann", "helloworld1"}, //app1ann - overridden using a servlet-mapping element in the web.xml
-                {"/app2ann", "unreachable"}, //unreachable - no explicitly mentioned resource
-                {"/app3ann", "unreachable"}, //unreachable - no explicitly mentioned resource
-                {"/app4", "unreachable"}, //unreachable - no explicitly mentioned resource
-        });
+    public static Stream<Arguments> testData() {
+        return Stream.of(
+                Arguments.of("/app1", "unreachable"), //unreachable - no explicitly mentioned resource
+                Arguments.of("/app1ann", "helloworld1"), //app1ann - overridden using a servlet-mapping element in the web.xml
+                Arguments.of("/app2ann", "unreachable"), //unreachable - no explicitly mentioned resource
+                Arguments.of("/app3ann", "unreachable"), //unreachable - no explicitly mentioned resource
+                Arguments.of("/app4", "unreachable") //unreachable - no explicitly mentioned resource
+        );
     }
 
     @Override
@@ -72,8 +60,9 @@
         return new ExternalTestContainerFactory();
     }
 
-    @Test
-    public void testUnreachableResource() {
+    @ParameterizedTest(name = "{index}: {0}/{1}")
+    @MethodSource("testData")
+    public void testUnreachableResource(String appPath, String resourcePath) {
         WebTarget t = target(appPath);
         t.register(LoggingFeature.class);
         Response r = t.path(resourcePath).request().get();
diff --git a/tests/integration/servlet-3-init-9/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_9/HelloWorldResourceITCase.java b/tests/integration/servlet-3-init-9/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_9/HelloWorldResourceITCase.java
index de329a1..c36f22a 100644
--- a/tests/integration/servlet-3-init-9/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_9/HelloWorldResourceITCase.java
+++ b/tests/integration/servlet-3-init-9/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_9/HelloWorldResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class HelloWorldResourceITCase extends JerseyTest {
 
diff --git a/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/AbstractHelloWorldResourceTest.java b/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/AbstractHelloWorldResourceTest.java
index 259dd8d..69acc84 100644
--- a/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/AbstractHelloWorldResourceTest.java
+++ b/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/AbstractHelloWorldResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Assertions;
 
 import javax.ws.rs.NotFoundException;
 
@@ -51,15 +51,15 @@
             try {
                 String actual = target("application" + getIndex()).path("helloworld" + i).request().get(String.class);
                 if (i == getIndex()) {
-                    Assert.assertEquals("Hello World #" + getIndex() + "!", actual);
+                    Assertions.assertEquals("Hello World #" + getIndex() + "!", actual);
                 } else {
-                    Assert.fail("i: " + i + " | [" + actual + "]");
+                    Assertions.fail("i: " + i + " | [" + actual + "]");
                 }
             } catch (NotFoundException ex) {
                 if (i != getIndex()) {
-                    Assert.assertEquals(404, ex.getResponse().getStatus());
+                    Assertions.assertEquals(404, ex.getResponse().getStatus());
                 } else {
-                    Assert.fail("!!! i: " + i);
+                    Assertions.fail("!!! i: " + i);
                 }
             }
         }
diff --git a/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld1ResourceITCase.java b/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld1ResourceITCase.java
index ef833d1..6ac5fe2 100644
--- a/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld1ResourceITCase.java
+++ b/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld1ResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,8 +18,8 @@
 
 import javax.ws.rs.client.WebTarget;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Libor Kramolis
@@ -37,7 +37,7 @@
     @Test
     public void testRegisteredServletNames() throws Exception {
         WebTarget target = target("application" + getIndex()).path("helloworld" + getIndex()).path("servlets");
-        Assert.assertEquals(AbstractHelloWorldResource.NUMBER_OF_APPLICATIONS, (int) target.request().get(Integer.TYPE));
+        Assertions.assertEquals(AbstractHelloWorldResource.NUMBER_OF_APPLICATIONS, (int) target.request().get(Integer.TYPE));
 
         target = target.path("{name}");
         testRegisteredServletNames(target, "org.glassfish.jersey.tests.integration.servlet_3_init_provider.Application1");
@@ -48,13 +48,13 @@
     }
 
     private void testRegisteredServletNames(WebTarget target, String servletName) throws Exception {
-        Assert.assertTrue(target.resolveTemplate("name", servletName).request().get(Boolean.TYPE));
+        Assertions.assertTrue(target.resolveTemplate("name", servletName).request().get(Boolean.TYPE));
     }
 
     @Test
     public void testImmutableServletNames() {
         WebTarget target = target("application" + getIndex()).path("helloworld" + getIndex()).path("immutableServletNames");
-        Assert.assertTrue(target.request().get(Boolean.TYPE));
+        Assertions.assertTrue(target.request().get(Boolean.TYPE));
     }
 
 }
diff --git a/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld3ResourceITCase.java b/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld3ResourceITCase.java
index 27f7b64..139bae4 100644
--- a/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld3ResourceITCase.java
+++ b/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld3ResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey.tests.integration.servlet_3_init_provider;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.client.WebTarget;
 
@@ -37,7 +37,7 @@
     @Test
     public void testStartupContainers() throws Exception {
         WebTarget target = target("application" + getIndex()).path("helloworld" + getIndex()).path("containers");
-        Assert.assertEquals(AbstractHelloWorldResource.NUMBER_OF_APPLICATIONS, (int) target.request().get(Integer.TYPE));
+        Assertions.assertEquals(AbstractHelloWorldResource.NUMBER_OF_APPLICATIONS, (int) target.request().get(Integer.TYPE));
     }
 
 }
diff --git a/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld4ResourceITCase.java b/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld4ResourceITCase.java
index d393170..ae45408 100644
--- a/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld4ResourceITCase.java
+++ b/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld4ResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey.tests.integration.servlet_3_init_provider;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Response;
 
@@ -37,7 +37,7 @@
     @Test
     public void testRegisterFilter() throws Exception {
         Response response = target("application" + getIndex()).path("helloworld" + getIndex()).path("filter").request().get();
-        Assert.assertEquals(404, response.getStatus());
+        Assertions.assertEquals(404, response.getStatus());
     }
 
 }
diff --git a/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld5ResourceITCase.java b/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld5ResourceITCase.java
index ab50349..9a423ce 100644
--- a/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld5ResourceITCase.java
+++ b/tests/integration/servlet-3-init-provider/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/HelloWorld5ResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,8 @@
 
 package org.glassfish.jersey.tests.integration.servlet_3_init_provider;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Libor Kramolis
@@ -36,7 +36,7 @@
     public void testRegisterFilter() throws Exception {
         String actual = target("application" + getIndex()).path("helloworld" + getIndex()).path("filter").request()
                 .get(String.class);
-        Assert.assertEquals(TestServletContainerProvider.TEST_FILTER, actual);
+        Assertions.assertEquals(TestServletContainerProvider.TEST_FILTER, actual);
     }
 
 }
diff --git a/tests/integration/servlet-3-params/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_params/ParamsTestITCase.java b/tests/integration/servlet-3-params/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_params/ParamsTestITCase.java
index cf00cc1..f1e897f 100644
--- a/tests/integration/servlet-3-params/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_params/ParamsTestITCase.java
+++ b/tests/integration/servlet-3-params/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_params/ParamsTestITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Pavel Bucek
diff --git a/tests/integration/servlet-3-sse-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_sse_1/ItemStoreResourceITCase.java b/tests/integration/servlet-3-sse-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_sse_1/ItemStoreResourceITCase.java
index 63ca57b..6c01e0a 100644
--- a/tests/integration/servlet-3-sse-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_sse_1/ItemStoreResourceITCase.java
+++ b/tests/integration/servlet-3-sse-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_3_sse_1/ItemStoreResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -48,22 +48,22 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.describedAs;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.hasItems;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Item store test.
  *
  * @author Marek Potociar
  */
-@Ignore
+@Disabled
 public class ItemStoreResourceITCase extends JerseyTest {
 
     private static final Logger LOGGER = Logger.getLogger(ItemStoreResourceITCase.class.getName());
@@ -151,9 +151,9 @@
                 postItem(itemsTarget, item);
             }
 
-            assertTrue("Waiting to receive all events has timed out.",
-                    latch.await((1000 + MAX_LISTENERS * EventSource.RECONNECT_DEFAULT) * getAsyncTimeoutMultiplier(),
-                            TimeUnit.MILLISECONDS));
+            assertTrue(latch.await((1000 + MAX_LISTENERS * EventSource.RECONNECT_DEFAULT) * getAsyncTimeoutMultiplier(),
+                            TimeUnit.MILLISECONDS),
+                    "Waiting to receive all events has timed out.");
 
             // need to force disconnect on server in order for EventSource.close(...) to succeed with HttpUrlConnection
             sendCommand(itemsTarget, "disconnect");
@@ -163,19 +163,19 @@
 
         String postedItems = itemsTarget.request().get(String.class);
         for (String item : items) {
-            assertTrue("Item '" + item + "' not stored on server.", postedItems.contains(item));
+            assertTrue(postedItems.contains(item), "Item '" + item + "' not stored on server.");
         }
 
         int queueId = 0;
         for (Queue<Integer> indexes : indexQueues) {
             for (int i = 0; i < items.size(); i++) {
-                assertTrue("Event for '" + items.get(i) + "' not received in queue " + queueId, indexes.contains(i));
+                assertTrue(indexes.contains(i), "Event for '" + items.get(i) + "' not received in queue " + queueId);
             }
-            assertEquals("Not received the expected number of events in queue " + queueId, items.size(), indexes.size());
+            assertEquals(items.size(), indexes.size(), "Not received the expected number of events in queue " + queueId);
             queueId++;
         }
 
-        assertEquals("Number of received 'size' events does not match.", items.size() * MAX_LISTENERS, sizeEventsCount.get());
+        assertEquals(items.size() * MAX_LISTENERS, sizeEventsCount.get(), "Number of received 'size' events does not match.");
     }
 
     /**
@@ -242,8 +242,8 @@
 
             sendCommand(itemsTarget, "reconnect now");
 
-            assertTrue("Waiting to receive all events has timed out.",
-                    latch.await((1 + MAX_LISTENERS * (MAX_ITEMS + 1) * reconnectDelay) * getAsyncTimeoutMultiplier(), TimeUnit.SECONDS));
+            assertTrue(latch.await((1 + MAX_LISTENERS * (MAX_ITEMS + 1) * reconnectDelay) * getAsyncTimeoutMultiplier(),
+                    TimeUnit.SECONDS), "Waiting to receive all events has timed out.");
 
             // need to force disconnect on server in order for EventSource.close(...) to succeed with HttpUrlConnection
             sendCommand(itemsTarget, "disconnect");
@@ -267,7 +267,7 @@
 
     private static void postItem(final WebTarget itemsTarget, final String item) {
         final Response response = itemsTarget.request().post(Entity.form(new Form("name", item)));
-        assertEquals("Posting new item has failed.", 204, response.getStatus());
+        assertEquals(204, response.getStatus(), "Posting new item has failed.");
         LOGGER.info("[-i-] POSTed item: '" + item + "'");
     }
 
@@ -283,7 +283,7 @@
         int i = 0;
         for (EventSource source : sources) {
             if (source.isOpen()) {
-                assertTrue("Waiting to close a source has timed out.", source.close(1, TimeUnit.SECONDS));
+                assertTrue(source.close(1, TimeUnit.SECONDS), "Waiting to close a source has timed out.");
 //                    source.close(100, TimeUnit.MILLISECONDS);
                 LOGGER.info("[<--] SOURCE " + i++ + " closed.");
             }
@@ -292,7 +292,7 @@
 
     private static void sendCommand(final WebTarget itemsTarget, final String command) {
         final Response response = itemsTarget.path("commands").request().post(Entity.text(command));
-        assertEquals("'" + command + "' command has failed.", 200, response.getStatus());
+        assertEquals(200, response.getStatus(), "'" + command + "' command has failed.");
         LOGGER.info("[-!-] COMMAND '" + command + "' has been processed.");
     }
 }
diff --git a/tests/integration/servlet-4.0-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_40_mvc_1/GzipITCase.java b/tests/integration/servlet-4.0-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_40_mvc_1/GzipITCase.java
index 9db8de7..3509be6 100644
--- a/tests/integration/servlet-4.0-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_40_mvc_1/GzipITCase.java
+++ b/tests/integration/servlet-4.0-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_40_mvc_1/GzipITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,13 +16,13 @@
 
 package org.glassfish.jersey.tests.integration.servlet_40_mvc_1;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import javax.ws.rs.core.Response;
 
 import org.glassfish.jersey.message.GZipEncoder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class GzipITCase extends TestSupport {
 
diff --git a/tests/integration/servlet-4.0-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_40_mvc_1/TestSupport.java b/tests/integration/servlet-4.0-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_40_mvc_1/TestSupport.java
index 4185a64..9e00fe2 100644
--- a/tests/integration/servlet-4.0-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_40_mvc_1/TestSupport.java
+++ b/tests/integration/servlet-4.0-mvc-1/src/test/java/org/glassfish/jersey/tests/integration/servlet_40_mvc_1/TestSupport.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.glassfish.jersey.tests.integration.servlet_40_mvc_1.MyApplication;
 
-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;
 
 public abstract class TestSupport extends JerseyTest {
 
@@ -43,13 +43,13 @@
     }
 
     protected void assertHtmlResponse(final String response) {
-        assertNotNull("No text returned!", response);
+        assertNotNull(response, "No text returned!");
 
         assertResponseContains(response, "<html>");
         assertResponseContains(response, "</html>");
     }
 
     protected void assertResponseContains(final String response, final String text) {
-        assertTrue("Response should contain " + text + " but was: " + response, response.contains(text));
+        assertTrue(response.contains(text), "Response should contain " + text + " but was: " + response);
     }
 }
diff --git a/tests/integration/servlet-request-wrapper-binding-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_request_wrapper2/AbstractRequestResponseTypeTest.java b/tests/integration/servlet-request-wrapper-binding-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_request_wrapper2/AbstractRequestResponseTypeTest.java
index 9756521..d81deb5 100644
--- a/tests/integration/servlet-request-wrapper-binding-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_request_wrapper2/AbstractRequestResponseTypeTest.java
+++ b/tests/integration/servlet-request-wrapper-binding-2/src/test/java/org/glassfish/jersey/tests/integration/servlet_request_wrapper2/AbstractRequestResponseTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,7 +22,7 @@
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.glassfish.jersey.tests.integration.servlet_request_wrapper_binding2.RequestResponseWrapperProvider;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
diff --git a/tests/integration/servlet-request-wrapper-binding/src/test/java/org/glassfish/jersey/tests/integration/servlet_request_wrapper/AbstractRequestResponseTypeTest.java b/tests/integration/servlet-request-wrapper-binding/src/test/java/org/glassfish/jersey/tests/integration/servlet_request_wrapper/AbstractRequestResponseTypeTest.java
index 29cda9d..f21144f 100644
--- a/tests/integration/servlet-request-wrapper-binding/src/test/java/org/glassfish/jersey/tests/integration/servlet_request_wrapper/AbstractRequestResponseTypeTest.java
+++ b/tests/integration/servlet-request-wrapper-binding/src/test/java/org/glassfish/jersey/tests/integration/servlet_request_wrapper/AbstractRequestResponseTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,7 +26,7 @@
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.equalTo;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Make sure that injected request/response instances
diff --git a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/CacheControlOn404ITCase.java b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/CacheControlOn404ITCase.java
index 2152927..710dd5b 100644
--- a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/CacheControlOn404ITCase.java
+++ b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/CacheControlOn404ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,9 +25,9 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test class related to issue JERSEY-1189.
diff --git a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/Custom404MediaTypeITCase.java b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/Custom404MediaTypeITCase.java
index 2912243..c0a66d5 100644
--- a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/Custom404MediaTypeITCase.java
+++ b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/Custom404MediaTypeITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Miroslav Fuksa
@@ -70,18 +70,18 @@
                 .queryParam(SuppressContentLengthFilter.PARAMETER_NAME_SUPPRESS_CONTENT_LENGTH, suppressContentLength)
                 .request()
                 .get();
-        Assert.assertEquals(404, response.getStatus());
-        Assert.assertEquals("application/something", response.getMediaType().toString());
-        Assert.assertEquals("not found custom entity", response.readEntity(String.class));
+        Assertions.assertEquals(404, response.getStatus());
+        Assertions.assertEquals("application/something", response.getMediaType().toString());
+        Assertions.assertEquals("not found custom entity", response.readEntity(String.class));
     }
 
     private void testCustom404WithEmtpyEntityStringImpl(final boolean suppressContentLength) {
         final Response response = target().path("custom404/resource404/content-type-empty-entity")
                 .queryParam(SuppressContentLengthFilter.PARAMETER_NAME_SUPPRESS_CONTENT_LENGTH, suppressContentLength)
                 .request().get();
-        Assert.assertEquals(404, response.getStatus());
-        Assert.assertEquals("application/something", response.getMediaType().toString());
-        Assert.assertEquals("", response.readEntity(String.class));
+        Assertions.assertEquals(404, response.getStatus());
+        Assertions.assertEquals("application/something", response.getMediaType().toString());
+        Assertions.assertEquals("", response.readEntity(String.class));
     }
 
 }
diff --git a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/DuplicateHeaderITCase.java b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/DuplicateHeaderITCase.java
index 4de9039..715eda7 100644
--- a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/DuplicateHeaderITCase.java
+++ b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/DuplicateHeaderITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,8 +30,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Libor Kramolis
@@ -71,7 +71,7 @@
                 connection.addRequestProperty(headerName, "N/A");
             }
             connection.connect();
-            assertEquals(path + " [" + headerName + ":" + headerCount + "x]", expectedResponseCode, connection.getResponseCode());
+            assertEquals(expectedResponseCode, connection.getResponseCode(), path + " [" + headerName + ":" + headerCount + "x]");
         } finally {
             connection.disconnect();
         }
diff --git a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/FilterContextPathITCase.java b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/FilterContextPathITCase.java
index 60e99d3..e9072a5 100644
--- a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/FilterContextPathITCase.java
+++ b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/FilterContextPathITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
diff --git a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/FormConsumptionITCase.java b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/FormConsumptionITCase.java
index af7a5f9..46f461c 100644
--- a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/FormConsumptionITCase.java
+++ b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/FormConsumptionITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
diff --git a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/ForwardOn404ITCase.java b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/ForwardOn404ITCase.java
index 1bc99e9..fa01a8e 100644
--- a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/ForwardOn404ITCase.java
+++ b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/ForwardOn404ITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
diff --git a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/InvalidRequestUriITCase.java b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/InvalidRequestUriITCase.java
index db67e95..94289f2 100644
--- a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/InvalidRequestUriITCase.java
+++ b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/InvalidRequestUriITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test class related to issue JERSEY-2680.
diff --git a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/RolesAllowedFilterITCase.java b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/RolesAllowedFilterITCase.java
index a22f0c8..ee9bee9 100644
--- a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/RolesAllowedFilterITCase.java
+++ b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/RolesAllowedFilterITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Petr Bouda
diff --git a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/StaticContentRegexITCase.java b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/StaticContentRegexITCase.java
index 70647e2..346dd34 100644
--- a/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/StaticContentRegexITCase.java
+++ b/tests/integration/servlet-tests/src/test/java/org/glassfish/jersey/tests/integration/servlettests/StaticContentRegexITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,8 +25,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Martin Matula
diff --git a/tests/integration/sonar-test/src/test/java/org/glassfish/jersey/tests/integration/sonar/JerseySonarITCase.java b/tests/integration/sonar-test/src/test/java/org/glassfish/jersey/tests/integration/sonar/JerseySonarITCase.java
index 5f0c654..418804f 100644
--- a/tests/integration/sonar-test/src/test/java/org/glassfish/jersey/tests/integration/sonar/JerseySonarITCase.java
+++ b/tests/integration/sonar-test/src/test/java/org/glassfish/jersey/tests/integration/sonar/JerseySonarITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Stepan Vavra
@@ -38,14 +38,14 @@
     public void testIntegrationServerJvm() {
         final String string = target("test").request().get(String.class);
 
-        Assert.assertEquals("common server jvm server server jvm", string);
+        Assertions.assertEquals("common server jvm server server jvm", string);
     }
 
     @Test
     public void testIntegrationTestJvm() {
         final String string = new SonarJerseyCommon().integrationTestJvm() + " " + new SonarJerseyServer().integrationTestJvm();
 
-        Assert.assertEquals("common test jvm server test jvm", string);
+        Assertions.assertEquals("common test jvm server test jvm", string);
     }
 
     @Override
diff --git a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceITCase.java b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceITCase.java
index c9f9f17..939928c 100644
--- a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceITCase.java
+++ b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,9 +23,9 @@
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class AccountResourceITCase extends JerseyTest {
 
diff --git a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceTestBase.java b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceTestBase.java
index 5c7774b..81822d2 100644
--- a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceTestBase.java
+++ b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceTestBase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,10 +22,10 @@
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.startsWith;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Base class for JAX-RS resource tests.
diff --git a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/JerseyManagedITCase.java b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/JerseyManagedITCase.java
index 4815e0e..07cecfb 100644
--- a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/JerseyManagedITCase.java
+++ b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/JerseyManagedITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Jersey managed JAX-RS resources.
diff --git a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedControllerITCase.java b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedControllerITCase.java
index cbe42c6..d722371 100644
--- a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedControllerITCase.java
+++ b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedControllerITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Spring managed JAX-RS resources with @Controller archetype.
diff --git a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedEndpointITCase.java b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedEndpointITCase.java
index fe96090..42bbe48 100644
--- a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedEndpointITCase.java
+++ b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedEndpointITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Spring managed JAX-RS resources with custom composite
diff --git a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedITCase.java b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedITCase.java
index 5eea429..732a5a2 100644
--- a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedITCase.java
+++ b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Spring managed JAX-RS resources.
diff --git a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedRepositoryITCase.java b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedRepositoryITCase.java
index 5302a9e..9520318 100644
--- a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedRepositoryITCase.java
+++ b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedRepositoryITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Spring managed JAX-RS resources with @Repository archetype.
diff --git a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedServiceITCase.java b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedServiceITCase.java
index 633ceea..fd94e43 100644
--- a/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedServiceITCase.java
+++ b/tests/integration/spring4/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedServiceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Spring managed JAX-RS resources with @Service archetype.
diff --git a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceITCase.java b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceITCase.java
index 370faf2..939928c 100644
--- a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceITCase.java
+++ b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,9 +23,9 @@
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class AccountResourceITCase extends JerseyTest {
 
diff --git a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceTestBase.java b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceTestBase.java
index f63fd12..81822d2 100644
--- a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceTestBase.java
+++ b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/AccountResourceTestBase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,10 +22,10 @@
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.startsWith;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Base class for JAX-RS resource tests.
diff --git a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/JerseyManagedITCase.java b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/JerseyManagedITCase.java
index f7eccef..07cecfb 100644
--- a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/JerseyManagedITCase.java
+++ b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/JerseyManagedITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Jersey managed JAX-RS resources.
diff --git a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedControllerITCase.java b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedControllerITCase.java
index 05aaea8..d722371 100644
--- a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedControllerITCase.java
+++ b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedControllerITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Spring managed JAX-RS resources with @Controller archetype.
diff --git a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedEndpointITCase.java b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedEndpointITCase.java
index 986abc8..42bbe48 100644
--- a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedEndpointITCase.java
+++ b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedEndpointITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Spring managed JAX-RS resources with custom composite
diff --git a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedITCase.java b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedITCase.java
index 5ddf2a6..732a5a2 100644
--- a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedITCase.java
+++ b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Spring managed JAX-RS resources.
diff --git a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedRepositoryITCase.java b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedRepositoryITCase.java
index 7b1d200..9520318 100644
--- a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedRepositoryITCase.java
+++ b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedRepositoryITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Spring managed JAX-RS resources with @Repository archetype.
diff --git a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedServiceITCase.java b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedServiceITCase.java
index 0404467..fd94e43 100644
--- a/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedServiceITCase.java
+++ b/tests/integration/spring5/src/test/java/org/glassfish/jersey/server/spring/test/SpringManagedServiceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,8 +21,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for Spring managed JAX-RS resources with @Service archetype.
diff --git a/tests/integration/tracing-support/src/test/java/org/glassfish/jersey/tests/integration/tracing/AllTracingSupportITCase.java b/tests/integration/tracing-support/src/test/java/org/glassfish/jersey/tests/integration/tracing/AllTracingSupportITCase.java
index 0983d00..03dd1a8 100644
--- a/tests/integration/tracing-support/src/test/java/org/glassfish/jersey/tests/integration/tracing/AllTracingSupportITCase.java
+++ b/tests/integration/tracing-support/src/test/java/org/glassfish/jersey/tests/integration/tracing/AllTracingSupportITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,8 +17,7 @@
 package org.glassfish.jersey.tests.integration.tracing;
 
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.List;
+import java.util.stream.Stream;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.Invocation;
@@ -35,31 +34,19 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * 'ALL' tracing support test that is running in external Jetty container.
  *
  * @author Libor Kramolis
  */
-@RunWith(Parameterized.class)
 public class AllTracingSupportITCase extends JerseyTest {
 
-    private final String resourcePath;
-
-    public AllTracingSupportITCase(String resourcePath) {
-        this.resourcePath = resourcePath;
-    }
-
-    @Parameterized.Parameters(name = "{index}: {0}")
-    public static List<Object[]> testData() {
-        return Arrays.asList(new Object[][] {
-                {"/root"},
-                {"/async"},
-        });
+    public static Stream<String> testData() {
+        return Stream.of("/root", "/async");
     }
 
     //
@@ -88,16 +75,18 @@
     // tests
     //
 
-    @Test
-    public void testGet() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testGet(String resourcePath) {
         Invocation.Builder builder = resource(resourcePath).path("NAME").request();
         Response response = builder.get();
         assertXJerseyTrace(response, false);
         assertEquals(200, response.getStatus());
     }
 
-    @Test
-    public void testRuntimeException() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testRuntimeException(String resourcePath) {
         Invocation.Builder builder = resource(resourcePath).path("runtime-exception").request();
 
         Response response = builder.get();
@@ -105,8 +94,9 @@
         assertEquals(500, response.getStatus());
     }
 
-    @Test
-    public void testMappedException() throws InterruptedException, IOException {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testMappedException(String resourcePath) throws InterruptedException, IOException {
         Invocation.Builder builder = resource(resourcePath).path("mapped-exception").request();
 
         Response response = builder.get();
@@ -114,8 +104,9 @@
         assertEquals(501, response.getStatus());
     }
 
-    @Test
-    public void testGet405() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testGet405(String resourcePath) {
         Invocation.Builder builder = resource(resourcePath).request();
 
         Response response = builder.get();
@@ -123,8 +114,9 @@
         assertEquals(405, response.getStatus());
     }
 
-    @Test
-    public void testPostSubResourceMethod() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testPostSubResourceMethod(String resourcePath) {
         Invocation.Builder builder = resource(resourcePath).path("sub-resource-method").request();
 
         Response response = builder.post(Entity.entity(new Message("POST"), Utils.APPLICATION_X_JERSEY_TEST));
@@ -132,8 +124,9 @@
         assertEquals("TSOP", response.readEntity(Message.class).getText());
     }
 
-    @Test
-    public void testPostSubResourceLocator() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testPostSubResourceLocator(String resourcePath) {
         Invocation.Builder builder = resource(resourcePath).path("sub-resource-locator").request();
 
         Response response = builder.post(Entity.entity(new Message("POST"), Utils.APPLICATION_X_JERSEY_TEST));
@@ -141,16 +134,18 @@
         assertEquals("TSOP", response.readEntity(Message.class).getText());
     }
 
-    @Test
-    public void testPostSubResourceLocatorNull() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testPostSubResourceLocatorNull(String resourcePath) {
         Invocation.Builder builder = resource(resourcePath).path("sub-resource-locator-null").request();
 
         Response response = builder.post(Entity.entity(new Message("POST"), Utils.APPLICATION_X_JERSEY_TEST));
         assertEquals(404, response.getStatus());
     }
 
-    @Test
-    public void testPostSubResourceLocatorSubResourceMethod() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testPostSubResourceLocatorSubResourceMethod(String resourcePath) {
         Invocation.Builder builder = resource(resourcePath).path("sub-resource-locator").path("sub-resource-method").request();
 
         Response response = builder.post(Entity.entity(new Message("POST"), Utils.APPLICATION_X_JERSEY_TEST));
@@ -158,27 +153,29 @@
         assertEquals("TSOP", response.readEntity(Message.class).getText());
     }
 
-    @Test
-    public void testTraceInnerException() {
+    @ParameterizedTest
+    @MethodSource("testData")
+    public void testTraceInnerException(String resourcePath) {
         // PRE_MATCHING_REQUEST_FILTER
-        testTraceInnerExceptionImpl(Utils.TestAction.PRE_MATCHING_REQUEST_FILTER_THROW_WEB_APPLICATION, 500, false);
-        testTraceInnerExceptionImpl(Utils.TestAction.PRE_MATCHING_REQUEST_FILTER_THROW_PROCESSING, 500, true);
-        testTraceInnerExceptionImpl(Utils.TestAction.PRE_MATCHING_REQUEST_FILTER_THROW_ANY, 500, true);
+        testTraceInnerExceptionImpl(resourcePath, Utils.TestAction.PRE_MATCHING_REQUEST_FILTER_THROW_WEB_APPLICATION, 500, false);
+        testTraceInnerExceptionImpl(resourcePath, Utils.TestAction.PRE_MATCHING_REQUEST_FILTER_THROW_PROCESSING, 500, true);
+        testTraceInnerExceptionImpl(resourcePath, Utils.TestAction.PRE_MATCHING_REQUEST_FILTER_THROW_ANY, 500, true);
         // MESSAGE_BODY_WRITER
-        testTraceInnerExceptionImpl(Utils.TestAction.MESSAGE_BODY_WRITER_THROW_WEB_APPLICATION, 500, false);
-        testTraceInnerExceptionImpl(Utils.TestAction.MESSAGE_BODY_WRITER_THROW_PROCESSING, 500, true);
-        testTraceInnerExceptionImpl(Utils.TestAction.MESSAGE_BODY_WRITER_THROW_ANY, 500, true);
+        testTraceInnerExceptionImpl(resourcePath, Utils.TestAction.MESSAGE_BODY_WRITER_THROW_WEB_APPLICATION, 500, false);
+        testTraceInnerExceptionImpl(resourcePath, Utils.TestAction.MESSAGE_BODY_WRITER_THROW_PROCESSING, 500, true);
+        testTraceInnerExceptionImpl(resourcePath, Utils.TestAction.MESSAGE_BODY_WRITER_THROW_ANY, 500, true);
         // MESSAGE_BODY_READER
-        testTraceInnerExceptionImpl(Utils.TestAction.MESSAGE_BODY_READER_THROW_WEB_APPLICATION, 500, false);
-        testTraceInnerExceptionImpl(Utils.TestAction.MESSAGE_BODY_READER_THROW_PROCESSING, 500, true);
-        testTraceInnerExceptionImpl(Utils.TestAction.MESSAGE_BODY_READER_THROW_ANY, 500, true);
+        testTraceInnerExceptionImpl(resourcePath, Utils.TestAction.MESSAGE_BODY_READER_THROW_WEB_APPLICATION, 500, false);
+        testTraceInnerExceptionImpl(resourcePath, Utils.TestAction.MESSAGE_BODY_READER_THROW_PROCESSING, 500, true);
+        testTraceInnerExceptionImpl(resourcePath, Utils.TestAction.MESSAGE_BODY_READER_THROW_ANY, 500, true);
     }
 
     //
     // utils
     //
 
-    private void testTraceInnerExceptionImpl(Utils.TestAction testAction, int expectedStatus, boolean exceptionExpected) {
+    private void testTraceInnerExceptionImpl(String resourcePath, Utils.TestAction testAction,
+            int expectedStatus, boolean exceptionExpected) {
         Invocation.Builder builder = resource(resourcePath).request();
         builder.header(Utils.HEADER_TEST_ACTION, testAction);
 
@@ -201,11 +198,11 @@
                 }
             }
         }
-        assertEquals("Just one FINISHED expected!", 1, finished);
+        assertEquals(1, finished, "Just one FINISHED expected!");
         if (exceptionExpected) {
-            assertEquals("EXCEPTION expected!", 1, exceptionMapping);
+            assertEquals(1, exceptionMapping, "EXCEPTION expected!");
         } else {
-            assertEquals("EXCEPTION NOT expected!", 0, exceptionMapping);
+            assertEquals(0, exceptionMapping, "EXCEPTION NOT expected!");
         }
     }
 
diff --git a/tests/integration/tracing-support/src/test/java/org/glassfish/jersey/tests/integration/tracing/OnDemandTracingSupportITCase.java b/tests/integration/tracing-support/src/test/java/org/glassfish/jersey/tests/integration/tracing/OnDemandTracingSupportITCase.java
index 6353256..003a629 100644
--- a/tests/integration/tracing-support/src/test/java/org/glassfish/jersey/tests/integration/tracing/OnDemandTracingSupportITCase.java
+++ b/tests/integration/tracing-support/src/test/java/org/glassfish/jersey/tests/integration/tracing/OnDemandTracingSupportITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,10 +31,10 @@
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * 'ON_DEMAND' tracing support test that is running in external Jetty container.
diff --git a/tests/jmockit/pom.xml b/tests/jmockit/pom.xml
index 7c1a51a..26baf2a 100644
--- a/tests/jmockit/pom.xml
+++ b/tests/jmockit/pom.xml
@@ -56,11 +56,13 @@
         <dependency>
             <groupId>org.jmockit</groupId>
             <artifactId>jmockit</artifactId>
+            <version>1.44</version> <!-- do not upgrade for Junit 4 -->
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
+            <version>${junit4.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -88,6 +90,13 @@
                     </argLine>
                     <skipTests>${skip.tests}</skipTests>
                 </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.maven.surefire</groupId>
+                        <artifactId>surefire-junit47</artifactId>
+                        <version>${surefire.version}</version>
+                    </dependency>
+                </dependencies>
             </plugin>
         </plugins>
     </build>
diff --git a/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/media/multipart/internal/FormDataMultiPartReaderWriterTest.java b/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/media/multipart/internal/FormDataMultiPartReaderWriterTest.java
index 3c99d00..7ae0a92 100644
--- a/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/media/multipart/internal/FormDataMultiPartReaderWriterTest.java
+++ b/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/media/multipart/internal/FormDataMultiPartReaderWriterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
diff --git a/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/server/ResourceConfigTest.java b/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/server/ResourceConfigTest.java
index 39f3311..26a1e2e 100644
--- a/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/server/ResourceConfigTest.java
+++ b/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/server/ResourceConfigTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
diff --git a/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/server/internal/scanning/PackageNamesScannerTest.java b/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/server/internal/scanning/PackageNamesScannerTest.java
index f8f5668..0ca55d3 100644
--- a/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/server/internal/scanning/PackageNamesScannerTest.java
+++ b/tests/jmockit/src/test/java/org/glassfish/jersey/tests/jmockit/server/internal/scanning/PackageNamesScannerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
diff --git a/tests/mem-leaks/test-cases/bean-param-leak/src/test/java/org/glassfish/jersey/tests/memleaks/beanparam/BeanParamLeakResourceITCase.java b/tests/mem-leaks/test-cases/bean-param-leak/src/test/java/org/glassfish/jersey/tests/memleaks/beanparam/BeanParamLeakResourceITCase.java
index ef9c177..ae7c1b6 100644
--- a/tests/mem-leaks/test-cases/bean-param-leak/src/test/java/org/glassfish/jersey/tests/memleaks/beanparam/BeanParamLeakResourceITCase.java
+++ b/tests/mem-leaks/test-cases/bean-param-leak/src/test/java/org/glassfish/jersey/tests/memleaks/beanparam/BeanParamLeakResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,13 +21,13 @@
 
 import org.glassfish.jersey.test.memleak.common.AbstractMemoryLeakWebAppTest;
 import org.glassfish.jersey.test.memleak.common.MemoryLeakSucceedingTimeout;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.InvocationInterceptor;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.Timeout;
-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;
 
 /**
  * This is an integration test that reproduces JERSEY-2800 by calling RESTful resource {@link BeanParamLeakResource}
@@ -42,13 +42,13 @@
         return new TestApplication();
     }
 
-    @Rule
-    public Timeout globalTimeout = new MemoryLeakSucceedingTimeout(300_000);
+    @RegisterExtension
+    public InvocationInterceptor globalTimeout = new MemoryLeakSucceedingTimeout(300_000);
 
     @Test
     public void testTheLeakResourceOnce() {
         final Response response = target("beanparam/invoke").queryParam("q", "hello").request().post(null);
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
         assertEquals("hello", response.readEntity(String.class));
     }
 
diff --git a/tests/mem-leaks/test-cases/leaking-test-app/src/test/java/org/glassfish/jersey/tests/memleaks/testleak/MemoryLeakingResourceITCase.java b/tests/mem-leaks/test-cases/leaking-test-app/src/test/java/org/glassfish/jersey/tests/memleaks/testleak/MemoryLeakingResourceITCase.java
index 3b7b9ab..16ec2e4 100644
--- a/tests/mem-leaks/test-cases/leaking-test-app/src/test/java/org/glassfish/jersey/tests/memleaks/testleak/MemoryLeakingResourceITCase.java
+++ b/tests/mem-leaks/test-cases/leaking-test-app/src/test/java/org/glassfish/jersey/tests/memleaks/testleak/MemoryLeakingResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,12 +22,12 @@
 
 import org.glassfish.jersey.test.memleak.common.AbstractMemoryLeakWebAppTest;
 import org.glassfish.jersey.test.memleak.common.MemoryLeakSucceedingTimeout;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.InvocationInterceptor;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.Timeout;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * Performs the test of a memory leaking RESTful resource.
@@ -36,8 +36,8 @@
  */
 public class MemoryLeakingResourceITCase extends AbstractMemoryLeakWebAppTest {
 
-    @Rule
-    public Timeout globalTimeout = new MemoryLeakSucceedingTimeout(100_000);
+    @RegisterExtension
+    public InvocationInterceptor globalTimeout = new MemoryLeakSucceedingTimeout(100_000);
 
     @Override
     protected Application configure() {
@@ -53,7 +53,7 @@
         final WebTarget webTarget = target("invoke").queryParam("size", 1024 * 1024);
         System.out.println(webTarget.getUri());
         final Response response = webTarget.request().post(null);
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
     }
 
     /**
diff --git a/tests/mem-leaks/test-cases/shutdown-hook-leak-client/src/test/java/org/glassfish/jersey/tests/memleaks/shutdownleak/client/EndlessShutdownHookLeakTest.java b/tests/mem-leaks/test-cases/shutdown-hook-leak-client/src/test/java/org/glassfish/jersey/tests/memleaks/shutdownleak/client/EndlessShutdownHookLeakTest.java
index 8b6c24f..3032a8a 100644
--- a/tests/mem-leaks/test-cases/shutdown-hook-leak-client/src/test/java/org/glassfish/jersey/tests/memleaks/shutdownleak/client/EndlessShutdownHookLeakTest.java
+++ b/tests/mem-leaks/test-cases/shutdown-hook-leak-client/src/test/java/org/glassfish/jersey/tests/memleaks/shutdownleak/client/EndlessShutdownHookLeakTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,10 +25,9 @@
 
 import org.glassfish.jersey.test.memleak.common.AbstractMemoryLeakSimpleTest;
 import org.glassfish.jersey.test.memleak.common.MemoryLeakSucceedingTimeout;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.Timeout;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.InvocationInterceptor;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 /**
  * Reproducer for JERSEY-2786.
@@ -39,8 +38,8 @@
 
     private static final Logger LOGGER = Logger.getLogger(EndlessShutdownHookLeakTest.class.getName());
 
-    @Rule
-    public Timeout globalTimeout = new MemoryLeakSucceedingTimeout();
+    @RegisterExtension
+    public InvocationInterceptor globalTimeout = new MemoryLeakSucceedingTimeout();
 
     final Client client = ClientBuilder.newClient();
     final WebTarget target = client.target("http://example.com");
diff --git a/tests/mem-leaks/test-cases/shutdown-hook-leak/src/test/java/org/glassfish/jersey/tests/memleaks/shutdownhook/ShutdownLeakResourceITCase.java b/tests/mem-leaks/test-cases/shutdown-hook-leak/src/test/java/org/glassfish/jersey/tests/memleaks/shutdownhook/ShutdownLeakResourceITCase.java
index 955d567..de3451a 100644
--- a/tests/mem-leaks/test-cases/shutdown-hook-leak/src/test/java/org/glassfish/jersey/tests/memleaks/shutdownhook/ShutdownLeakResourceITCase.java
+++ b/tests/mem-leaks/test-cases/shutdown-hook-leak/src/test/java/org/glassfish/jersey/tests/memleaks/shutdownhook/ShutdownLeakResourceITCase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -21,12 +21,12 @@
 
 import org.glassfish.jersey.test.memleak.common.AbstractMemoryLeakWebAppTest;
 import org.glassfish.jersey.test.memleak.common.MemoryLeakSucceedingTimeout;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.InvocationInterceptor;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.Timeout;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * This is an integration test that reproduces JERSEY-2786 by calling RESTful resource {@link ClientShutdownLeakResource}
@@ -41,13 +41,13 @@
         return new TestApplication();
     }
 
-    @Rule
-    public Timeout globalTimeout = new MemoryLeakSucceedingTimeout(20_000);
+    @RegisterExtension
+    public InvocationInterceptor globalTimeout = new MemoryLeakSucceedingTimeout(20_000);
 
     @Test
     public void testTheLeakResourceOnce() {
         final Response response = target("client/invoke").request().post(null);
-        Assert.assertEquals(200, response.getStatus());
+        Assertions.assertEquals(200, response.getStatus());
     }
 
     @Test
diff --git a/tests/osgi/functional/pom.xml b/tests/osgi/functional/pom.xml
index 5b0a889..ffbb2b3 100644
--- a/tests/osgi/functional/pom.xml
+++ b/tests/osgi/functional/pom.xml
@@ -76,6 +76,13 @@
                         </goals>
                     </execution>
                 </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.maven.surefire</groupId>
+                        <artifactId>surefire-junit47</artifactId>
+                        <version>${surefire.version}</version>
+                    </dependency>
+                </dependencies>
             </plugin>
             <!-- use pax exam maven plugin -->
             <plugin>
@@ -382,6 +389,12 @@
             <artifactId>jakarta.xml.bind-api</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit4.version}</version>
+            <scope>test</scope>
+        </dependency>
 
         <!-- logging -->
         <dependency>
diff --git a/tests/osgi/functional/src/test/java/org/glassfish/jersey/osgi/test/basic/AbstractJsonOsgiIntegrationTest.java b/tests/osgi/functional/src/test/java/org/glassfish/jersey/osgi/test/basic/AbstractJsonOsgiIntegrationTest.java
index cf3f3e7..1be5ad5 100644
--- a/tests/osgi/functional/src/test/java/org/glassfish/jersey/osgi/test/basic/AbstractJsonOsgiIntegrationTest.java
+++ b/tests/osgi/functional/src/test/java/org/glassfish/jersey/osgi/test/basic/AbstractJsonOsgiIntegrationTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -34,7 +34,7 @@
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.junit.PaxExam;
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Abstract JSON OSGi integration test.
diff --git a/tests/performance/benchmarks/src/test/java/org/glassfish/jersey/tests/performance/benchmark/server/JacksonTest.java b/tests/performance/benchmarks/src/test/java/org/glassfish/jersey/tests/performance/benchmark/server/JacksonTest.java
index b611d34..c432ff9 100644
--- a/tests/performance/benchmarks/src/test/java/org/glassfish/jersey/tests/performance/benchmark/server/JacksonTest.java
+++ b/tests/performance/benchmarks/src/test/java/org/glassfish/jersey/tests/performance/benchmark/server/JacksonTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,9 +23,9 @@
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.tests.performance.benchmark.entity.json.JacksonApplication;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/performance/benchmarks/src/test/java/org/glassfish/jersey/tests/performance/benchmark/server/LocatorTest.java b/tests/performance/benchmarks/src/test/java/org/glassfish/jersey/tests/performance/benchmark/server/LocatorTest.java
index ea70157..29ae667 100644
--- a/tests/performance/benchmarks/src/test/java/org/glassfish/jersey/tests/performance/benchmark/server/LocatorTest.java
+++ b/tests/performance/benchmarks/src/test/java/org/glassfish/jersey/tests/performance/benchmark/server/LocatorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,9 +23,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Michal Gajdos
diff --git a/tests/performance/test-cases/filter-dynamic/src/test/java/org/glassfish/jersey/tests/performance/filter/dynamic/FilterTest.java b/tests/performance/test-cases/filter-dynamic/src/test/java/org/glassfish/jersey/tests/performance/filter/dynamic/FilterTest.java
index 2cc9b58..71a8499 100644
--- a/tests/performance/test-cases/filter-dynamic/src/test/java/org/glassfish/jersey/tests/performance/filter/dynamic/FilterTest.java
+++ b/tests/performance/test-cases/filter-dynamic/src/test/java/org/glassfish/jersey/tests/performance/filter/dynamic/FilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for intercepted text plain resource.
diff --git a/tests/performance/test-cases/filter-global/src/test/java/org/glassfish/jersey/tests/performance/filter/global/FilterTest.java b/tests/performance/test-cases/filter-global/src/test/java/org/glassfish/jersey/tests/performance/filter/global/FilterTest.java
index 2580e50..96ebe59 100644
--- a/tests/performance/test-cases/filter-global/src/test/java/org/glassfish/jersey/tests/performance/filter/global/FilterTest.java
+++ b/tests/performance/test-cases/filter-global/src/test/java/org/glassfish/jersey/tests/performance/filter/global/FilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for intercepted text plain resource.
diff --git a/tests/performance/test-cases/filter-name/src/test/java/org/glassfish/jersey/tests/performance/filter/name/FilterTest.java b/tests/performance/test-cases/filter-name/src/test/java/org/glassfish/jersey/tests/performance/filter/name/FilterTest.java
index 2f6cd37..5ab301a 100644
--- a/tests/performance/test-cases/filter-name/src/test/java/org/glassfish/jersey/tests/performance/filter/name/FilterTest.java
+++ b/tests/performance/test-cases/filter-name/src/test/java/org/glassfish/jersey/tests/performance/filter/name/FilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for intercepted text plain resource.
diff --git a/tests/performance/test-cases/interceptor-dynamic/src/test/java/org/glassfish/jersey/tests/performance/interceptor/dynamic/InterceptorTest.java b/tests/performance/test-cases/interceptor-dynamic/src/test/java/org/glassfish/jersey/tests/performance/interceptor/dynamic/InterceptorTest.java
index 14a770a..6f4db87 100644
--- a/tests/performance/test-cases/interceptor-dynamic/src/test/java/org/glassfish/jersey/tests/performance/interceptor/dynamic/InterceptorTest.java
+++ b/tests/performance/test-cases/interceptor-dynamic/src/test/java/org/glassfish/jersey/tests/performance/interceptor/dynamic/InterceptorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for intercepted text plain resource.
diff --git a/tests/performance/test-cases/interceptor-global/src/test/java/org/glassfish/jersey/tests/performance/interceptor/global/InterceptorTest.java b/tests/performance/test-cases/interceptor-global/src/test/java/org/glassfish/jersey/tests/performance/interceptor/global/InterceptorTest.java
index cb417c8..bf54704 100644
--- a/tests/performance/test-cases/interceptor-global/src/test/java/org/glassfish/jersey/tests/performance/interceptor/global/InterceptorTest.java
+++ b/tests/performance/test-cases/interceptor-global/src/test/java/org/glassfish/jersey/tests/performance/interceptor/global/InterceptorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for intercepted text plain resource.
diff --git a/tests/performance/test-cases/interceptor-name/src/test/java/org/glassfish/jersey/tests/performance/interceptor/name/InterceptorTest.java b/tests/performance/test-cases/interceptor-name/src/test/java/org/glassfish/jersey/tests/performance/interceptor/name/InterceptorTest.java
index a18c1b0..25b8b7f 100644
--- a/tests/performance/test-cases/interceptor-name/src/test/java/org/glassfish/jersey/tests/performance/interceptor/name/InterceptorTest.java
+++ b/tests/performance/test-cases/interceptor-name/src/test/java/org/glassfish/jersey/tests/performance/interceptor/name/InterceptorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for intercepted text plain resource.
diff --git a/tests/performance/test-cases/mbw-custom-provider/src/test/java/org/glassfish/jersey/tests/performance/mbw/custom/PersonEntityTest.java b/tests/performance/test-cases/mbw-custom-provider/src/test/java/org/glassfish/jersey/tests/performance/mbw/custom/PersonEntityTest.java
index c2044b6..86a5a9c 100644
--- a/tests/performance/test-cases/mbw-custom-provider/src/test/java/org/glassfish/jersey/tests/performance/mbw/custom/PersonEntityTest.java
+++ b/tests/performance/test-cases/mbw-custom-provider/src/test/java/org/glassfish/jersey/tests/performance/mbw/custom/PersonEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,8 +23,8 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test for json resource.
diff --git a/tests/performance/test-cases/mbw-json-jackson/src/test/java/org/glassfish/jersey/tests/performance/mbw/json/JsonEntityTest.java b/tests/performance/test-cases/mbw-json-jackson/src/test/java/org/glassfish/jersey/tests/performance/mbw/json/JsonEntityTest.java
index 249e367..79bbdbb 100644
--- a/tests/performance/test-cases/mbw-json-jackson/src/test/java/org/glassfish/jersey/tests/performance/mbw/json/JsonEntityTest.java
+++ b/tests/performance/test-cases/mbw-json-jackson/src/test/java/org/glassfish/jersey/tests/performance/mbw/json/JsonEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for json resource.
diff --git a/tests/performance/test-cases/mbw-json-moxy/src/test/java/org/glassfish/jersey/tests/performance/mbw/json/JsonEntityTest.java b/tests/performance/test-cases/mbw-json-moxy/src/test/java/org/glassfish/jersey/tests/performance/mbw/json/JsonEntityTest.java
index b01c00d..4279874 100644
--- a/tests/performance/test-cases/mbw-json-moxy/src/test/java/org/glassfish/jersey/tests/performance/mbw/json/JsonEntityTest.java
+++ b/tests/performance/test-cases/mbw-json-moxy/src/test/java/org/glassfish/jersey/tests/performance/mbw/json/JsonEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.moxy.json.MoxyJsonFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for json resource.
diff --git a/tests/performance/test-cases/mbw-kryo/src/test/java/org/glassfish/jersey/tests/performance/mbw/kryo/PersonResourceTest.java b/tests/performance/test-cases/mbw-kryo/src/test/java/org/glassfish/jersey/tests/performance/mbw/kryo/PersonResourceTest.java
index 7d1d1e51..e4cd73a 100644
--- a/tests/performance/test-cases/mbw-kryo/src/test/java/org/glassfish/jersey/tests/performance/mbw/kryo/PersonResourceTest.java
+++ b/tests/performance/test-cases/mbw-kryo/src/test/java/org/glassfish/jersey/tests/performance/mbw/kryo/PersonResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.kryo.KryoFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test for kryo resource.
diff --git a/tests/performance/test-cases/mbw-text-plain/src/test/java/org/glassfish/jersey/tests/performance/mbw/text/TextEntityTest.java b/tests/performance/test-cases/mbw-text-plain/src/test/java/org/glassfish/jersey/tests/performance/mbw/text/TextEntityTest.java
index c513571..00fcdbf 100644
--- a/tests/performance/test-cases/mbw-text-plain/src/test/java/org/glassfish/jersey/tests/performance/mbw/text/TextEntityTest.java
+++ b/tests/performance/test-cases/mbw-text-plain/src/test/java/org/glassfish/jersey/tests/performance/mbw/text/TextEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for text plain resource.
diff --git a/tests/performance/test-cases/mbw-xml-jaxb/src/test/java/org/glassfish/jersey/tests/performance/mbw/xml/XmlEntityTest.java b/tests/performance/test-cases/mbw-xml-jaxb/src/test/java/org/glassfish/jersey/tests/performance/mbw/xml/XmlEntityTest.java
index 4f87ab1..2f18118 100644
--- a/tests/performance/test-cases/mbw-xml-jaxb/src/test/java/org/glassfish/jersey/tests/performance/mbw/xml/XmlEntityTest.java
+++ b/tests/performance/test-cases/mbw-xml-jaxb/src/test/java/org/glassfish/jersey/tests/performance/mbw/xml/XmlEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,8 +22,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for XML resource.
diff --git a/tests/performance/test-cases/mbw-xml-moxy/src/test/java/org/glassfish/jersey/tests/performance/mbw/xml/XmlEntityTest.java b/tests/performance/test-cases/mbw-xml-moxy/src/test/java/org/glassfish/jersey/tests/performance/mbw/xml/XmlEntityTest.java
index d1f6e56..03d4ac0 100644
--- a/tests/performance/test-cases/mbw-xml-moxy/src/test/java/org/glassfish/jersey/tests/performance/mbw/xml/XmlEntityTest.java
+++ b/tests/performance/test-cases/mbw-xml-moxy/src/test/java/org/glassfish/jersey/tests/performance/mbw/xml/XmlEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,8 +24,8 @@
 import org.glassfish.jersey.moxy.xml.MoxyXmlFeature;
 import org.glassfish.jersey.test.JerseyTest;
 
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for XML resource.
diff --git a/tests/performance/test-cases/monitoring/pom.xml b/tests/performance/test-cases/monitoring/pom.xml
index 9b499ff..c4076c2 100644
--- a/tests/performance/test-cases/monitoring/pom.xml
+++ b/tests/performance/test-cases/monitoring/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2014, 2021 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
 
     This program and the accompanying materials are made available under the
     terms of the Eclipse Public License v. 2.0, which is available at
@@ -41,9 +41,9 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.13.1</version>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>5.9.1</version>
             <scope>test</scope>
         </dependency>
 
diff --git a/tests/performance/test-cases/param-srl/src/test/java/org/glassfish/jersey/tests/performance/param/srl/SrlSrmTest.java b/tests/performance/test-cases/param-srl/src/test/java/org/glassfish/jersey/tests/performance/param/srl/SrlSrmTest.java
index 70a559c..d9559ab 100644
--- a/tests/performance/test-cases/param-srl/src/test/java/org/glassfish/jersey/tests/performance/param/srl/SrlSrmTest.java
+++ b/tests/performance/test-cases/param-srl/src/test/java/org/glassfish/jersey/tests/performance/param/srl/SrlSrmTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,8 +20,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test for SRL/SRM resource.
diff --git a/tests/performance/test-cases/proxy-injection/src/test/java/org/glassfish/jersey/tests/performance/proxy/injection/InjectedResourcesTest.java b/tests/performance/test-cases/proxy-injection/src/test/java/org/glassfish/jersey/tests/performance/proxy/injection/InjectedResourcesTest.java
index e504f05..c35aa3a 100644
--- a/tests/performance/test-cases/proxy-injection/src/test/java/org/glassfish/jersey/tests/performance/proxy/injection/InjectedResourcesTest.java
+++ b/tests/performance/test-cases/proxy-injection/src/test/java/org/glassfish/jersey/tests/performance/proxy/injection/InjectedResourcesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,8 +20,8 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test for field/method injected resource.
diff --git a/tests/stress/src/test/java/org/glassfish/jersey/server/internal/monitoring/MultiThreadingAggregatedReservoirTest.java b/tests/stress/src/test/java/org/glassfish/jersey/server/internal/monitoring/MultiThreadingAggregatedReservoirTest.java
index eed30f7..56df223 100644
--- a/tests/stress/src/test/java/org/glassfish/jersey/server/internal/monitoring/MultiThreadingAggregatedReservoirTest.java
+++ b/tests/stress/src/test/java/org/glassfish/jersey/server/internal/monitoring/MultiThreadingAggregatedReservoirTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -31,10 +31,10 @@
 
 import org.glassfish.jersey.server.internal.monitoring.core.TimeReservoir;
 import org.glassfish.jersey.server.internal.monitoring.core.UniformTimeSnapshot;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Multi Threading concurrency test of Jersey monitoring internals.
@@ -148,10 +148,10 @@
         doShutdown = true;
         producerExecutorService.shutdown();
         consumerExecutorService.shutdown();
-        Assert.assertTrue("Consumer tasks didn't terminated peacefully, aborting this test.",
-                          consumerExecutorService.awaitTermination(SHUTDOWN_TIMEOUT_SECONDS, TimeUnit.SECONDS));
-        Assert.assertTrue("Producer tasks didn't terminated peacefully, aborting this test.",
-                          producerExecutorService.awaitTermination(SHUTDOWN_TIMEOUT_SECONDS, TimeUnit.SECONDS));
+        Assertions.assertTrue(consumerExecutorService.awaitTermination(SHUTDOWN_TIMEOUT_SECONDS, TimeUnit.SECONDS),
+                          "Consumer tasks didn't terminated peacefully, aborting this test.");
+        Assertions.assertTrue(producerExecutorService.awaitTermination(SHUTDOWN_TIMEOUT_SECONDS, TimeUnit.SECONDS),
+                          "Producer tasks didn't terminated peacefully, aborting this test.");
 
         final long snapshotTime = System.nanoTime();
         final long sum = (long) incrementer.get() * (incrementer.get() + 1) / 2;
@@ -173,7 +173,7 @@
     /**
      * Shutdown the producer executor service.
      */
-    @After
+    @AfterEach
     public void shutdownProducers() {
         producerExecutorService.shutdownNow();
     }
@@ -181,7 +181,7 @@
     /**
      * Shutdown the consumer executor service.
      */
-    @After
+    @AfterEach
     public void shutdownConsumers() {
         consumerExecutorService.shutdownNow();
     }
@@ -205,10 +205,10 @@
                                      final double expectedMean, final long expectedInterval) {
         final UniformTimeSnapshot snapshot = reservoir.getSnapshot(snapshotTime, TimeUnit.NANOSECONDS);
 
-        assertEquals("Total count does not match!", expectedSize, snapshot.size());
-        assertEquals("Min exec time does not match!", expectedMin, snapshot.getMin());
-        assertEquals("Max exec time does not match!", expectedMax, snapshot.getMax());
-        assertEquals("Average exec time does not match!", expectedMean, snapshot.getMean(), DELTA);
-        assertEquals("Expected interval does not match!", expectedInterval, snapshot.getTimeInterval(TimeUnit.NANOSECONDS));
+        assertEquals(expectedSize, snapshot.size(), "Total count does not match!");
+        assertEquals(expectedMin, snapshot.getMin(), "Min exec time does not match!");
+        assertEquals(expectedMax, snapshot.getMax(), "Max exec time does not match!");
+        assertEquals(expectedMean, snapshot.getMean(), DELTA, "Average exec time does not match!");
+        assertEquals(expectedInterval, snapshot.getTimeInterval(TimeUnit.NANOSECONDS), "Expected interval does not match!");
     }
 }
diff --git a/tools/jersey-release-notes-maven-plugin/pom.xml b/tools/jersey-release-notes-maven-plugin/pom.xml
index a9c74ec..3ede899 100644
--- a/tools/jersey-release-notes-maven-plugin/pom.xml
+++ b/tools/jersey-release-notes-maven-plugin/pom.xml
@@ -85,7 +85,7 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
-            <version>4.12</version>
+            <version>4.13.2</version>
             <scope>test</scope>
         </dependency>
 
