测试Akka actor的preStart功能

时间:2015-01-12 21:10:26

标签: scala testing akka actor

preStart创建儿童演员的父演员,每个人都有一个"活跃"用户。现在我想编写一个测试声明它确实发生了,我的意思是真正为预配置用户创建了儿童演员。

class IntegrationActor(settingsDao: UserSettingsDAO, childMaker: ActorRefFactory => UserId => ActorRef) extends Actor with StrictLogging {

  val createUserActor = childMaker(context)

  override def preStart(): Unit = {
    val e = settingsDao.findAllEnabled()
    e.map(_.userId).foreach(createUserActor)
  }

  // ... 
}

我有这样的测试,但是它并不起作用,因为一切都发生在主要测试线程之外

// mockMaker is already defined/mocked

it should "create child actors for users with enabled integration when started" in {
  // given
  val us = UserSettings(...)
  Mockito.when(settingsDao.findAllEnabled()).thenReturn(Set(us))

  // when
  system.actorOf(Props(new IntegrationActor(settingsDao, mockMaker)))

  // then
  verifyMockMakerCalledFor(us)
}

我试图将CallingThreadDispatcher分配给父演员,但没有运气。

从理论上讲,我可以new这个课程并像往常一样进行测试,但Actor不能new - 手动编辑。

除了将自我类型为Actor的自我类型提取到特征之外,还有其他方法吗?不确定它是否正确。

0 个答案:

没有答案