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

IntelliJ中Scala+JUnit测试执行成功但不显示绿色对勾问题

问题:Scala测试执行正常但IntelliJ不显示绿色对勾

在macOS Ventura 13.0系统上,首次使用IntelliJ IDEA 2021.3.1社区版搭建Scala开发环境,通过JUnit运行Scala测试代码时,测试执行正常(控制台可打印测试日志且逻辑验证通过),但IntelliJ未显示代表测试通过的绿色对勾。

相关代码

Scala业务代码

package com.sd.proj.executable

object HelloWorld {
  def my_message(msg:String):String ={
    msg
  }
}

Scala测试代码

package com.sd.proj.junit_test

import org.junit.runner.RunWith
import org.scalatestplus.junit.JUnitRunner
import com.sd.proj.executable.HelloWorld
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.must.Matchers

@RunWith(classOf[JUnitRunner])
class HelloWorldTest extends AnyFlatSpec with Matchers {
  val msg = HelloWorld.my_message("Hello World!!!")
  println("testing - " + msg)
  msg mustBe "Hello World!!!"
}

build.gradle配置

plugins {
    id 'scala'
    id 'idea'
}

repositories {
    mavenCentral()
}

sourceSets{
    main{
        scala.srcDirs = ['src/main/scala']
        resources.srcDirs = ['src/main/resources']
    }
    test{
        scala.srcDirs = ['src/test/scala']
        resources.srcDirs = ['src/test/resources']
    }
}

dependencies {
    //scala
    implementation 'org.scala-lang:scala-library:2.12.15'
    implementation 'org.scala-lang:scala-reflect:2.12.15'
    implementation 'org.scala-lang:scala-compiler:2.12.15'
    //junit
    testImplementation 'junit:junit:4.12'
    testImplementation 'org.scalatestplus:scalatestplus-junit_2.12:1.0.0-M2'
}

原因分析

  • 测试代码结构不规范:断言直接写在类的顶级作用域,而非标准测试方法/块内,导致Scalatest+JUnit Runner无法识别为有效测试用例,IDE无法捕获测试状态。
  • 依赖版本兼容性差:使用的scalatestplus-junit_2.12:1.0.0-M2是早期里程碑版本,与IntelliJ IDEA 2021.3.1的Scala插件适配性不足。
  • IDE缓存或配置未生效:首次搭建环境时,IntelliJ可能未正确关联Gradle配置的测试框架,或缓存导致状态识别异常。

解决建议

  1. 修正测试代码结构
    按照AnyFlatSpec的标准写法,将断言放入it块中,让Runner能识别测试用例:

    package com.sd.proj.junit_test
    
    import org.junit.runner.RunWith
    import org.scalatestplus.junit.JUnitRunner
    import com.sd.proj.executable.HelloWorld
    import org.scalatest.flatspec.AnyFlatSpec
    import org.scalatest.matchers.must.Matchers
    
    @RunWith(classOf[JUnitRunner])
    class HelloWorldTest extends AnyFlatSpec with Matchers {
      "HelloWorld.my_message" should "return the input string unchanged" in {
        val msg = HelloWorld.my_message("Hello World!!!")
        println("testing - " + msg)
        msg mustBe "Hello World!!!"
      }
    }
    
  2. 升级Scalatestplus-junit依赖版本
    在build.gradle中替换为兼容Scala 2.12和JUnit 4的稳定版本,同步后重新构建:

    testImplementation 'org.scalatestplus:scalatestplus-junit_2.12:3.2.10.0'
    
  3. 重置IntelliJ配置与缓存

    • 确认src/test/scala目录已标记为Test Sources Root(右键目录 > Mark Directory as > Test Sources Root)。
    • 执行File > Invalidate Caches...,选择Invalidate and Restart清除缓存并重启IDE。
    • 右键测试类,选择Run 'HelloWorldTest',确保运行配置使用JUnit框架。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:15:35