2016-04-25 67 views
2

我使用Guice在角色中注入组件,因为它在Play! Scala 2.5 documentation中有解释。
在我的申请,我注入unshortLinksFactory: UnshortLinks.Factory在我的课,我创建这样一个新的演员:
val unshortLinksActor = actorSystem.actorOf(Props(unshortLinksFactory(ws)))如何使用Guice在Play中注入的组件测试角色! scala 2.5

的问题是,我不能在我的测试类注射组件(可以吗?)否则测试不开始。 (请注意,我使用Scalatest。)

如何在我的测试中创建演员? (这很好,如果我能像喜欢val unshortLinksActor = system.actorOf(Props(unshortLinksFactory(ws)))创建它,但最好将能够与TestActorRefAkka.testKit为了有机会获得underlyingActor创建

+0

你有没有找到解决这个问题的方法?我一直在努力解决同样的问题? – user1308752

回答

0

我为了测试它做的是:

TestKit(ActorSystem("testSystem"))扩展测试类

然后,我创建了Props这样的:

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

这里dbConfProvider为Cr eated这样的,但也可以嘲笑:

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

最后,我可以有一个这样的actorRef:

val actorRef = TestActorRef[UnshortLinksActor](unshortLinksFactoryProps) 

而且我可以actorRef.underlyingActor访问我的演员里面的方法。

+0

我想你误解了这个问题。还有另一个actor注入unshortLinksFactory'类LinksProcessor @Inject()(us:UnshortLinks.Factory)扩展了Actor'。目标是当演员在内部使用工厂时,它使用akkaTest套件中的TestProbe。 – user1308752

+0

我很好的理解了这个问题,因为它是我问的问题:)。不确定要理解你的评论。让我知道你不明白 – Simon

+0

我一直在努力的问题,并认为第一个问题是问如何获得访问权限或注入作为工厂注入的模拟演员。在这个例子中,你正在创建一个具有预先实例化的依赖关系的actor。这就是我想要做的:''class GlobalLinks @Inject()(us:UnshortLinks.Factory)extends Actor {context.actorOf(Props(us())!“stuff”}'然后在测试中能够做一些事情像'inject.bind [UnshortLinks.Factory] ​​.toInstance(TestProbe()。ref)'然后做'testProbe.expectMsg(“stuff”)' – user1308752