Question

We are currently using SBT and Play to do a project.

We would like to spin upthe database and play only ONCE to lower the testing times.

SBT offers Tests.Setup and Tests.Cleanup to do this; http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Testing.html

I've defined the following object in test/util/TestServer.scala

object TestServer {
  def start = println("hello")
}

To let this print I hook it up in the SBT config:

play.Project(name = appName, applicationVersion = appVersion, dependencies = appDependencies)
    .settings(
      // snip .. wiring resolvers and template/routes imports here
      testOptions in Test += Tests.Argument("junitxml", "console"),
      testOptions in Test += Tests.Setup(_.loadClass("util.TestServer$").getMethod("start").invoke(null)),
      testOptions in Test += Tests.Cleanup(_.loadClass("util.TestServer$").getMethod("stop").invoke(null)),
      scalacOptions += "-feature",
      doc in Compile 

However when I run this, it complains about not finding the the TestServer class:

$ sh play.sh test
[info] Loading project definition from /Users/markdejong/Projects/malmberg-baps/project
[info] Set current project to Malmberg (in build file:/Users/markdejong/Projects/malmberg-baps/)
[info] Updating {file:/Users/markdejong/Projects/malmberg-baps/}core...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Updating {file:/Users/markdejong/Projects/malmberg-baps/}macros...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Passed: Total 0, Failed 0, Errors 0, Passed 0
[info] No tests to run for core/test:test
[info] Done updating.
[info] Updating {file:/Users/markdejong/Projects/malmberg-baps/}Malmberg...
[info] Resolving org.apache.httpcomponents#httpclient;4.2 ...
[info] Passed: Total 0, Failed 0, Errors 0, Passed 0
[info] No tests to run for macros/test:test
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
java.lang.ClassNotFoundException: util.TestServer$
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at ApplicationBuild$$anonfun$6$$anonfun$apply$10.apply(Build.scala:89)
    at ApplicationBuild$$anonfun$6$$anonfun$apply$10.apply(Build.scala:89)
    at sbt.ForkTests$$anonfun$sbt$ForkTests$$all$1$1.apply(ForkTests.scala:20)
    at sbt.ForkTests$$anonfun$sbt$ForkTests$$all$1$1.apply(ForkTests.scala:20)
    at sbt.std.TaskExtra$$anon$1$$anonfun$fork$1$$anonfun$apply$1.apply(TaskExtra.scala:99)
    at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:45)
    at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:45)
    at sbt.std.Transform$$anon$4.work(System.scala:64)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
    at sbt.Execute.work(Execute.scala:244)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
[error] (Malmberg/test:executeTests) java.lang.ClassNotFoundException: util.TestServer$
[error] Total time: 11 s, completed Apr 23, 2014 7:11:07 PM

What is the problem here?

I've also tried util.TestServer and util.TestServer$class, but gives the same error.

Using sbt version 0.13.0 and Play 2.2.2

Was it helpful?

Solution

Thanks to Kenji Yoshida I found the problem.

It was indeed the "fork" mode introduced by the Play Framework. You have to set it to false in order to make it work with these versions.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top