gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:49:53 25 4
gpt4 key购买 nike

我正在使用 Guice 在 actor 中注入(inject)组件,如 Play! Scala 2.5 documentation 中所述。 .
在我的应用程序中,我在我的类中注入(inject)了 unshortLinksFactory: UnshortLinks.Factory 并创建了一个新的 actor,如下所示:

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

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

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

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

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

最佳答案

我为了测试它所做的是:

我用 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 访问我的 actor 中的方法。

关于scala - 如何使用 Guice in Play 注入(inject)的组件测试 actors!斯卡拉 2.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36834707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com