我有一个使用自定义Akka Actor的网络应用。
我使用@Named注释注入演员,像这样:
@Singleton
class Thing @Inject()(@Named("scheduler-actor") schedulerActor: ActorRef) ...
我想将此演员注入到我的测试中,以便可以向其发送消息,但是我不确定该怎么做。
我正在使用Injecting
特性,这使我可以使用inject
函数,但是似乎没有任何替代的inject
函数可以让我传递名称。
在互联网上是否有任何将演员注入Play的例子!测试?
更新1
经过一番研究后,我想出了这个解决方案,但是感觉有点棘手。
首先,我安装了Akka TestKit。
libraryDependencies += "com.typesafe.akka" %% "akka-testkit" % "2.5.22" % Test
然后我像这样使用TestActorRef
:
import actors.SchedulerActor.RefreshDevicesFromCCU
import akka.actor.{ActorRef, ActorSystem}
import akka.testkit.TestActorRef
import org.scalatest.BeforeAndAfterAll
import org.scalatestplus.play.PlaySpec
import utils.DatabaseSetupTearDown
class SchedulerActorSpec
extends PlaySpec
with GuiceOneAppPerSuite
with Injecting {
implicit val system: ActorSystem = inject[ActorSystem]
val schedulerActor: SchedulerActor = inject[SchedulerActor]
val schedulerActorRef: ActorRef = TestActorRef(schedulerActor)
...
}