3

I'm trying to enable in-memory mongodb in testing, I am using simplyscala to do the work.

class controllerSpec extends PlaySpec with GuiceOneAppPerTest with Injecting with BeforeAndAfterAll with MongoEmbedDatabase{

  //declares a variable which will hold the reference to running mongoDB Instance
  var mongoInstance: MongodProps = null
  // Start In-memory Mongo instance in before statement
  override def beforeAll(): Unit =
    try{
      val rnd = new scala.util.Random
      val range = 12000 to 36000
      val portNum = range(rnd.nextInt(range length))
      mongoInstance = mongoStart(portNum) } //Try starting mongo on random port number
    catch { case ex:Exception => } // Handle exception In case local mongo is running//code to run before all tests starts
  override def afterAll(): Unit = mongoStop(mongoInstance)

However I have error :

[info] controllerSpec:
java.lang.NoSuchFieldException: handle
        at java.base/java.lang.Class.getDeclaredField(Class.java:2411)
        at de.flapdoodle.embed.process.runtime.Processes.windowsProcessId(Processes.java:109)
        at de.flapdoodle.embed.process.runtime.Processes.access$200(Processes.java:51)
        at de.flapdoodle.embed.process.runtime.Processes$PidHelper$2.getPid(Processes.java:209)
  | => rat de.flapdoodle.embed.process.runtime.Processes.processId(Processes.java:72)
        at de.flapdoodle.embed.process.runtime.ProcessControl.<init>(ProcessControl.java:64)
        at de.flapdoodle.embed.process.runtime.ProcessControl.start(ProcessControl.java:205)
        at de.flapdoodle.embed.process.runtime.AbstractProcess.<init>(AbstractProcess.java:98)
        at de.flapdoodle.embed.mongo.AbstractMongoProcess.<init>(AbstractMongoProcess.java:53)
        at de.flapdoodle.embed.mongo.MongodProcess.<init>(MongodProcess.java:50)
        at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:44)
        at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:34)
        at de.flapdoodle.embed.process.runtime.Executable.start(Executable.java:101)
        at com.github.simplyscala.MongoEmbedDatabase.mongoStart(MongoEmbedDatabase.scala:26)
        at com.github.simplyscala.MongoEmbedDatabase.mongoStart$(MongoEmbedDatabase.scala:22)
        at controllersSpec.ssmServiceSpec.ssmControllerSpec.mongoStart(ssmControllerSpec.scala:22)
        at controllersSpec.ssmServiceSpec.ssmControllerSpec.beforeAll(ssmControllerSpec.scala:32)
        at org.scalatest.BeforeAndAfterAll.liftedTree1$1(BeforeAndAfterAll.scala:212)
        at org.scalatest.BeforeAndAfterAll.run(BeforeAndAfterAll.scala:210)
        at org.scalatest.BeforeAndAfterAll.run$(BeforeAndAfterAll.scala:208)
        at controllersSpec.ssmServiceSpec.ssmControllerSpec.run(ssmControllerSpec.scala:22)
        at org.scalatest.tools.Framework.org$scalatest$tools$Framework$$runSuite(Framework.scala:317)
        at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:510)
        at sbt.ForkMain$Run.lambda$runTest$1(ForkMain.java:304)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)

Does it have something to do with the BeforeAndAfterAll? Please tell me if I did anything wrong thank you.

1

1 Answer 1

1

Upgrade the version of the Embedded MongoDB dependency test driver to 3.4.3

Gradle:

testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo:3.4.3'

pom.xml

<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <version>3.4.3</version> <!-- make this version a property instead-->
    <scope>test</scope>
</dependency>
Sign up to request clarification or add additional context in comments.

1 Comment

thanks for this... after one full day i found this as the solution for the error :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.