39

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

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:在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.security.AccessController 的 BasicActorSpec。 doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at 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) at scala.collection.TraversableLike$$anonfun$filter$1.apply(TraversableLike.scala:264) at scala.collection.immutable.List.foreach(List.scala:318) at scala.收藏。TraversableLike$class.filter(TraversableLike.scala:263) at scala.collection.AbstractTraversable.filter(Traversable.scala:105) at org.scalatest.tools.Runner$.doRunRunDaDoRunRun(Runner.scala:2391) at org.scalatest。 tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1006) at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1005) at org.scalatest.tools.Runner$ .withClassLoaderAndDispatchReporter(Runner.scala:2659) at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:1005) at org.scalatest.tools.Runner$.run(Runner.scala:845) at 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。 com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 的 java.lang.reflect.Method.invoke(Method.java:606) 的调用(DelegatingMethodAccessorImpl.java:43)execution.application.AppMain.main(AppMain.java:120)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
    }
  }

}

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

4

15 回答 15

14

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

于 2018-08-30T10:43:28.450 回答
11

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

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

在此处输入图像描述

--> Click Add Framework Support
--> Then Check Scala
--> Click OK
于 2018-05-04T18:12:03.830 回答
8

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

于 2020-01-31T19:07:12.993 回答
7

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

我已将 'gatling-classes' 替换为 'test-classes'

我通过在 File -> Project Structure -> Modules -> Module Name -> Paths -> Test output path上替换gatling-classes来修复它test-classes

于 2018-11-15T14:01:33.767 回答
4

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

于 2018-02-27T11:35:14.633 回答
4

这个问题最近发生在我身上,当时我尝试使用IntelliJ IDEA 2018 (Community Edition)在继承的 Scala 项目中运行测试。以下步骤帮助我修复它:

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

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

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

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

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

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

于 2017-08-14T17:35:26.440 回答
2

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

 /dummyApp 

build.sbt应该看起来像,name := "dummyApp"。如果你命名它,name := "dummy App"你会得到错误。

于 2013-09-17T15:44:14.640 回答
1

您可以尝试重新编译测试类:

sbt test:compile
于 2022-02-03T11:40:50.283 回答
0

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

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{
 ... }
于 2021-03-18T12:48:48.610 回答
0

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

于 2021-01-15T17:30:38.553 回答
0

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

于 2019-02-18T14:52:29.827 回答
0

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

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

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

于 2021-04-23T14:21:54.600 回答
0

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

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

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

于 2018-11-14T18:15:23.283 回答
0

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

于 2020-11-19T03:08:57.813 回答