SLING-9935 - NoClassDefFoundError org/junit/platform/engine/TestEngine
diff --git a/src/main/java/org/apache/sling/junit/impl/TestsManagerImpl.java b/src/main/java/org/apache/sling/junit/impl/TestsManagerImpl.java
index 80b8f7e..d895ce3 100644
--- a/src/main/java/org/apache/sling/junit/impl/TestsManagerImpl.java
+++ b/src/main/java/org/apache/sling/junit/impl/TestsManagerImpl.java
@@ -72,9 +72,9 @@
         bundleContext = ctx;
         testsProviderTracker = new ServiceTracker<>(bundleContext, TestsProvider.class, null);
         testsProviderTracker.open();
-        try {
+        if (JUnit5TestExecutionStrategy.canLoadRequiredClasses()) {
             executionStrategy = new JUnit5TestExecutionStrategy(this, ctx);
-        } catch (NoClassDefFoundError e) {
+        } else  {
             // (some) optional imports to org.junit.platform.* (JUnit5 API) are missing
             executionStrategy = new JUnit4TestExecutionStrategy(this);
         }
diff --git a/src/main/java/org/apache/sling/junit/impl/servlet/junit5/JUnit5TestExecutionStrategy.java b/src/main/java/org/apache/sling/junit/impl/servlet/junit5/JUnit5TestExecutionStrategy.java
index 89a6a1e..52c4c00 100644
--- a/src/main/java/org/apache/sling/junit/impl/servlet/junit5/JUnit5TestExecutionStrategy.java
+++ b/src/main/java/org/apache/sling/junit/impl/servlet/junit5/JUnit5TestExecutionStrategy.java
@@ -31,12 +31,30 @@
 import org.junit.runner.notification.RunListener;
 import org.osgi.framework.BundleContext;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
 import java.util.stream.Stream;
 
 import static org.junit.platform.engine.discovery.DiscoverySelectors.selectMethod;
 
 public class JUnit5TestExecutionStrategy implements TestExecutionStrategy {
 
+    // we assume that if we can load these two classes, the setup is ok for junit 5
+    private static final List<String> REQUIRED_CLASSES = Collections.unmodifiableList(Arrays.asList(
+            "org.junit.platform.engine.TestEngine",
+            "org.junit.platform.launcher.Launcher"
+    ));
+
+    public static boolean canLoadRequiredClasses() {
+        final ClassLoader classLoader = JUnit5TestExecutionStrategy.class.getClassLoader();
+        return REQUIRED_CLASSES.stream()
+                .allMatch(name -> {
+                    String path = name.replace('.', '/').concat(".class");
+                    return classLoader.getResource(path) != null;
+                });
+    }
+
     private final TestsManagerImpl testsManager;
 
     private final TestEngineTracker testEngineTracker;