ClassNotFoundException in sbt for a scalacheck test object

43 Views Asked by At

I am trying to integrate scalacheck testing into my project, but get a ClassNotFoundException for the test class:

[info] set current project to MiniatureGiantSpaceHamster (in build file:/home/turin/porn/hamster/)
[info] compiling 1 Scala source to /home/turin/porn/hamster/target/scala-2.13/test-classes ...
[error] java.lang.ClassNotFoundException: HamsterTest
[error]     at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
[error]     at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
[error]     at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
[error]     at java.base/java.lang.Class.forName0(Native Method)
[error]     at java.base/java.lang.Class.forName(Class.java:390)
[error]     at java.base/java.lang.Class.forName(Class.java:381)
[error]     at $9f7a0fbfb4ca874acaca$.$anonfun$$sbtdef$2(/home/turin/porn/hamster/build.sbt:15)
[error]     at $9f7a0fbfb4ca874acaca$.$anonfun$$sbtdef$2$adapted(/home/turin/porn/hamster/build.sbt:15)
[error]     at sbt.Tests$.$anonfun$processOptions$4(Tests.scala:288)
[error]     at sbt.Tests$.$anonfun$processOptions$4$adapted(Tests.scala:288
[error]     at scala.collection.LinearSeqOptimized.forall(LinearSeqOptimized.scala:85)
[error]     at scala.collection.LinearSeqOptimized.forall$(LinearSeqOptimized.scala:82)
[error]     at scala.collection.immutable.List.forall(List.scala:91)
[error]     at scala.collection.generic.TraversableForwarder.forall(TraversableForwarder.scala:43)
[error]     at scala.collection.generic.TraversableForwarder.forall$(TraversableForwarder.scala:43)
[error]     at scala.collection.mutable.ListBuffer.forall(ListBuffer.scala:47)
[error]     at sbt.Tests$.includeTest$1(Tests.scala:288)
[error]     at sbt.Tests$.$anonfun$processOptions$5(Tests.scala:289)
[error]     at sbt.Tests$.$anonfun$processOptions$5$adapted(Tests.scala:289
[error]     at scala.collection.TraversableLike.$anonfun$filterImpl$1(TraversableLike.scala:304)
[error]     at scala.collection.Iterator.foreach(Iterator.scala:943)
[error]     at scala.collection.Iterator.foreach$(Iterator.scala:943)
[error]     at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
[error]     at scala.collection.IterableLike.foreach(IterableLike.scala:74)
[error]     at scala.collection.IterableLike.foreach$(IterableLike.scala:73
[error]     at scala.collection.AbstractIterable.foreach(Iterable.scala:56)
[error]     at scala.collection.TraversableLike.filterImpl(TraversableLike.scala:303)
[error]     at scala.collection.TraversableLike.filterImpl$(TraversableLike.scala:297)
[error]     at scala.collection.AbstractTraversable.filterImpl(Traversable.scala:108)
[error]     at scala.collection.TraversableLike.filter(TraversableLike.scala:395)
[error]     at scala.collection.TraversableLike.filter$(TraversableLike.scala:395)
[error]     at scala.collection.AbstractTraversable.filter(Traversable.scala:108)
[error]     at sbt.Tests$.processOptions(Tests.scala:289)
[error]     at sbt.Defaults$.$anonfun$allTestGroupsTask$1(Defaults.scala:1529)
[error]     at scala.collection.immutable.List.map(List.scala:293)
[error]     at sbt.Defaults$.allTestGroupsTask(Defaults.scala:1528)
[error]     at sbt.Defaults$.$anonfun$testTasks$10(Defaults.scala:1253)
[error]     at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error]     at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error]     at sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error]     at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error]     at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error]     at sbt.Execute.work(Execute.scala:291)
[error]     at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error]     at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error]     at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[error]     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[error]     at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577)
[error]     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[error]     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
[error]     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
[error]     at java.base/java.lang.Thread.run(Thread.java:1589)
[error] (Test / executeTests) java.lang.ClassNotFoundException: HamsterTest

I see that the exception mentions "HamsterTest" class, not "HamsterTest$", and my test is defined as an object:

[src/test/scala/HamsterTest.scala]

import org.scalacheck.{Prop, Properties}

object HamsterTest extends Properties("Hamster") {
  property("tautology") = Prop.passed
}

Is it a bug in the scalacheck plugin? Can you recommend a workaround? I know how to edit test source file list, but have no idea how to change what seems to be a "HamsterTest.scala" -> "HamsterTest.class" association to "HamsterTest$.class". I'd like to still use an object, rather than a class, because it can be easily run from IntelliJ.

My build.sbt:

organization := "united.hamsters"

name := "MiniatureGiantSpaceHamster"

version := "boo"

scalaVersion := "2.13.11"


Compile / fork := true

Compile / javaOptions ++= Seq("-Xmx4G")

Test / testOptions ++= Seq(Tests.Filter {
        s => !(Class.forName(s).isInterface || java.lang.reflect.Modifier.isAbstract(Class.forName(s).getModifiers))
})



libraryDependencies ++= Seq( //todo: make shapeless optional
        "org.scala-lang" % "scala-compiler" % scalaVersion.value,
        "org.scala-lang" % "scala-library" % scalaVersion.value,
        "org.scala-lang" % "scala-reflect" % scalaVersion.value,
        "org.scalacheck" %% "scalacheck" % "1.17.0" % "test"
)


scalacOptions ++= Seq(
        "-Vimplicits",
        "-Xlog-reflective-calls",
        "-Xlint:delayedinit-select,implicit-not-found,option-implicit,poly-implicit-overload,nullary-unit",
        "-Wconf:cat=deprecation&msg=foldLeft:silent,cat=deprecation&msg=foldRight:silent,cat=deprecation:w,cat=feature:w",
        "-Wunused:patvars,privates,locals",
        "-feature",
        "-language:implicitConversions",
        "-language:higherKinds",
        "-language:reflectiveCalls",
        "-language:existentials"
)

0

There are 0 best solutions below