如何使用 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 中的方法
我正在使用 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
.