如何使用 Guice in Play 注入的组件测试 actors!斯卡拉 2.5

How to test actors with components injected by Guice in Play! scala 2.5

我正在使用 Guice 在 actor 中注入组件,如 Play! Scala 2.5 documentation 中所述。
在我的应用程序中,我在我的 classes 中注入 unshortLinksFactory: UnshortLinks.Factory 并且我创建了一个像这样的新演员:

val unshortLinksActor = actorSystem.actorOf(Props(unshortLinksFactory(ws)))

问题是我不能在测试中注入组件class(可以吗?)否则测试不会启动。 (请注意,我使用的是 Scalatest。)

如何在我的测试中创建角色?如果我可以像这样创建它就好了:

val unshortLinksActor = system.actorOf(Props(unshortLinksFactory(ws)))

但最好是能够使用 Akka.testKit 中的 TestActorRef 创建它,以便访问 underlyingActor.

我为了测试它所做的是:

我用 TestKit(ActorSystem("testSystem")) 扩展了测试 class。

然后我这样创建 Props

  lazy val unshortLinkFactoryProps = Props(unshortLinkFactory(
    dbConfigProvider = dbConfProvider)

这里 dbConfProvider 是这样创建的,但也可以被模拟:

  lazy val appBuilder = new GuiceApplicationBuilder()
  lazy val injector = appBuilder.injector()
  lazy val dbConfProvider = injector.instanceOf[DatabaseConfigProvider]

我终于可以拥有这样的 actorRef 了:

val actorRef = TestActorRef[UnshortLinksActor](unshortLinksFactoryProps)

而且我可以使用 actorRef.underlyingActor.

访问我的 actor 中的方法