Additional changes to execute all tests

Signed-off-by: jansupol <jan.supol@oracle.com>
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>