diff --git a/core/runtime/pom.xml b/core/runtime/pom.xml index 9edd8f92208c1..439cb05b18a1f 100644 --- a/core/runtime/pom.xml +++ b/core/runtime/pom.xml @@ -120,6 +120,11 @@ org.objenesis:objenesis net.bytebuddy:byte-buddy net.bytebuddy:byte-buddy-agent + org.junit.jupiter:junit-jupiter-api + org.junit.jupiter:junit-jupiter-engine + org.junit.jupiter:junit-jupiter-params + org.junit.platform:junit-platform-commons + org.junit.platform:junit-platform-engine io.smallrye:smallrye-config diff --git a/integration-tests/main/src/test/java/io/quarkus/it/main/DynamicTestsTestCase.java b/integration-tests/main/src/test/java/io/quarkus/it/main/DynamicTestsTestCase.java new file mode 100644 index 0000000000000..875324903111b --- /dev/null +++ b/integration-tests/main/src/test/java/io/quarkus/it/main/DynamicTestsTestCase.java @@ -0,0 +1,39 @@ +package io.quarkus.it.main; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.Arrays; +import java.util.List; + +import javax.inject.Inject; + +import org.junit.jupiter.api.DynamicTest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestFactory; + +import io.quarkus.it.arc.UnusedBean; +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +public class DynamicTestsTestCase { + + @Inject + UnusedBean bean; + + @Test + public void testInjection() { + assertNotNull(bean); + } + + @TestFactory + public List dynamicTests() { + return Arrays.asList( + DynamicTest.dynamicTest("test 1", () -> { + assertNotNull(bean); + }), + DynamicTest.dynamicTest("test 2", () -> { + assertEquals(1, 1); + })); + } +} diff --git a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java index b4fd2185dabd1..e273ae8a28795 100644 --- a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java +++ b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java @@ -320,6 +320,17 @@ public void interceptTestTemplateMethod(Invocation invocation, ReflectiveI invocation.skip(); } + @Override + public T interceptTestFactoryMethod(Invocation invocation, + ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { + if (isNativeTest(extensionContext)) { + return invocation.proceed(); + } + T result = (T) runExtensionMethod(invocationContext, extensionContext); + invocation.skip(); + return result; + } + @Override public void interceptAfterEachMethod(Invocation invocation, ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { @@ -342,7 +353,7 @@ public void interceptAfterAllMethod(Invocation invocation, ReflectiveInvoc invocation.skip(); } - private void runExtensionMethod(ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) + private Object runExtensionMethod(ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { Method newMethod = null; @@ -389,7 +400,7 @@ private void runExtensionMethod(ReflectiveInvocationContext invocationCo } } - newMethod.invoke(actualTestInstance, argumentsFromTccl.toArray(new Object[0])); + return newMethod.invoke(actualTestInstance, argumentsFromTccl.toArray(new Object[0])); } catch (InvocationTargetException e) { throw e.getCause(); } catch (IllegalAccessException | ClassNotFoundException e) {