web-dev-qa-db-fra.com

«Impossible de charger une classe Suite» lors de l'exécution de ScalaTest dans IntelliJ

J'ai des problèmes aujourd'hui avec l'exécution d'un test TestKit simple dans Intellij. Les tests sont pour Scala (j'ai le Scala pour Intellij) et sont basés sur l'exemple de Ray Roestenburg ).

Le projet Intellij a été créé à l'aide d'un "module Maven" auquel j'ai ensuite ajouté toutes les dépendances et créé mon projet. Les tests sont situés à l'endroit suivant:

ActorBlast/src/test/scala/basicTest.scala

Je fais un "clic droit" sur le test et je sélectionne "Exécuter". Ce que j'obtiens est l'erreur suivante:

"C:\Program Files\Java\jdk1.7.0_25\bin\Java" -Didea.launcher.port = 7540 ... Les tests ont commencé à 2:29 PM ... Impossible de charger une classe Suite. Cela peut être dû à une erreur dans votre chemin d'exécution.

Classe manquante: BasicActorSpec Java.lang.ClassNotFoundException: BasicActorSpec sur Java.net.URLClassLoader $ 1.run (URLClassLoader.Java:366) sur Java.net.URLClassLoader $ 1.run (URLClassLoader.Java:355) sur Java.security.AccessController. doPrivileged (Native Method) sur Java.net.URLClassLoader.findClass (URLClassLoader.Java:354) sur Java.lang.ClassLoader.loadClass (ClassLoader.Java:424) sur Sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.Java: 308) sur Java.lang.ClassLoader.loadClass (ClassLoader.Java:357) sur org.scalatest.tools.Runner $$ anonfun $ 35.apply (Runner.scala: 2393) sur 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. collection.TraversableLike $ class.filter (TraversableLike.scala: 263) sur scala.collection.AbstractTraversable.filter (Traversable.scala: 105) sur org.scalatest.tools.Runner $ .doRunRunRunDaDoRunRun (Runner.scala: 2391) sur o rg.scalatest.tools.Runner $$ anonfun $ runOptionallyWithPassFailReporter $ 2.apply (Runner.scala: 1006) sur org.scalatest.tools.Runner $$ anonfun $ runOptionallyWithPassFailReporter $ 2.apply (Runner.scala: 100al) à 1005) tools.Runner $ .withClassLoaderAndDispatchReporter (Runner.scala: 2659) sur org.scalatest.tools.Runner $ .runOptionallyWithPassFailReporter (Runner.scala: 1005) sur org.scalatest.tools.Runner $ .run (Runner.scala) org.scalatest.tools.Runner.run (Runner.scala) at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2 (ScalaTestRunner.Java:144) at org.jetbrains.plugins.scala.testingSpl ScalaTestRunner.main (ScalaTestRunner.Java:35) sur Sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) sur Sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.Java:57) sur Sun.reflect.DelccessAmpletAccessorModel 43) sur Java.lang.reflect.Method.invoke (Method.Java:606) sur com.intellij.rt.execution.applic ation.AppMain.main (AppMain.Java:120)

Processus terminé avec le code de sortie 0

Je ne peux pas comprendre ce que cela signifie. J'ai fait beaucoup de recherches mais je n'arrive pas à trouver de réponse. Notez que la classe que le coureur se plaint de ne pas trouver est la classe que j'essaie de tester/exécuter. Le basicTest.scala ressemble à ceci:

// 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
    }
  }

}

Toute aide quant à la raison pour laquelle je reçois cette erreur serait grandement appréciée.

23
MCP

Exécutez la construction du projet - Cela m'a aidé à résoudre ce problème qui aurait pu m'arriver lorsque j'ai effacé le cache IDEA :) tout en essayant de résoudre un autre problème

8
AlexPes

Voici comment j'ai résolu la même exception:

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

enter image description here

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

Vous devez configurer le Scala SDK. 1.) Habituellement, intelliJ vous demandera en affichant un message dans le coin droit de votre éditeur 2.) Vous pouvez le faire vous-même comme mentionné sur le https://www.jetbrains.com/help/idea/discover-intellij-idea-for-scala.html

4
AMS

J'ai rencontré ce problème lorsque j'ai utilisé Gatling

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

Je le corrige en remplaçant gatling-classes à test-classes dans Fichier -> Structure du projet -> Modules -> Nom du module -> Chemins -> Chemin de sortie de test

4
Alex Elkin

Dans mon cas, il me manquait la facette Scala dans mon module.

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

Je me suis débarrassé de l'erreur une fois que j'ai correctement configuré le module.

3
fglez

Si vous utilisez IntelliJ pour exécuter scalatest, assurez-vous que les chemins de classe sont corrects. Par exemple:

 /dummyApp 

votre build.sbt devrait ressembler, name := "dummyApp". Si vous l'appelez name := "dummy App" vous obtiendrez des erreurs.

2
Ray Goodwin

Ce problème m'est arrivé récemment lorsque j'essayais d'exécuter des tests dans un projet hérité Scala utilisant IntelliJ IDEA 2018 ( Community Edition) . Les étapes ci-dessous m'ont aidé à le corriger:

  1. Fichier → Structure du projet → {Choisir un module spécifique} → Onglet "Chemins" → Sélectionner "Utiliser le chemin de sortie de compilation du module" → Modifier " Tester le chemin de sortie " pour pointez sur le dossier test-classes . Par exemple:

    Chemin de sortie: /home/rustam/IdeaProjects/{project}/{module}/target/scala-2.12/classes
    Tester le chemin de sortie: /home/rustam/IdeaProjects/{project}/{module}/target/scala-2.12/test-classes

  2. IntelliJ n'aime pas les multiples classes Scala définies dans un fichier, alors assurez-vous que la classe de test est nommée de la même manière que le fichier de test et imbriquez d'autres classes d'assistance, que vous pouvez refactoriser plus tard si nécessaire.
2
Rustam Aliyev

Dans mon cas, j'avais en Preferences -> Build, Execution, Deployment -> sbt

Use sbt Shell for build and import case à cocher activée

Et le test n'était pas dans le répertoire attendu src/test mais en src/it (test intégré).

0
m3th0dman

Mon projet avait déjà la configuration mentionnée par @Rustam Aliyev. Obtenait toujours la même exception. La reconstruction du projet n'a pas aidé non plus. Assez bizarre; mais le redémarrage du IDE a aidé à résoudre le problème

0
Raj

J'ai rencontré l'erreur lorsque la classe de test ne faisait partie d'aucun package.

0
Blitzkr1eg