Skip to content

Can't create custom meta annotation for @QuarkusTest #47217

@edeandrea

Description

@edeandrea

Describe the bug

I'm trying to compose my own meta annotation that encompasses @QuarkusTest as well as additional functionality.

I initially discussed it here: https://quarkusio.zulipchat.com/#narrow/channel/187038-dev/topic/.40QuarkusTest.20annotation.20not.20inheritable.3F/with/510278646 but I decided to put together a simple reproducer which demonstrates the problem.

I tried to compose my own annotation 2 different ways:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@QuarkusTest
public @interface MetaAnnotation {
}

and

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ExtendWith(QuarkusTestExtension.class)
public @interface MetaAnnotation2 {
}

and placing it on a test class.

Expected behavior

I would expect to be able to create my own custom annotation that could compose @QuarkusTest, or even @ExtendWith(QuarkusTestExtension.class).

Actual behavior

When I try to do that I get these kinds of errors:

org.junit.jupiter.api.extension.TestInstantiationException: Failed to create test instance
        at io.quarkus.test.junit.QuarkusTestExtension.initTestState(QuarkusTestExtension.java:767)
        at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:733)
        at java.base/java.util.Optional.orElseGet(Optional.java:364)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at io.quarkus.runner.bootstrap.RunningQuarkusApplicationImpl.instance(RunningQuarkusApplicationImpl.java:90)
        at io.quarkus.test.junit.QuarkusTestExtension.createActualTestInstance(QuarkusTestExtension.java:773)
        at io.quarkus.test.junit.QuarkusTestExtension.initTestState(QuarkusTestExtension.java:761)
        ... 4 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at io.quarkus.runner.bootstrap.RunningQuarkusApplicationImpl.instance(RunningQuarkusApplicationImpl.java:88)
        ... 6 more
Caused by: jakarta.enterprise.inject.UnsatisfiedResolutionException: No bean found for required type [class org.example.ExampleResource2Test] and qualifiers [[]]
        at io.quarkus.arc.impl.InstanceImpl.bean(InstanceImpl.java:288)
        at io.quarkus.arc.impl.InstanceImpl.getInternal(InstanceImpl.java:309)
        at io.quarkus.arc.impl.InstanceImpl.get(InstanceImpl.java:190)
        ... 8 more

2025-04-07 12:33:18,765 INFO  [io.quarkus] (main) demo stopped in 0.007s

How to Reproduce?

Reproducer: demo.zip

  1. Unzip the reproducer
  2. cd demo
  3. ./mvnw clean test

You'll notice that the NoMetaAnnotationTest class runs successfully, yet MetaAnnotationTest and MetaAnnotation2Test do not.

Output of uname -a or ver

Darwin edeandrea-m4max 24.4.0 Darwin Kernel Version 24.4.0: Wed Mar 19 21:17:35 PDT 2025; root:xnu-11417.101.15~1/RELEASE_ARM64_T6041 arm64

Output of java -version

openjdk version "21.0.6" 2025-01-21 LTS
OpenJDK Runtime Environment Temurin-21.0.6+7 (build 21.0.6+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.6+7 (build 21.0.6+7-LTS, mixed mode, sharing)

Quarkus version or git rev

3.21.1

Build tool (ie. output of mvnw --version or gradlew --version)

Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /Users/edeandre/.m2/wrapper/dists/apache-maven-3.9.9-bin/33b4b2b4/apache-maven-3.9.9
Java version: 21.0.6, vendor: Eclipse Adoptium, runtime: /Users/edeandre/.sdkman/candidates/java/21.0.6-tem
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "15.4", arch: "aarch64", family: "mac"

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions