问题描述
我正在使用Akka类型的AkkaTestFramework,但找不到为我的一个类型的Actor创建ActorSystem模拟的方法。
我是这样找到的
val pinger: ActorRefTyped[ItAssetRequest] = testKit.spawn(ItAsset(),"itAssetMock")
但是这个ActorRefTyped
不包含schedule
,我在班级内部需要使用ask pattern
在我收到该ActorSystem的班上
class RegisterConsumerStream(itAsset: ActorSystemTyped[ItAssetRequest]){
implicit val schedule: typed.Scheduler = itAsset.scheduler
itAsset ? (ref => ItAssetRequest(connectorState,ref)
}
如果我通过ActorRefTyped[ItAssetRequest]
,则没有时间表,因此我无法使用Ask模式,因为它需要隐式的时间表。
有什么主意吗?
解决方法
您正在使用testKit.spawn方法而非ActorSystem创建Actor。使用Akka TestKit,您已经可以在测试中使用ActorSystem:
class AgentSpec extends ScalaTestWithActorTestKit {
val testKitScheduler : Scheduler = system.scheduler
}
使用testKit中的spawn方法,您可以创建角色来测试您的行为,而不是角色系统。
class RegisterConsumerStream(as: ActorSystem[Nothing]){
import akka.actor.typed.scaladsl.AskPattern._
implicit val scheduler = as.scheduler
val ref: ActorRef[ItAssetRequest] = ???
ref.ask(ref => ItAssetRequest())
}