Scala Play Framework – 运行涉及Akka的测试时,“在定时器关闭
发布时间:2020-12-16 08:44:36 所属栏目:安全 来源:网络整理
导读:当我试图对运行Akka调度程序的代码(使用Mockito)进行单元测试时,我不断得到“在定时器关闭后无法入队”. 我的代码: Global.scala override def onStart(app: Application){ Some(Akka.system.scheduler.schedule(23.hours,24.hours) { println("I run all t
当我试图对运行Akka调度程序的代码(使用Mockito)进行单元测试时,我不断得到“在定时器关闭后无法入队”.
我的代码: Global.scala override def onStart(app: Application){ Some(Akka.system.scheduler.schedule(23.hours,24.hours) { println("I run all the time") }) } TasksRepositorySpec.scala def insertTestData() = { running(FakeApplication()) { //some code } } 当我跑: activator test 我明白了: [info] TasksRepositorySpec [info] [error] ! [error] cannot enqueue after timer shutdown (Scheduler.scala:270) [error] akka.actor.LightArrayRevolverScheduler.schedule(Scheduler.scala:270) [error] akka.actor.Scheduler$class.schedule(Scheduler.scala:79) [error] akka.actor.LightArrayRevolverScheduler.schedule(Scheduler.scala:182) [error] Global$.onStart(Global.scala:56) [error] play.api.GlobalPlugin.onStart(GlobalSettings.scala:272) [error] play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91) [error] play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91) [error] play.api.Plugins.foreach(Plugins.scala:57) [error] play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:91) [error] play.api.Play$$anonfun$start$1.apply(Play.scala:91) [error] play.api.Play$$anonfun$start$1.apply(Play.scala:91) [error] play.utils.Threads$.withContextClassLoader(Threads.scala:21) [error] play.api.Play$.start(Play.scala:90) [error] play.api.test.PlayRunners$class.running(Helpers.scala:41) [error] play.api.test.Helpers$.running(Helpers.scala:363) [error] repositories.TasksRepositorySpec.insertData(TasksRepositorySpec.scala:69) [error] repositories.TasksRepositorySpec$$anonfun$2.apply$mcI$sp(TasksRepositorySpec.scala:88) [error] repositories.TasksRepositorySpec$$anonfun$2.apply(TasksRepositorySpec.scala:88) [error] repositories.TasksRepositorySpec$$anonfun$2.apply(TasksRepositorySpec.scala:88) 我用play 2.4 任何帮助将不胜感激 解决方法
抱歉,我没有找到解决方案,只是解决方法.它包括使用假的Global对象进行onStart()和onStop()方法为空的测试.
首先,您需要将Global对象拆分为特征和空对象: Global.scala object Global extends Global trait Global extends GlobalSettings { ... } 然后在您的测试代码中,您可以创建一个虚假的全局: Fake.scala object FakeGlobal extends Global { override def onStart(app: Application): Unit = {} override def onStop(app: Application): Unit = {} } object Fake { // This has to be a method,cannot be a value def application() = FakeApplication(withGlobal = Some(FakeGlobal)) } 最后在测试中使用它: TasksRepositorySpec.scala def insertTestData() = { running(Fake.application()) { //some code } } 这个对我有用.希望能帮助到你! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |