J'ai la classe suivante:
import scala.util.{Success, Failure, Try}
class MyClass {
def openFile(fileName: String): Try[String] = {
Failure( new Exception("some message"))
}
def main(args: Array[String]): Unit = {
openFile(args.head)
}
}
Qui a le test unitaire suivant:
class MyClassTest extends org.scalatest.FunSuite {
test("pass inexistent file name") {
val myClass = new MyClass()
assert(myClass.openFile("./noFile").failed.get.getMessage == "Invalid file name")
}
}
Quand j'exécute sbt test
j'obtiens l'erreur suivante:
Java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps;
at org.scalatest.tools.FriendlyParamsTranslator$.translateArguments(FriendlyParamsTranslator.scala:174)
at org.scalatest.tools.Framework.runner(Framework.scala:918)
at sbt.Defaults$$anonfun$createTestRunners$1.apply(Defaults.scala:533)
at sbt.Defaults$$anonfun$createTestRunners$1.apply(Defaults.scala:527)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.Map$Map1.foreach(Map.scala:109)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at sbt.Defaults$.createTestRunners(Defaults.scala:527)
at sbt.Defaults$.allTestGroupsTask(Defaults.scala:543)
at sbt.Defaults$$anonfun$testTasks$4.apply(Defaults.scala:410)
at sbt.Defaults$$anonfun$testTasks$4.apply(Defaults.scala:410)
at scala.Function8$$anonfun$tupled$1.apply(Function8.scala:35)
at scala.Function8$$anonfun$tupled$1.apply(Function8.scala:34)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
at sbt.std.Transform$$anon$4.work(System.scala:63)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
at sbt.Execute.work(Execute.scala:235)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
at Java.lang.Thread.run(Thread.Java:745)
[error] (test:executeTests) Java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps;
Construire des définitions:
version := "1.0"
scalaVersion := "2.12.0"
// https://mvnrepository.com/artifact/org.scalatest/scalatest_2.11
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "3.0.0"
Je ne peux pas comprendre ce qui cause ceci. Ma classe et mon test unitaire semblent assez simples. Des idées?
scalatest_2.11
est la version de ScalaTest compatible uniquement avec Scala 2.11.x. Écrivez libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test"
(note %%
) à la place pour choisir automatiquement la version correcte et passer à Scala 2.11.8 jusqu'à ce que scalatest_2.12
soit publié (cela devrait être très bientôt). Voir http://www.scala-sbt.org/0.13/docs/Cross-Build.html pour plus d'informations.
J'avais SDK dans les bibliothèques mondiales avec une version différente de Scala (IntelliJ IDEA).
Fichier -> Structure du projet -> Bibliothèques globales -> Supprimer le SDK -> Reconstruire. Cela a corrigé l'exception pour moi.
J'ai utilisé IntelliJ et je viens d'importer le projet à nouveau. Je veux dire, fermez le projet ouvert et importez-le en tant que Maven ou SBT . Remarque: je sélectionne le mvn (importer des projets Maven automatiquement) Il a disparu.
Essayez d’ajouter la ligne suivante à votre build.sbt
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
votre build.sbt devrait être comme ceci:
libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.1"
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
Avec cela, l'erreur pour moi est résolue.
dans Eclipse ide, le projet a tendance à être présélectionné avec la configuration «Latest 2.12 bundle (dynamic)» de l'installation scala. Si vous n'utilisez pas réellement la version 2.12 pour votre projet Scala et tentez de l'exécuter par le biais de l'EDI, ce problème se manifestera.
J'ai également remarqué que si je reconstruisais mon projet Eclipse avec la commande sbt: "Eclipse with-source", cela aurait pour effet secondaire de réinitialiser l'installation de la scala du projet Eclipse au paramètre 2.12 (même si mon fichier build.sbt est configuré pour une version 2.11 de Scala). Alors soyez à l'affût de ces deux scénarios.