Index: /trunk/ivy.xml
===================================================================
--- /trunk/ivy.xml	(revision 16726)
+++ /trunk/ivy.xml	(revision 16727)
@@ -61,4 +61,5 @@
         <dependency conf="test->default" org="org.junit.platform" name="junit-platform-launcher" rev="1.6.2"/>
         <dependency conf="test->default" org="org.junit.vintage" name="junit-vintage-engine" rev="5.6.2"/>
+        <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-params" rev="5.6.2"/>
         <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-api" rev="5.6.2"/>
         <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-engine" rev="5.6.2"/>
Index: /trunk/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTestIT.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTestIT.java	(revision 16726)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTestIT.java	(revision 16727)
@@ -2,7 +2,7 @@
 package org.openstreetmap.josm.gui.preferences.imagery;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 import java.io.ByteArrayInputStream;
@@ -15,5 +15,4 @@
 import java.util.Locale;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Optional;
 import java.util.TreeMap;
@@ -25,10 +24,10 @@
 
 import org.apache.commons.jcs3.access.CacheAccess;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized.Parameters;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import org.openstreetmap.gui.jmapviewer.Coordinate;
 import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
@@ -62,5 +61,4 @@
 import org.openstreetmap.josm.io.imagery.WMSImagery.WMSGetCapabilitiesException;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
-import org.openstreetmap.josm.testutils.ParallelParameterized;
 import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.HttpClient.Response;
@@ -73,5 +71,4 @@
  * Integration tests of {@link ImageryPreference} class.
  */
-@RunWith(ParallelParameterized.class)
 public class ImageryPreferenceTestIT {
 
@@ -83,11 +80,10 @@
      * Setup rule
      */
-    @ClassRule
+    @RegisterExtension
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public static JOSMTestRules test = new JOSMTestRules().https().i18n().preferences().projection().projectionNadGrids()
-                                                   .timeout((int) TimeUnit.MINUTES.toMillis(40)).parameters();
+    static JOSMTestRules test = new JOSMTestRules().https().i18n().preferences().projection().projectionNadGrids()
+                                                   .timeout((int) TimeUnit.MINUTES.toMillis(40));
 
     /** Entry to test */
-    private final ImageryInfo info;
     private final Map<String, Map<ImageryInfo, List<String>>> errors = Collections.synchronizedMap(new TreeMap<>());
     private final Map<String, Map<ImageryInfo, List<String>>> ignoredErrors = Collections.synchronizedMap(new TreeMap<>());
@@ -102,5 +98,5 @@
      * @throws IOException in case of I/O error
      */
-    @BeforeClass
+    @BeforeAll
     public static void beforeClass() throws IOException {
         FeatureAdapter.registerApiKeyAdapter(ApiKeyProvider::retrieveApiKey);
@@ -113,5 +109,5 @@
      * Cleanup test
      */
-    @AfterClass
+    @AfterAll
     public static void afterClass() {
         for (String e : notIgnoredErrors) {
@@ -124,20 +120,10 @@
      * @return list of imagery entries to test
      */
-    @Parameters(name = "{0}")
-    public static List<Object[]> data() {
+    public static List<Arguments> data() {
         ImageryLayerInfo.instance.load(false);
         return ImageryLayerInfo.instance.getDefaultLayers()
                 .stream()
-                .map(x -> new Object[] {x.getId(), x})
+                .map(i -> Arguments.of(i.getId(), i))
                 .collect(Collectors.toList());
-    }
-
-    /**
-     * Constructs a new {@code ImageryPreferenceTestIT} instance.
-     * @param id entry ID, used only to name tests
-     * @param info entry to test
-     */
-    public ImageryPreferenceTestIT(String id, ImageryInfo info) {
-        this.info = Objects.requireNonNull(info);
     }
 
@@ -405,11 +391,15 @@
     /**
      * Test that available imagery entry is valid.
+     *
+     * @param id The id of the imagery info to show as the test name
+     * @param info The imagery info to test
      */
-    @Test
-    public void testImageryEntryValidity() {
+    @ParameterizedTest(name = "{0}")
+    @MethodSource("data")
+    public void testImageryEntryValidity(String id, ImageryInfo info) {
         checkEntry(info);
-        assertTrue(format(errors), errors.isEmpty());
+        assertTrue(errors.isEmpty(), format(errors));
         assertFalse(workingURLs.isEmpty());
-        assumeTrue(format(ignoredErrors), ignoredErrors.isEmpty());
+        assumeTrue(ignoredErrors.isEmpty(), format(ignoredErrors));
     }
 }
Index: /trunk/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java	(revision 16726)
+++ /trunk/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java	(revision 16727)
@@ -24,5 +24,7 @@
 
 import org.awaitility.Awaitility;
+import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.AfterEachCallback;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
@@ -82,5 +84,5 @@
  * @author Michael Zangl
  */
-public class JOSMTestRules implements TestRule, AfterEachCallback, BeforeEachCallback {
+public class JOSMTestRules implements TestRule, AfterEachCallback, BeforeEachCallback, AfterAllCallback, BeforeAllCallback {
     private int timeout = isDebugMode() ? -1 : 10 * 1000;
     private TemporaryFolder josmHome;
@@ -465,4 +467,14 @@
     }
 
+    @Override
+    public void beforeAll(ExtensionContext context) throws Exception {
+        beforeEach(context);
+    }
+
+    @Override
+    public void afterAll(ExtensionContext context) throws Exception {
+        afterEach(context);
+    }
+
     /**
      * Set up before running a test
