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 c7c25d7..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
@@ -21,7 +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 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;
@@ -34,7 +42,21 @@
  */
 public class RestrictedResourceTest {
 
-    public abstract static class RestrictedResourceTemplateTest extends JerseyTest {
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
+    }
+
+    @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;
+    }
+
+    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")
@@ -136,16 +158,4 @@
             assertThat(mixedField, nullValue());
         }
     }
-
-    public static class MoxyJsonFeatureRestrictedResourceTest extends RestrictedResourceTemplateTest {
-        public MoxyJsonFeatureRestrictedResourceTest() {
-            super(MoxyJsonFeature.class);
-        }
-    }
-
-    public static class JacksonFeatureRestrictedResourceTest extends RestrictedResourceTemplateTest {
-        public JacksonFeatureRestrictedResourceTest() {
-            super(JacksonFeature.class);
-        }
-    }
 }
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 f7b7126..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
@@ -20,7 +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 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;
@@ -32,7 +40,21 @@
  */
 public class UnrestrictedResourceTest {
 
-    public abstract static class UnrestrictedResourceTemplateTest extends JerseyTest {
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
+    }
+
+    @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;
+    }
+
+    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")
@@ -58,16 +80,4 @@
             assertThat(mixedField.getUserField(), nullValue());
         }
     }
-
-    public static class MoxyJsonFeatureUnrestrictedResourceTest extends UnrestrictedResourceTemplateTest {
-        public MoxyJsonFeatureUnrestrictedResourceTest() {
-            super(MoxyJsonFeature.class);
-        }
-    }
-
-    public static class JacksonFeatureUnrestrictedResourceTest extends UnrestrictedResourceTemplateTest {
-        public JacksonFeatureUnrestrictedResourceTest() {
-            super(JacksonFeature.class);
-        }
-    }
 }
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 f21cdf4..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
@@ -10,6 +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;
 
@@ -26,7 +29,10 @@
 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 static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -40,7 +46,21 @@
  */
 public class PersonResourceTest {
 
-    public abstract static class PersonResourceTemplateTest extends JerseyTest {
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
+    }
+
+    @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;
+    }
+
+    public static class PersonResourceTemplateTest extends JerseyTest {
         private final Class<? extends Feature> filteringProvider;
 
         public PersonResourceTemplateTest(final Class<? extends Feature> filteringProvider) {
@@ -193,16 +213,4 @@
             assertThat(secondLevel.getRegion(), nullValue());
         }
     }
-
-    public static class MoxyJsonFeaturePersonResourceTest extends PersonResourceTemplateTest {
-        public MoxyJsonFeaturePersonResourceTest() {
-            super(MoxyJsonFeature.class);
-        }
-    }
-
-    public static class JacksonFeaturePersonResourceTest extends PersonResourceTemplateTest {
-        public JacksonFeaturePersonResourceTest() {
-            super(JacksonFeature.class);
-        }
-    }
 }
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 0e28544..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
@@ -10,6 +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;
@@ -22,8 +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.Nested;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
 
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -36,8 +42,22 @@
  */
 public class ProjectsResourceTest {
 
-    public abstract static class ProjectsResourceTemplateTest extends JerseyTest {
-        public ProjectsResourceTemplateTest(final Class<?extends Feature> filteringProvider) {
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
+    }
+
+    @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;
+    }
+
+    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));
@@ -87,17 +107,4 @@
         }
     }
 
-    @Nested
-    public static class MoxyJsonFeatureProjectsResourceTest extends ProjectsResourceTemplateTest {
-        public MoxyJsonFeatureProjectsResourceTest() {
-            super(MoxyJsonFeature.class);
-        }
-    }
-
-    @Nested
-    public static class JacksonFeatureProjectsResourceTest extends ProjectsResourceTemplateTest {
-        public JacksonFeatureProjectsResourceTest() {
-            super(JacksonFeature.class);
-        }
-    }
 }
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 bf1e6dd..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
@@ -10,6 +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;
@@ -22,7 +25,10 @@
 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 static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -35,6 +41,20 @@
  */
 public class TaskResourceTest {
 
+    public static Iterable<Class<? extends Feature>> providers() {
+        return Arrays.asList(MoxyJsonFeature.class, JacksonFeature.class);
+    }
+
+    @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;
+    }
+
     public abstract static class TaskResourceTemplateTest extends JerseyTest {
         public TaskResourceTemplateTest(final Class<? extends Feature> filteringProvider) {
             super(new ResourceConfig(EntityFilteringFeature.class)
@@ -85,16 +105,4 @@
             }
         }
     }
-
-    public static class MoxyJsonFeatureTaskResourceTest extends TaskResourceTemplateTest {
-        public MoxyJsonFeatureTaskResourceTest() {
-            super(MoxyJsonFeature.class);
-        }
-    }
-
-    public static class JacksonFeatureTaskResourceTest extends TaskResourceTemplateTest {
-        public JacksonFeatureTaskResourceTest() {
-            super(JacksonFeature.class);
-        }
-    }
 }
diff --git a/examples/extended-wadl-webapp/pom.xml b/examples/extended-wadl-webapp/pom.xml
index 57b6907..e44a4ee 100644
--- a/examples/extended-wadl-webapp/pom.xml
+++ b/examples/extended-wadl-webapp/pom.xml
@@ -234,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/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 b5b7f03..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
@@ -98,6 +98,14 @@
     }
 
     @Override
+    @AfterAll
+    public void tearDown() throws Exception {
+        super.tearDown();
+        System.out.printf("SYNC: %d, ASYNC: %d, STRAIGHT: %d%n",
+                parameterizedCounter.intValue(), parameterizedAsyncCounter.intValue(), straightCounter.intValue());
+    }
+
+    @Override
     protected ResourceConfig configure() {
         //        enable(TestProperties.LOG_TRAFFIC);
         return App.createJaxRsApp();
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/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 1c94be1..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
@@ -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;
@@ -57,6 +58,7 @@
 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.
@@ -616,7 +618,7 @@
     @BeforeEach
     public void setUp() throws Exception {
         synchronized (this) {
-            if (activeThreadCount.getAndIncrement() == 0) {
+            if (!isConcurrent() || activeThreadCount.getAndIncrement() == 0) {
                 registerLogHandlerIfEnabled();
                 final TestContainer testContainer = createTestContainer(context);
 
@@ -631,6 +633,24 @@
     }
 
     /**
+     * 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;
+    }
+
+    /**
      * Tear down the test by {@link TestContainer#stop() stopping} the test container obtained from the
      * {@link #getTestContainerFactory() test container factory} and by {@link javax.ws.rs.client.Client#close() closing}
      * and discarding the {@link #configureClient(org.glassfish.jersey.client.ClientConfig) pre-configured} test client
@@ -642,7 +662,7 @@
     @AfterEach
     public void tearDown() throws Exception {
         synchronized (this) {
-            if (activeThreadCount.decrementAndGet() == 0) {
+            if (!isConcurrent() || activeThreadCount.decrementAndGet() == 0) {
                 if (isLogRecordingEnabled()) {
                     unregisterLogHandler();
                 }
diff --git a/test-framework/util/pom.xml b/test-framework/util/pom.xml
index 00f19b8..6c174f7 100644
--- a/test-framework/util/pom.xml
+++ b/test-framework/util/pom.xml
@@ -47,6 +47,7 @@
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>${junit4.version}</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.hamcrest</groupId>
@@ -54,4 +55,20 @@
             <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/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..5392424 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
@@ -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 9c17e49..106955c 100644
--- a/tests/e2e-client/pom.xml
+++ b/tests/e2e-client/pom.xml
@@ -189,6 +189,12 @@
             <artifactId>hamcrest</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>
     </dependencies>
 
     <profiles>
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 cdd1bbe..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
@@ -35,6 +35,8 @@
 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;
@@ -55,6 +57,15 @@
  * Moved from jetty-connector
  * @author Marcelo Rubim
  */
+@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";
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 0a7de66..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
@@ -36,12 +36,22 @@
 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
  */
+@Suite
+@SelectClasses({
+        ContextResolverMediaTypeTest.ProduceTest.class,
+        ContextResolverMediaTypeTest.ProducesSeparateTest.class,
+        ContextResolverMediaTypeTest.ProducesTest.class,
+        ContextResolverMediaTypeTest.ProducesXXXTest.class,
+})
 public class ContextResolverMediaTypeTest {
 
     @Produces("text/plain")
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 5588da6..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
@@ -42,12 +42,21 @@
 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
  */
+@Suite
+@SelectClasses({
+        EmptyRequestWithJaxbTest.EmptyRequestTest.class,
+        EmptyRequestWithJaxbTest.BadgerFishCRTest.class,
+        EmptyRequestWithJaxbTest.MappedJettisonCRTest.class
+})
 public class EmptyRequestWithJaxbTest {
 
     @SuppressWarnings("UnusedParameters")
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 0620475..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
@@ -38,6 +38,9 @@
 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.jupiter.api.Assertions.assertEquals;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -46,6 +49,19 @@
  * @author Paul Sandoz
  * @author Martin Matula
  */
+@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
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 7dc9b5a..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
@@ -40,12 +40,19 @@
 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
  */
+@Suite
+@SelectClasses({
+        JsonEmptyEntityTest.JacksonFeatureJsonEmptyEntityTest.class,
+        JsonEmptyEntityTest.MoxyJsonFeatureJsonEmptyEntityTest.class
+})
 public class JsonEmptyEntityTest {
 
     public static class MoxyJsonFeatureJsonEmptyEntityTest extends JsonEmptyEntityTemplateTest {
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 2251b60..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
@@ -46,6 +46,9 @@
 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 static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -54,6 +57,12 @@
 /**
  * @author Michal Gajdos
  */
+@Suite
+@SelectClasses({
+        JsonEntityFilteringClientTest.JacksonFeatureJsonEntityFilteringClientTest.class,
+        JsonEntityFilteringClientTest.JsonEntityFilteringClientTemplateTest.class,
+        JsonEntityFilteringClientTest.MoxyJsonFeatureJsonEntityFilteringClientTest.class
+})
 public class JsonEntityFilteringClientTest {
 
     public static class MoxyJsonFeatureJsonEntityFilteringClientTest extends JsonEntityFilteringClientTemplateTest {
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 7420415..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
@@ -42,6 +42,9 @@
 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 static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -52,6 +55,12 @@
  *
  * @author Michal Gajdos
  */
+@Suite
+@SelectClasses({
+        JsonEntityFilteringOnClassTest.JacksonFeatureJsonEntityFilteringOnClassTest.class,
+        JsonEntityFilteringOnClassTest.JsonEntityFilteringOnClassTemplateTest.class,
+        JsonEntityFilteringOnClassTest.MoxyJsonFeatureJsonEntityFilteringOnClassTest.class
+})
 public class JsonEntityFilteringOnClassTest {
 
     public static class MoxyJsonFeatureJsonEntityFilteringOnClassTest extends JsonEntityFilteringOnClassTemplateTest {
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 e729381..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
@@ -42,6 +42,9 @@
 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 static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -52,6 +55,12 @@
  *
  * @author Michal Gajdos
  */
+@Suite
+@SelectClasses({
+        JsonEntityFilteringOnPropertiesTest.JacksonFeatureJsonEntityFilteringOnPropertiesTest.class,
+        JsonEntityFilteringOnPropertiesTest.JsonEntityFilteringOnPropertiesTemplateTest.class,
+        JsonEntityFilteringOnPropertiesTest.MoxyJsonFeatureJsonEntityFilteringOnPropertiesTest.class
+})
 public class JsonEntityFilteringOnPropertiesTest {
 
     public static class MoxyJsonFeatureJsonEntityFilteringOnPropertiesTest extends JsonEntityFilteringOnPropertiesTemplateTest {
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 813db39..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
@@ -33,6 +33,9 @@
 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 static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -41,6 +44,11 @@
 /**
  * @author Michal Gajdos
  */
+@Suite
+@SelectClasses({
+        JsonEntityFilteringScopesTest.JacksonFeatureJsonEntityFilteringScopesTest.class,
+        JsonEntityFilteringScopesTest.MoxyJsonFeatureJsonEntityFilteringScopesTest.class
+})
 public class JsonEntityFilteringScopesTest {
 
     public static class MoxyJsonFeatureJsonEntityFilteringScopesTest extends JsonEntityFilteringScopesTemplateTest {
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 c220a8e..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
@@ -22,8 +22,9 @@
 import org.glassfish.jersey.test.ContainerPerClassTestNgStrategy;
 import org.glassfish.jersey.test.spi.TestNgStrategy;
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -36,13 +37,13 @@
 
     private ConcurrentMap<Integer, String> values = new ConcurrentHashMap<>();
 
-    @BeforeAll
+    @BeforeClass
     @Override
     public void setUp() throws Exception {
         super.setUp();
     }
 
-    @AfterAll
+    @AfterClass
     @Override
     public void tearDown() throws Exception {
         super.tearDown();
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 49a4773..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
@@ -42,6 +42,9 @@
 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 static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -50,6 +53,9 @@
  *
  * @author Jakub Podlesak
  */
+@Suite
+@SelectClasses({HugeEntityTest.GrizzlyConnectorProviderHugeEntityTest.class,
+        HugeEntityTest.JdkConnectorProviderHugeEntityTest.class})
 public class HugeEntityTest {
 
     private static final int BUFFER_LENGTH = 1024 * 1024; // 1M
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 f7a873e..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
@@ -33,6 +33,8 @@
 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 static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -41,6 +43,9 @@
  *
  * @author Stepan Kopriva
  */
+@Suite
+@SelectClasses({MethodTest.JdkConnectorProviderMethodTest.class,
+        MethodTest.GrizzlyConnectorProviderMethodTest.class})
 public class MethodTest {
 
     private static final String PATH = "test";
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 32532b8..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
@@ -43,7 +43,7 @@
  *
  * @author Michal Gajdos
  */
-@Disabled("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/container/ResponseWriterMetadataTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/ResponseWriterMetadataTest.java
index bba1f57..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
@@ -40,6 +40,7 @@
 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;
@@ -127,6 +128,7 @@
                     .property(ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER, 1);
         }
 
+        @Test
         @ParameterizedTest
         @MethodSource("parameters")
         public void testResponse() {
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/microprofile/rest-client/pom.xml b/tests/integration/microprofile/rest-client/pom.xml
index e764c01..ba499b6 100644
--- a/tests/integration/microprofile/rest-client/pom.xml
+++ b/tests/integration/microprofile/rest-client/pom.xml
@@ -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>
diff --git a/tests/jmockit/pom.xml b/tests/jmockit/pom.xml
index 54a6034..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>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter</artifactId>
+            <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 c76e233..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
@@ -27,7 +27,7 @@
 import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
-import org.junit.jupiter.api.Test;
+import org.junit.Test;
 import org.jvnet.mimepull.MIMEMessage;
 import org.jvnet.mimepull.MIMEParsingException;
 
@@ -49,8 +49,8 @@
 import java.net.URL;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
 
 /**
  * Tests for multipart {@code MessageBodyReader} and {@code MessageBodyWriter} as well as {@code FormDataMultiPart} and {@code
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 0f8bafd..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
@@ -23,13 +23,11 @@
 import org.glassfish.jersey.tests.jmockit.server.innerstatic.InnerStaticClass;
 import org.glassfish.jersey.tests.jmockit.server.toplevel.PublicRootResourceClass;
 import org.glassfish.jersey.tests.jmockit.server.toplevelinnerstatic.PublicRootResourceInnerStaticClass;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
+import org.junit.Test;
 
 /**
  * @author Pavel Bucek
  */
-@Disabled("@Mocked cannot be used with Iterator (since 1.45)")
 public class ResourceConfigTest {
 
     /**
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 00d614d..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
@@ -16,14 +16,14 @@
 
 package org.glassfish.jersey.tests.jmockit.server.internal.scanning;
 
+import mockit.Expectations;
 import mockit.Injectable;
-import mockit.MockUp;
 import mockit.Tested;
 import mockit.Verifications;
 import org.glassfish.jersey.server.internal.scanning.PackageNamesScanner;
 import org.glassfish.jersey.server.internal.scanning.ResourceFinderException;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -37,9 +37,8 @@
 import java.util.Vector;
 import java.util.jar.JarInputStream;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 /**
  * Unit tests for {@link PackageNamesScanner}.
@@ -53,7 +52,7 @@
 
     private String jaxRsApiPath;
 
-    @BeforeEach
+    @Before
     public void setUp() throws Exception {
         final String classPath = System.getProperty("java.class.path");
         final String[] entries = classPath.split(System.getProperty("path.separator"));
@@ -72,27 +71,27 @@
 
     @Test
     public void testWsJarScheme() {
-        assertTrue(new PackageNamesScanner(createTestClassLoader("wsjar", createTestURLStreamHandler("wsjar"), jaxRsApiPath),
-                packages, false).hasNext(), "Expected at least one class to be found.");
+        assertTrue("Expected at least one class to be found.",
+                new PackageNamesScanner(createTestClassLoader("wsjar", createTestURLStreamHandler("wsjar"), jaxRsApiPath),
+                        packages, false).hasNext());
     }
 
     @Test
     public void testJarScheme() {
         // Uses default class loader
-        assertTrue(new PackageNamesScanner(packages, false).hasNext(), "Expected at least one class to be found.");
+        assertTrue("Expected at least one class to be found.", new PackageNamesScanner(packages, false).hasNext());
     }
 
     @Test
     public void testZipScheme() {
-        assertTrue(new PackageNamesScanner(createTestClassLoader("zip", createTestURLStreamHandler("zip"), jaxRsApiPath),
-                        packages, false).hasNext(), "Expected at least one class to be found.");
+        assertTrue("Expected at least one class to be found.",
+                new PackageNamesScanner(createTestClassLoader("zip", createTestURLStreamHandler("zip"), jaxRsApiPath),
+                        packages, false).hasNext());
     }
 
-    @Test
+    @Test(expected = ResourceFinderException.class)
     public void testInvalidScheme() {
-        assertThrows(ResourceFinderException.class,
-                () -> new PackageNamesScanner(
-                        createTestClassLoader("bad", createTestURLStreamHandler("bad"), jaxRsApiPath), packages, false));
+        new PackageNamesScanner(createTestClassLoader("bad", createTestURLStreamHandler("bad"), jaxRsApiPath), packages, false);
     }
 
 
@@ -111,7 +110,7 @@
         JarInputStream stream = new JarInputStream(
                 new ByteArrayInputStream("test".getBytes(), 0, 4));
 
-        new MockUp(InputStream.class){};
+        new Expectations(InputStream.class){};
 
         scanner1.reset();
 
@@ -135,7 +134,7 @@
         JarInputStream stream = new JarInputStream(
                 new ByteArrayInputStream("test".getBytes(), 0, 4));
 
-        new MockUp(JarInputStream.class){};
+        new Expectations(JarInputStream.class){};
 
         scanner1.close();
 
@@ -160,8 +159,9 @@
         JarInputStream stream = new JarInputStream(
                 new ByteArrayInputStream("test".getBytes(), 0, 4));
 
-        new MockUp(JarInputStream.class) {{
+        new Expectations(JarInputStream.class) {{
             stream.getNextJarEntry();
+            result = null;
             stream.close();
         }};
 
diff --git a/tests/osgi/functional/pom.xml b/tests/osgi/functional/pom.xml
index 117688a..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>
