加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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
  }
}

这个对我有用.希望能帮助到你!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读