java.lang.NoSuchFieldException:使用play框架处理嵌入式MongoDB
我试图在测试中启用内存中的mongodb,我正在使用它来完成这项工作java.lang.NoSuchFieldException:使用play框架处理嵌入式MongoDB,mongodb,scala,testing,playframework,Mongodb,Scala,Testing,Playframework,我试图在测试中启用内存中的mongodb,我正在使用它来完成这项工作 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 m
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)
但我有一个错误:
[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)
[info]控制器规格:
java.lang.NoSuchFieldException:句柄
位于java.base/java.lang.Class.getDeclaredField(Class.java:2411)
位于de.flapdoodle.embed.process.runtime.processs.windowsProcessId(processs.java:109)
位于de.flapdoodle.embed.process.runtime.processs.access$200(processs.java:51)
位于de.flapdoodle.embed.process.runtime.processs$PidHelper$2.getPid(processs.java:209)
|=>rat de.flapdoodle.embed.process.runtime.processs.processId(processs.java:72)
位于de.flapdoodle.embed.process.runtime.ProcessControl.(ProcessControl.java:64)
位于de.flapdoodle.embed.process.runtime.ProcessControl.start(ProcessControl.java:205)
位于de.flapdoodle.embed.process.runtime.AbstractProcess.(AbstractProcess.java:98)
位于de.flapdoodle.embed.mongo.AbstractMongoProcess。(AbstractMongoProcess.java:53)
位于de.flapdoodle.embed.mongo.MongodProcess.(MongodProcess.java:50)
位于de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:44)
位于de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:34)
位于de.flapdoodle.embed.process.runtime.Executable.start(Executable.java:101)
位于com.github.simplyscala.MongoEmbedDatabase.mongoStart(MongoEmbedDatabase.scala:26)
位于com.github.simplyscala.MongoEmbedDatabase.mongostat$(MongoEmbedDatabase.scala:22)
at控制器规范ssmServiceSpec.ssmControllerSpec.mongoStart(ssmControllerSpec.scala:22)
在之前的controllersSpec.ssmServiceSpec.SSMControllersSpec.处(SSMControllersSpec.scala:32)
在org.scalatest.BeforeAndAfterAll.liftedTree1$1(BeforeAndAfterAll.scala:212)
在org.scalatest.BeforeAndAfterAll.run(BeforeAndAfterAll.scala:210)上
在org.scalatest.BeforeAndAfterAll.run$(BeforeAndAfterAll.scala:208)
在controllerspec.ssmServiceSpec.ssmControllerSpec.run(ssmControllerSpec.scala:22)
位于org.scalatest.tools.Framework.org$scalatest$tools$Framework$$runSuite(Framework.scala:317)
位于org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:510)
在sbt.ForkMain$Run.lambda$runTest$1(ForkMain.java:304)
位于java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
位于java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
位于java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
位于java.base/java.lang.Thread.run(Thread.java:834)
这和之前和之后有什么关系吗?如果我做错了什么,请告诉我,谢谢