Quarkus执行测试时检测不到测试用例,请求排查方案
Quarkus单元测试无法被检测到的排查方案
问题详情
执行./gradlew quarkusDev后按[r]运行测试,输出显示无测试用例可执行:
Starting test run, 0 tests to run. Running 1/0. Running: #JUnit Jupiter
测试文件路径为src/test/java/br.com.org.product.reports.service/ExampleTest.java,代码如下:
package br.com.org.product.reports.service; import io.quarkus.test.junit.QuarkusTest; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @QuarkusTest class ExampleTest { @Test public void example() { assertEquals(1 + 1, 2); } }
build.gradle相关配置:
plugins { id 'java' id 'io.quarkus' id 'jacoco' } java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } dependencies { testImplementation 'io.quarkus:quarkus-junit5' testImplementation 'io.rest-assured:rest-assured' } compileJava { options.encoding = 'UTF-8' options.compilerArgs << '-parameters' } compileTestJava { options.encoding = 'UTF-8' }
新项目测试正常,但现有项目无法检测到测试用例,需排查原因。
可能的原因及解决办法
目录结构错误:当前测试文件路径
src/test/java/br.com.org.product.reports.service不符合Java规范,包对应的目录必须是层级结构,正确路径应为src/test/java/br/com/org/product/reports/service/ExampleTest.java。把完整包名当成单个目录,会导致Quarkus扫描不到测试类。测试类访问权限问题:虽然JUnit 5允许非public测试类,但部分场景下Quarkus的扫描逻辑可能对权限敏感。试试给测试类加上
public修饰符:@QuarkusTest public class ExampleTest { @Test public void example() { assertEquals(1 + 1, 2); } }依赖版本不一致:检查Quarkus插件和依赖的版本是否统一。可以在
build.gradle里明确指定版本,避免隐式版本冲突:plugins { id 'java' id 'io.quarkus' version '你的Quarkus版本' // 比如2.16.8.Final id 'jacoco' } dependencies { testImplementation enforcedPlatform("io.quarkus:quarkus-bom:${quarkusPluginVersion}") testImplementation 'io.quarkus:quarkus-junit5' testImplementation 'io.rest-assured:rest-assured' }测试类未正确编译:执行
./gradlew clean testClasses清理并重新编译测试类,查看编译日志是否有错误。如果编译失败,测试类不会生成,自然检测不到。Jacoco插件干扰:暂时注释掉Jacoco插件,重新运行测试,看是否能检测到用例。部分情况下Jacoco配置会影响测试类扫描:
// id 'jacoco'
内容的提问来源于stack exchange,提问作者Allan Juan
相关产品推荐
相关产品推荐

