"Невозможно загрузить класс Suite" во время работы ScalaTest в IntelliJ

У меня сегодня есть проблемы с запуском простого теста TestKit в Intellij. Тесты для кода Scala (у меня есть плагин Scala для Intellij) и основаны на примере Рэя Рестенбурга.

Проект Intellij был создан с использованием модуля Maven, который затем добавил все зависимости и создал мой проект. Тесты находятся в следующем месте:

ActorBlast/SRC/тест/scala/basicTest.scala

Я в основном "щелкаю правой кнопкой" по тесту и выбираю "Запустить". Я получаю следующую ошибку:

"C:\Program Files\Java\jdk1.7.0_25\bin\java" -Didea.launcher.port = 7540... Тестирование началось в 2:29 вечера... Не удалось загрузить класс Suite. Это может быть связано с ошибкой в ​​вашей траектории пути.

Отсутствует класс: 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(собственный метод) в java.net.URLClassLoader.findClass(URLClassLoader.java:354) в java.lang.ClassLoader.loadClass(ClassLoader.java:424) в sun.misc.Launcher $AppClassLoader.loadClass(Launcher.java.308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) в org.scalatest.tools.Runner $$ anonfun $35.apply(Runner.scala: 2393) at org.scalatest.tools.Runner $$ anonfun $35.apply(Runner.scala: 2391) at scala.collection.TraversableLike $$ anonfun $фильтр $1.Apply(TraversableLike.scala: 264)   в scala.collection.immutable.List.foreach(List.scala: 318) at scala.collection.TraversableLike $class.filter(TraversableLike.scala: 263)   в scala.collection.AbstractTraversable.filter(Traversable.scala: 105)   в org.scalatest.tools.Runner $.doRunRunRunDaDoRunRun(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)   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)   at sun.reflect.NativeMethodAccessorImpl.invoke0 (Нативный метод) в 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
    }
  }

}

Любая помощь относительно того, почему я получаю эту ошибку, была бы высоко оценена.

Ответ 1

Запустите сборку проекта - это помогло мне решить проблему, которая могла случиться со мной, когда я очистил Cache IDEA :), пытаясь решить другую проблему

Ответ 2

Вам нужно настроить Scala SDK. 1.) Обычно intelliJ попросит вас, показывая сообщение в правом углу вашего редактора 2.) Вы можете сделать это самостоятельно, как указано на https://www.jetbrains.com/help/idea/discover-intellij-idea-for-scala.html

Ответ 3

Вот как я решил то же исключение:

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

enter image description here

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

Ответ 4

Если вы используете IntelliJ для запуска scalatest, убедитесь, что пути к классам верны. Например:

 /dummyApp 

ваш build.sbt должен выглядеть как name := "dummyApp". Если вы назовете его name := "dummy App", вы получите ошибки.

Ответ 6

Эта проблема возникла у меня недавно, когда я пытался запустить тесты в унаследованном проекте Scala с использованием IntelliJ IDEA 2018 (Community Edition). Следующие шаги помогли мне это исправить:

  1. Файл → Структура проекта → {Выбрать конкретный модуль} → вкладка "Пути" → Выбрать "Использовать выходной путь компиляции модуля" → Изменить "Тестовый выходной путь", чтобы указать папку с тестовыми классами. Например:

    Путь к выходу: /home/rustam/IdeaProjects/ndomproject coming/ndommodule coming/target/scala-2.12/classes
    Тестовый выходной путь : /home/rustam/IdeaProjects/ndomproject broadcast/ndommodule coming/target/scala-2.12/test-classes

  2. IntelliJ не любит множественные классы Scala, определенные в одном файле, поэтому убедитесь, что тестовый класс назван так же, как тестовый файл, и вложите другие вспомогательные классы, которые вы сможете реорганизовать позже, если необходимо.

Ответ 7

В моем случае я имел в Preferences → Build, Execution, Deployment → sbt

Use sbt shell for build and import флажок включен

И тест был не в ожидаемом каталоге src/test а в src/it (интегрированный тест).

Ответ 8

Я встретил эту проблему, когда я использовал Гатлинг

I've replaced 'gatling-classes' to 'test-classes'

Я исправляю это, заменяя gatling-classes на test-classes в Файл → Структура проекта → Модули → Имя модуля → Пути → Тестовый выходной путь

Ответ 9

Я столкнулся с ошибкой, когда тестовый класс не был частью какого-либо пакета.