【问题标题】:'Unable to load a Suite class' while running ScalaTest in IntelliJ在 IntelliJ 中运行 ScalaTest 时“无法加载套件类”
【发布时间】:2013-09-21 04:37:49
【问题描述】:

我今天在 Intellij 中运行一个简单的 TestKit 测试时遇到了一些问题。这些测试是针对 Scala 代码的(我有 Intellij 的 Scala 插件)并且基于 Ray Roestenburg's example

Intellij 项目是使用“Maven 模块”创建的,然后我将所有依赖项添加到并创建了我的项目。测试位于以下位置:

ActorBlast/src/test/scala/basicTest.scala

我基本上是“右键单击”测试并选择“运行”。我得到的是以下错误:

"C:\Program Files\Java\jdk1.7.0_25\bin\java" -Didea.launcher.port=7540... 测试于下午 2:29 开始... 无法加载套件类。这可能是由于您的运行路径中的错误。

缺少类:BasicActorSpec java.lang.ClassNotFoundException: BasicActorSpec 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 org.scalatest.tools.Runner$$anonfun$35.apply(Runner.scala:2393) 在 org.scalatest.tools.Runner$$anonfun$35.apply(Runner.scala:2391) 在 scala.collection.TraversableLike$$anonfun$filter$1.apply(TraversableLike.scala:264) 在 scala.collection.immutable.List.foreach(List.scala:318) 在 scala.collection.TraversableLike$class.filter(TraversableLike.scala:263) 在 scala.collection.AbstractTraversable.filter(Traversable.scala:105) 在 org.scalatest.tools.Runner$.doRunRunDaDoRunRun(Runner.scala:2391) 在 org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1006) 在 org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1005) 在 org.scalatest.tools.Runner$.withClassLoaderAndDispatchReporter(Runner.scala:2659) 在 org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:1005) 在 org.scalatest.tools.Runner$.run(Runner.scala:845) 在 org.scalatest.tools.Runner.run(Runner.scala) 在 org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:144) 在 org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:35) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

进程以退出代码 0 结束

我不明白这是什么意思。我做了很多搜索,但似乎找不到答案。请注意,跑步者抱怨找不到的课程是我要测试/运行的课程。 basicTest.scala 如下所示:

// Testing specific imports
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
import org.scalatest.{ShouldMatchers, WordSpecLike, BeforeAndAfterAll}
import akka.testkit.{TestKit, DefaultTimeout, ImplicitSender}
// Actor specific imports
import akka.actor.{ActorRef, Actor, ActorSystem, Props}
// Misc. needed imports
import scala.concurrent.duration._
import com.typesafe.config.ConfigFactory


// In order to run tests in this module you need to use JUnitRunner (as per scalatest.org)
@RunWith(classOf[JUnitRunner])
class BasicActorSpec extends TestKit(ActorSystem("BasicActorSpec", ConfigFactory.parseString(BasicActorSpec.config)))
  with DefaultTimeout with ImplicitSender with WordSpecLike with ShouldMatchers with BeforeAndAfterAll {

  import BasicActorSpec._

  val echoRef = system.actorOf(Props[EchoActor])
  val forwardRef = system.actorOf(Props[ForwardActor])

  override def afterAll {
    shutdown(system)
  }


  /**
   * The actual tests...
   */
  "An EchoActor" should {
    "Respond with the same message it receives" in {
      within(500 millis) {
        echoRef ! "test"
        expectMsg("test")
      }
    }
  }

  "A Forwarding Actor" should {
    "Forward a message it receives" in {
      within(500 millis) {
        forwardRef ! "test"
        expectMsg("test")
      }
    }
  }

}

/**
 * Companion object of test class
 */
object BasicActorSpec {

  val config =
    """
      |akka {
      | loglevel = "Warning"
      |}
    """.stripMargin

  /**
   * Classes of Actors used in testing
   */
  class EchoActor extends Actor {
    def receive = {
      case msg => sender ! msg
    }
  }

  class ForwardActor(next: ActorRef) extends Actor {
    def receive = {
      case msg => next ! msg
    }
  }

}

任何关于我为什么会收到此错误的帮助将不胜感激。

【问题讨论】:

    标签: scala intellij-idea akka


    【解决方案1】:

    运行构建项目 - 它帮助我解决了当我清除 Cache IDEA 时可能发生在我身上的问题 :) 在尝试解决另一个问题时

    【讨论】:

    • 为了清楚起见,我想 AlexPes 的意思是从顶部菜单构建 (ctrl+f9),而不是 edit configurations 中的构建。我做了构建和重建只是为了确定
    • 对我来说,它有助于实际清除缓存
    【解决方案2】:

    这就是我解决相同异常的方法:

    --> Right click on your project folder in IDE:
    

    --> Click Add Framework Support
    --> Then Check Scala
    --> Click OK
    

    【讨论】:

    • 谢谢。我添加了Play 2.0,而不是scala
    • 检查 Scala -> 未选择库 -> 无法单击确定
    【解决方案3】:

    我的项目已经有了@Rustam Aliyev 提到的设置。仍然得到同样的例外。重建项目也无济于事。很奇怪;但重新启动 IDE 有助于解决问题

    【讨论】:

    • 可能它应该是处理 intelij 的每个问题的第一件事
    【解决方案4】:

    我在使用Gatling时遇到了这个问题

    我通过将文件 -> 项目结构 -> 模块 -> 模块名称 -> 路径 -> 测试输出路径上的 gatling-classes 替换为 test-classes 来修复它

    【讨论】:

    • 这就是我的问题。我不确定这是错误还是功能...
    • 我遇到了同样的问题。此更改修复了它,因此代码可以运行。但是,我现在有一个不同的问题:资源没有被复制。我该去哪里解决这个问题?
    • 修复未复制的资源:@​​987654323@
    【解决方案5】:

    您需要设置 Scala SDK。 1.) 通常,intelliJ 会在编辑器的右上角显示一条消息来询问您 2.) 您可以按照https://www.jetbrains.com/help/idea/discover-intellij-idea-for-scala.html 中的说明自行完成

    【讨论】:

    • 请不要放外部链接。至少,将相关部分复制到您的答案中。
    【解决方案6】:

    就我而言,我的模块中缺少 Scala 方面。

    https://blog.jetbrains.com/scala/2010/09/02/project-configuration-explained/

    正确配置模块后,我摆脱了错误。

    【讨论】:

    • 这为我解决了。即使是现在,IntelliJ 也不会提示您这样做,直到您在创建后关闭并重新打开您的项目。
    【解决方案7】:

    我最近在尝试使用 IntelliJ IDEA 2018(社区版)在继承的 Scala 项目中运行测试时遇到了这个问题。以下步骤帮助我修复它:

    1. 文件→项目结构→{选择特定模块}→“路径”选项卡→选择“使用模块编译输出路径”→修改“测试输出路径”指向测试类 文件夹。例如:

      输出路径:/home/rustam/IdeaProjects/{project}/{module}/target/scala-2.12/classes
      测试输出路径:/ home/rustam/IdeaProjects/{project}/{module}/target/scala-2.12/test-classes

    2. IntelliJ 不喜欢在一个文件中定义多个 Scala 类,因此请确保测试类与测试文件命名相同,并嵌套其他帮助类,您可以稍后根据需要对其进行重构。

    【讨论】:

      【解决方案8】:

      如果您使用 IntelliJ 运行 scalatest,请确保类路径正确。例如:

       /dummyApp 
      

      您的build.sbt 应该类似于name := "dummyApp"。如果你把它命名为name := "dummy App",你会得到错误。

      【讨论】:

        【解决方案9】:

        就我而言,我在Preferences -> Build, Execution, Deployment -> sbt

        Use sbt shell for build and import 复选框已启用

        并且测试不在预期的目录src/test 中,而是在src/it(集成测试)中。

        【讨论】:

        • O,你是怎么解决的? (我想用 sbt 运行测试并将它放在 src/it 中)
        【解决方案10】:

        当测试类不属于任何包时,我遇到了错误。

        【讨论】:

          【解决方案11】:

          我正在使用 multi maven 模块,并在这里尝试了所有可能性,但无法解决此问题。但对我来说我关闭了完整的 IntelliJ -> 删除了 .idea 文件夹 -> 从最近的项目窗口中删除了托管项目。-> 重新导入项目 完成了这项工作。

          【讨论】:

            【解决方案12】:

            这种事情时不时地发生在我身上。以上所有更具体的建议都有其优点。另一种可能性(这次对我有用):编辑测试的运行配置;点击“使用 sbt”;运行测试(这应该没有问题,因为它只是使用 sbt-shell 来运行测试);现在取消选择“使用 sbt”并尝试一下。它对我有用。

            【讨论】:

              【解决方案13】:

              在长长的检查列表中的另一个,如果你不使用唯一的测试名称,你会在没有任何提示的情况下得到这个错误,在一个长的测试套件中更容易错过。
              失败

              test("Check thing 1") {
               class TestClass1 extends MainClass1{
               ... }
              test("Check thing 1") {
               class TestClass2 extends MainClass2{
               ... }
              

              成功

              test("Check thing 1") {
               class TestClass1 extends MainClass1{
               ... }
              test("Check thing 2") {
               class TestClass2 extends MainClass2{
               ... }
              

              【讨论】:

                【解决方案14】:

                我在 Idea 2021.1 上收到了同样的信息。我尝试了上述所有方法,但帮助我的是通过 sbt 运行 Scala 测试,如下所示:

                sbt "; project nameOfProject; testOnly some.package.SomeTest"
                

                之后我可以通过 Idea 调试相同的测试。

                【讨论】:

                  猜你喜欢
                  • 2011-05-29
                  • 1970-01-01
                  • 2012-04-12
                  • 1970-01-01
                  • 2014-02-16
                  • 2018-04-27
                  • 1970-01-01
                  • 2021-09-11
                  • 2012-12-27
                  相关资源
                  最近更新 更多