有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
的自我类型提取到特征之外,还有其他方法吗?不确定它是否正确。