You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行./gradlew test时检测到0个测试用例完成,求助缺失依赖

问题描述

执行./gradlew test时,系统显示完成0个测试用例,但代码仓库中存在30个测试文件,已尝试添加@QuarkusTest注解,问题仍未解决,需排查依赖相关问题。

配置文件(build.gradle)
plugins {
    id 'java'
    id 'io.quarkus'
}

repositories {
    mavenLocal()
    maven {
        credentials {
            username MAVEN_REPO_USERNAME
            password MAVEN_REPO_PASSWORD
        }
        url REPOSITORY_URL
    }
}

// 定义需要包含的源文件
sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
        resources {
            srcDir 'src/main/resources'
        }
    }

    test {
        java{
            srcDir 'src/test/java/unit'
            srcDir 'src/test/java/component'
        }
    }
}

processResources {
    from ('src/main/java')
    exclude ('**/*.java')
}

dependencies {
    implementation "io.quarkus:quarkus-resteasy-jackson"
    implementation 'com.fasterxml.woodstox:woodstox-core:6.5.0'
    implementation 'com.codahale.metrics:metrics-core:3.0.2'
    implementation group: 'io.quarkus', name: 'quarkus-narayana-jta', version: '2.1.3.Final'
    implementation 'io.quarkus:quarkus-jdbc-mysql'
    implementation 'io.quarkus:quarkus-agroal'
    implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}"){
        exclude group: 'org.apache.logging.log4j', module: 'log4j-api'
    }
    implementation 'io.quarkus:quarkus-kafka-client'
    implementation 'io.quarkus:quarkus-amazon-s3'
    implementation 'io.quarkus:quarkus-amazon-sqs'
    implementation 'io.quarkus:quarkus-logging-json'
    implementation 'io.quarkus:quarkus-arc'
    implementation 'io.quarkus:quarkus-resteasy'
    implementation "io.quarkus:quarkus-bootstrap-core"
    implementation 'io.quarkus:quarkus-rest-client'
    implementation 'io.quarkus:quarkus-scheduler'
    implementation "org.apache.commons:commons-lang3:3.11"
    implementation "commons-collections:commons-collections:3.2.2"
    implementation 'org.opensearch.client:opensearch-rest-high-level-client:2.0.0'
    implementation 'io.quarkus:quarkus-smallrye-openapi'
    implementation 'io.quarkus:quarkus-micrometer'
    implementation 'io.micrometer:micrometer-registry-prometheus:1.6.1'
    implementation 'io.quarkus:quarkus-smallrye-health:1.10.2.Final'
    testImplementation 'io.quarkus:quarkus-junit5'
    testImplementation 'io.rest-assured:rest-assured'

    compile(
            "com.amazonaws:aws-java-sdk:1.11.35",
            "com.amazonaws:aws-java-sdk-s3:1.12.272",
            "javax.activation:activation:1.1",
            "javax.mail:mail:1.4.3",
            "commons-dbcp:commons-dbcp:1.4",
            "commons-fileupload:commons-fileupload:1.5",
            "javax.servlet:javax.servlet-api:3.0.1",
            "javax.ws.rs:javax.ws.rs-api:2.0",
            "org.glassfish.jersey.core:jersey-client:2.27",
            "org.glassfish.jersey.core:jersey-common:2.27",
            "org.glassfish.jersey.containers:jersey-container-servlet:2.27",
            "org.glassfish.jersey.containers:jersey-container-servlet-core:2.27",
            "org.glassfish.jersey.media:jersey-media-json-jackson:2.27",
            "org.glassfish.jersey.media:jersey-media-multipart:2.27",
            "org.glassfish.jersey.core:jersey-server:2.27",
            "org.glassfish.jersey.ext:jersey-bean-validation:2.27",
            "org.glassfish.jersey.inject:jersey-hk2:2.27",
            "org.glassfish.jersey.bundles.repackaged:jersey-guava:2.25.1",
            "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.9.7",
            "org.springframework.security:spring-security-core:5.8.2",
            "org.javassist:javassist:3.16.1-GA",
            "org.json:json:20230227",
            "commons-io:commons-io:2.4",
            "org.apache.commons:commons-lang3:3.1",
            "org.apache.commons:commons-compress:1.21",
            "javax.validation:validation-api:1.1.0.Final",
            "io.dropwizard.metrics:metrics-core:3.1.0",
            "io.dropwizard.metrics:metrics-jersey2:3.1.0",
            "commons-modeler:commons-modeler:2.0.1",
            "com.google.code.gson:gson:2.9.1",
            "com.google.guava:guava:18.0",
            "net.sf.trove4j:trove4j:3.0.3",
            "com.google.protobuf:protobuf-java:3.19.2",
            "com.googlecode.concurrent-trees:concurrent-trees:2.4.0",
            "commons-logging:commons-logging:1.1.1",
            "commons-collections:commons-collections:3.2.1",
            "org.codehaus.groovy:groovy-all:3.0.13",
            "org.antlr:antlr4-runtime:4.5.1",
            "io.searchbox:jest:5.3.3",
            "com.amazonaws:amazon-sqs-java-extended-client-lib:1.0.2",
            "com.jayway.jsonpath:json-path:0.9.1",
            "xerces:xercesImpl:2.12.2",
            "org.quartz-scheduler:quartz:2.2.1",
            "javax.xml.bind:jaxb-api:2.3.0",
            "com.sun.xml.bind:jaxb-core:2.3.0.1",
            "com.sun.xml.bind:jaxb-impl:2.3.0",
            // 添加lz4依赖,因为公共库未暴露它
            "org.lz4:lz4-java:1.5.0",
            // 该库提供对IPv4和IPv6的广泛支持
            "com.github.seancfoley:ipaddress:5.2.1",
            "org.opensearch.client:opensearch-rest-high-level-client:2.5.0",
            "org.apache.logging.log4j:log4j-api:2.17.1",
            "org.slf4j:slf4j-api:1.7.32",
            "org.slf4j:slf4j-simple:1.7.31",
            "com.amazonaws:aws-java-sdk-kms:1.12.288",
            "org.apache.xmlgraphics:batik-dom:1.15",
            "org.apache.xmlgraphics:xmlgraphics-commons:2.7",
            "net.minidev:json-smart:2.4.8",
            "org.apache.xmlgraphics:batik-css:1.15",
            "org.apache.kafka:kafka-clients:3.3.1",
            "com.fasterxml.jackson.core:jackson-databind:2.14.0-rc1",
            "com.google.code.gson:gson:2.9.1",
            "org.springframework:spring-expression:5.3.23",
            "commons-beanutils:commons-beanutils:1.9.4",
            "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.13.4",
            "org.jboss.resteasy:resteasy-core:6.2.0.Final",
            "commons-httpclient:commons-httpclient:3.0.1",
            "io.netty:netty-codec-http:4.1.82.Final",
            "io.netty:netty-codec:4.1.82.Final",
            "org.apache.xmlgraphics:fop:2.8",
            "org.apache.xmlgraphics:batik-util:1.15"
    )
    compile ("org.docx4j:docx4j:3.3.1") {
        exclude group: 'xalan', module:'xalan'
    }
    compile ("org.docx4j:docx4j-export-fo:3.3.1") {
        exclude group: 'xalan', module:'xalan'
    }
    compile ("mysql:mysql-connector-java:8.0.28",) {
        force = true
    }
    compile ('org.apache.httpcomponents:httpclient:4.5.2') {
        force = true
    }

    compile ('org.springframework:spring-beans:5.3.18') {
        force = true
    }

    compile ('org.springframework:spring-core:5.3.18') {
        force = true
    }
    
    compile ("org.yaml:snakeyaml:2.0") {
        force = true
    }
    
    compile ('org.testng:testng:7.7.1') {
        force = true
    }

    compile ('io.vertx:vertx-web:4.4.0') {
        force = true
    }

    compile('com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.14.2') {
        force = true;
    }

    // AWS SDK 2.x 用于KMS访问
    implementation platform('software.amazon.awssdk:bom:2.15.73')
    implementation('software.amazon.awssdk:kms') {
        exclude group: 'io.netty', module: '*'
    }

    
    // 需要忽略的包定义
    configurations {
        all*.exclude module : 'log4j'
        all*.exclude module: "slf4j-log4j12"
    }

    // 包含非Maven标准布局文件到war包
    testCompile (
            "org.mockito:mockito-core:2.27.0",
            "org.powermock:powermock-api-mockito2:2.0.2",
            "org.powermock:powermock-module-junit4:2.0.2",
            'org.mockito:mockito-all:1.10.19',
            'org.testcontainers:elasticsearch:1.15.1',
            "org.testcontainers:kafka:1.15.1",
            "org.testcontainers:testcontainers:1.15.1",
            "org.awaitility:awaitility:3.0.0",
            "org.mockito:mockito-core:3.7.0"
    )
}

version '1.0.0-SNAPSHOT'

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

compileJava {
    options.compilerArgs.add("-XDignore.symbol.file")
    //options.compilerArgs.add("-Werror")
    options.encoding = "UTF-8"
    options.fork = true
    options.forkOptions.executable = 'javac'
    options.deprecation = true
}

compileTestJava {
    options.encoding = 'UTF-8'
}

test {
    ignoreFailures = false
    reports.html.destination = file("$buildDir/test-reports")
    useJUnitPlatform()
    systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
}
解决方案与排查步骤

1. 修复测试依赖冲突与配置

  • 调整TestNG依赖位置:将org.testng:testng:7.7.1从compile移到testImplementation,并添加JUnit平台的TestNG引擎依赖,确保测试能被识别:
    testImplementation 'org.testng:testng:7.7.1'
    testImplementation 'org.testng:testng-junit-platform:7.7.1'
    
  • 替换JUnit 4兼容的PowerMock:powermock-module-junit4与JUnit 5不兼容,若需保留PowerMock,改用JUnit 5适配版本:
    testImplementation 'org.powermock:powermock-module-junit5:2.0.9'
    testImplementation 'org.powermock:powermock-api-mockito2:2.0.9'
    
    或者直接移除PowerMock,使用Quarkus原生的@Mock/@InjectMock注解(需添加io.quarkus:quarkus-junit5-mockito依赖)。
  • 清理重复Mockito依赖:删除重复的mockito-core和mockito-all,保留一个与Quarkus平台兼容的版本。

2. 确保测试文件被Gradle识别

  • 检查测试文件名是否符合默认规则(以Test/Tests结尾),若不符合,在test任务中添加包含规则:
    test {
        include '**/*Test.java'
        include '**/*Tests.java'
        include '**/*TestCase.java' // 根据实际命名调整
    }
    
  • 执行./gradlew testClasses验证测试类是否被编译,若未编译,检查sourceSets.test.java的路径拼写是否正确。

3. 统一Quarkus依赖版本

当前Quarkus依赖版本混乱(如quarkus-narayana-jta为2.1.3.Final,quarkus-smallrye-health为1.10.2.Final),建议完全依赖Quarkus BOM管理版本,移除手动指定的单个Quarkus依赖版本:

// 保留BOM配置
implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}"){
    exclude group: 'org.apache.logging.log4j', module: 'log4j-api'
}
// 移除手动指定版本的Quarkus依赖,例如:
// implementation group: 'io.quarkus', name: 'quarkus-narayana-jta', version: '2.1.3.Final'
// 改为:
implementation 'io.quarkus:quarkus-narayana-jta'

4. 区分单元测试与集成测试

  • @QuarkusTest仅用于需要启动Quarkus应用的集成测试,普通单元测试无需添加该注解,使用JUnit 5/TestNG的@Test标准注解即可。
  • 若需分离两类测试,可在sourceSets中新增integrationTest源集,单独配置集成测试任务。

内容的提问来源于stack exchange,提问作者Abhishek Khaiwale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:31:59