diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/discoveryNEW/DiscoverySelectorResolverTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/discoveryNEW/DiscoverySelectorResolverTests.java index 766e4280954..0fa5a95c407 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/discoveryNEW/DiscoverySelectorResolverTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/discoveryNEW/DiscoverySelectorResolverTests.java @@ -52,7 +52,7 @@ public void testSingleClassResolution() { assertTrue(uniqueIds.contains(uniqueIdForMethod(MyTestClass.class, "test2()"))); } - // @Test + @Test public void testTwoClassesResolution() { ClassSelector selector1 = ClassSelector.forClass(MyTestClass.class); ClassSelector selector2 = ClassSelector.forClass(YourTestClass.class); @@ -82,7 +82,7 @@ public void testClassResolutionOfNestedClass() { assertTrue(uniqueIds.contains(uniqueIdForMethod(OtherTestClass.NestedTestClass.class, "test6()"))); } - // @Test + @Test public void testMethodResolution() throws NoSuchMethodException { MethodSelector selector = MethodSelector.forMethod( MyTestClass.class.getDeclaredMethod("test1").getDeclaringClass(), @@ -96,7 +96,7 @@ public void testMethodResolution() throws NoSuchMethodException { assertTrue(uniqueIds.contains(uniqueIdForMethod(MyTestClass.class, "test1()"))); } - // @Test + @Test public void testMethodResolutionFromInheritedMethod() throws NoSuchMethodException { MethodSelector selector = MethodSelector.forMethod(HerTestClass.class, MyTestClass.class.getDeclaredMethod("test1")); @@ -119,15 +119,6 @@ public void resolvingSelectorOfNonTestMethodResolvesNothing() throws NoSuchMetho assertTrue(engineDescriptor.allDescendants().isEmpty()); } - // @Test - public void testResolutionOfNotTestMethod() throws NoSuchMethodException { - MethodSelector selector = MethodSelector.forMethod( - MyTestClass.class.getDeclaredMethod("notATest").getDeclaringClass(), - MyTestClass.class.getDeclaredMethod("notATest")); - EngineDiscoveryRequest request = request().select(selector).build(); - assertThrows(PreconditionViolationException.class, () -> resolver.resolveSelectors(request)); - } - // @Test public void testClassResolutionByUniqueId() { UniqueIdSelector selector = UniqueIdSelector.forUniqueId(uniqueIdForClass(MyTestClass.class).getUniqueString()); diff --git a/junit5-engine/src/main/java/org/junit/gen5/engine/junit5/discoveryNEW/DiscoverySelectorResolver.java b/junit5-engine/src/main/java/org/junit/gen5/engine/junit5/discoveryNEW/DiscoverySelectorResolver.java index d73672ac1ec..b7710241174 100644 --- a/junit5-engine/src/main/java/org/junit/gen5/engine/junit5/discoveryNEW/DiscoverySelectorResolver.java +++ b/junit5-engine/src/main/java/org/junit/gen5/engine/junit5/discoveryNEW/DiscoverySelectorResolver.java @@ -14,12 +14,14 @@ import java.lang.reflect.Method; import java.util.List; +import java.util.Optional; import org.junit.gen5.commons.util.ReflectionUtils; import org.junit.gen5.engine.EngineDiscoveryRequest; import org.junit.gen5.engine.TestDescriptor; import org.junit.gen5.engine.UniqueId; import org.junit.gen5.engine.discovery.ClassSelector; +import org.junit.gen5.engine.discovery.MethodSelector; import org.junit.gen5.engine.junit5.descriptor.ClassTestDescriptor; import org.junit.gen5.engine.junit5.descriptor.MethodTestDescriptor; import org.junit.gen5.engine.junit5.discovery.IsPotentialTestContainer; @@ -37,33 +39,46 @@ public void resolveSelectors(EngineDiscoveryRequest request) { request.getSelectorsByType(ClassSelector.class).forEach(selector -> { resolveClass(selector.getTestClass()); }); + request.getSelectorsByType(MethodSelector.class).forEach(selector -> { + resolveMethod(selector.getTestClass(), selector.getTestMethod()); + }); } + private void resolveMethod(Class testClass, Method testMethod) { + Optional optionalParent = resolve(testClass, engineDescriptor, false); + optionalParent.ifPresent(parent -> { + resolve(testMethod, parent, true); + }); + } + private void resolveClass(Class testClass) { TestDescriptor parent = engineDescriptor; resolve(testClass, parent, true); } - private void resolve(Class testClass, TestDescriptor parent, boolean withChildren) { + private Optional resolve(Class testClass, TestDescriptor parent, boolean withChildren) { if (!new IsPotentialTestContainer().test(testClass)) - return; + return Optional.empty(); UniqueId uniqueId = parent.getUniqueId().append("class", testClass.getName()); - ClassTestDescriptor descriptor = new ClassTestDescriptor(uniqueId, testClass); - parent.addChild(descriptor); + ClassTestDescriptor classTestDescriptor = new ClassTestDescriptor(uniqueId, testClass); + parent.addChild(classTestDescriptor); if (withChildren) { List testMethodCandidates = findMethods(testClass, new IsTestMethod(), ReflectionUtils.MethodSortOrder.HierarchyDown); - testMethodCandidates.forEach(method -> resolve(method, descriptor, true)); + testMethodCandidates.forEach(method -> resolve(method, classTestDescriptor, true)); } + + return Optional.of(classTestDescriptor); } - private void resolve(Method testMethod, TestDescriptor parent, boolean withChildren) { + private Optional resolve(Method testMethod, TestDescriptor parent, boolean withChildren) { ClassTestDescriptor parentClassDescriptor = (ClassTestDescriptor) parent; UniqueId uniqueId = parentClassDescriptor.getUniqueId().append("method", testMethod.getName() + "()"); MethodTestDescriptor methodTestDescriptor = new MethodTestDescriptor(uniqueId, parentClassDescriptor.getTestClass(), testMethod); parentClassDescriptor.addChild(methodTestDescriptor); + return Optional.of(methodTestDescriptor); } }