Gradle运行test任务不执行ScalaTest测试且测试数为0如何解决
问题根源
你当前配置启用了JUnit Platform执行测试,但缺少ScalaTest对接JUnit Platform的运行器依赖,同时存在Scala主版本跨版本依赖冲突、依赖配置过时的问题,导致Gradle无法识别ScalaTest测试用例。
调整步骤
- 统一Scala版本依赖,消除跨版本冲突
将所有后缀为_2.11的依赖改为_2.12,避免Scala 2.11和2.12版本混用的兼容性问题,同时将所有废弃的compile、testCompile配置替换为官方推荐的implementation、testImplementation,保证依赖传递逻辑正确:
// 替换原来的两个跨版本依赖 implementation('com.typesafe.scala-logging:scala-logging-slf4j_2.12:2.1.2') implementation('org.json4s:json4s-jackson_2.12:3.7.0-M4')
- 添加ScalaTest JUnit运行器依赖
在dependencies块中添加ScalaTest对接JUnit Platform的运行器依赖,这样JUnit Platform才能识别ScalaTest的测试用例:
testRuntimeOnly 'org.scalatest:scalatest-junit-runner_2.12:3.2.0'
- 补充test任务的测试类匹配规则(可选,针对非标准命名的测试类)
如果你的测试类没有遵循默认的*Test、*Spec等命名规则,可以在test块中显式指定测试类匹配规则:
test { useJUnitPlatform() // 显式包含ScalaTest常用的测试类命名格式 include('**/*Test.class', '**/*Spec.class', '**/*Suite.class') testLogging { events "passed", "skipped", "failed" } }
额外确认:请确保你的Scala测试用例都放在src/test/scala目录下,遵循Gradle Scala插件默认的源码目录规范
修改后完整核心配置参考
plugins { id "maven-publish" id "scala" id 'java' id 'jacoco' } ext { scalaVersion = "2.12.10" // 请和你项目实际使用的Scala版本保持一致 scalaBinaryVersion = "2.12" } scala { zincVersion = "1.2.1" } repositories { mavenLocal() jcenter() mavenCentral() maven { url 'http://conjars.org/repo' } } dependencies { implementation "org.scala-lang:scala-library:${scalaVersion}" implementation "org.scala-lang:scala-reflect:${scalaVersion}" implementation "org.scala-lang:scala-compiler:${scalaVersion}" implementation('org.apache.spark:spark-core_2.12:2.4.6') implementation('org.apache.spark:spark-sql_2.12:2.4.6') implementation('com.typesafe.scala-logging:scala-logging-slf4j_2.12:2.1.2') implementation('ch.hsr:geohash:1.3.0') implementation('joda-time:joda-time:2.3') implementation('org.json4s:json4s-jackson_2.12:3.7.0-M4') implementation('org.apache.httpcomponents:httpclient:4.5.6') implementation('com.fasterxml.jackson.datatype:jackson-datatype-joda:2.5.1') implementation 'com.typesafe:config:1.4.1' implementation 'com.google.guava:guava:29.0-jre' implementation 'org.scala-lang.modules:scala-xml_2.12:1.2.0' testImplementation 'junit:junit:4.12' testImplementation 'org.scalatest:scalatest_2.12:3.2.0' testRuntimeOnly 'org.scalatest:scalatest-junit-runner_2.12:3.2.0' testImplementation ("org.mockito:mockito-scala_2.12:1.16.42") testImplementation("org.junit.jupiter:junit-jupiter-api:5.4.2") testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.7.0") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.4.2") testImplementation group: 'com.holdenkarau', name: 'spark-testing-base_2.12', version: '2.4.5_1.0.0' } test { useJUnitPlatform() include('**/*Test.class', '**/*Spec.class', '**/*Suite.class') testLogging { events "passed", "skipped", "failed" } }
修改完成后执行./gradlew clean test即可看到ScalaTest用例被正常执行。
内容的提问来源于stack exchange,提问作者Manu Chaudhary
相关产品推荐
相关产品推荐

