如何使用Guice在Play中注入的组件测试actor!斯卡拉2.5

时间:2016-04-25 07:46:55

标签: scala akka guice actor playframework-2.5

我正在使用Guice在演员中注入组件,如Play! Scala 2.5 documentation中所述。
在我的应用程序中,我在我的类中注入了unshortLinksFactory: UnshortLinks.Factory,我创建了一个像这样的新演员:
val unshortLinksActor = actorSystem.actorOf(Props(unshortLinksFactory(ws)))

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

如何在测试中创建actor? (如果我可以像val unshortLinksActor = system.actorOf(Props(unshortLinksFactory(ws)))那样创建它,那就没问题了,但最好能够使用TestActorRef中的Akka.testKit创建它,以便能够访问underlyingActor {1}}。

1 个答案:

答案 0 :(得分:0)

我为了测试而做的是:

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

然后我像这样创建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访问我的演员内部的方法。