QuarkusTestExtension搭配SoftAssertionsExtension使用抛出异常如何解决
错误根因
你当前的写法有两处核心问题:
- 不应该直接通过
@ExtendWith(QuarkusTestExtension.class)启用Quarkus测试能力。Quarkus测试必须通过@QuarkusTest元注解触发,该注解会自动注册测试类为CDI Bean、完成测试上下文初始化等全套逻辑,直接引用扩展会导致Quarkus的CDI容器找不到测试类实例,就是你看到的UnsatisfiedResolutionException异常。 - 不需要手动声明
QuarkusTestExtension,@QuarkusTest已经内置了该扩展的加载逻辑。
解决方案
你只需要调整自定义组合注解的定义,将@QuarkusTest作为元注解加入即可,AssertJ的软断言扩展可以和Quarkus测试正常兼容:
import org.assertj.core.api.junit.jupiter.SoftAssertionsExtension; import io.quarkus.test.junit.QuarkusTest; import org.junit.jupiter.api.extension.ExtendWith; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @QuarkusTest @ExtendWith(SoftAssertionsExtension.class) @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface QuarkusAssertJTest {}
测试类代码不需要做任何修改,SoftAssertions参数注入、测试结束自动调用assertAll()的逻辑都可以正常运行。你使用的io.quarkus:quarkus-junit5:1.13.3.Final和org.assertj:assertj-core:3.21.0版本不存在兼容性问题,不需要调整依赖。
内容的提问来源于stack exchange,提问作者Matthias T
相关产品推荐
相关产品推荐

