2016-04-25 5 views
2

Ich benutze Guice um Komponenten in einen Aktor zu injizieren, wie es in der Play! Scala 2.5 documentation erklärt wird.
In meiner Anwendung, ich spritze unshortLinksFactory: UnshortLinks.Factory in meinen Klassen und ich erstellen Sie einen neuen Schauspieler wie folgt aus:
val unshortLinksActor = actorSystem.actorOf(Props(unshortLinksFactory(ws)))Wie man Schauspieler mit von Guice in Play injizierten Komponenten testet! scala 2.5

Das Problem ist, dass ich keine Komponenten in meinem Test-Klasse injizieren kann (ich kann?) Sonst der Test nicht gestartet. (Bitte beachten Sie, dass ich Scalatest verwende.)

Wie kann ich den Akteur in meinen Tests erstellen? . (Es ist in Ordnung, wenn ich es so wie val unshortLinksActor = system.actorOf(Props(unshortLinksFactory(ws))) schaffen können, aber das Beste wäre in der Lage sein, um es von Akka.testKit um mit TestActorRef zu schaffen Zugang zum underlyingActor haben

+0

Haben Sie jemals eine Lösung gefunden? Ich habe mit dem gleichen Problem gekämpft? – user1308752

Antwort

0

Was ich tun, um es zu testen ist:

I erweitert die Testklasse mit TestKit(ActorSystem("testSystem"))

Dann erstelle ich die Props wie folgt aus:.

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

Hier dbConfProvider ist cr eated wie diese, sondern auch verspottet werden könnte:

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

Schließlich ich eine actorRef wie diese haben:

val actorRef = TestActorRef[UnshortLinksActor](unshortLinksFactoryProps) 

Und ich kann die Methoden in meinem Schauspieler Zugriff mit actorRef.underlyingActor.

+0

Ich denke, du hast die Frage falsch verstanden. Es gibt einen anderen Akteur, der die unshortLinksFactory-Klasse injiziert. LinksProcessor @Inject() (us: UnshortLinks.Factory) erweitert Actor'. Das Ziel ist, wenn der Schauspieler die Fabrik intern nutzt, benutzt er eine TestProbe aus dem akkaTest-Kit. – user1308752

+0

Ich habe die Frage gut verstanden, da ich es bin, die es gefragt hat :). Nicht sicher, deinen Kommentar auf der anderen Seite zu verstehen. Lass mich wissen, was du nicht verstehst – Simon

+0

Das Problem, mit dem ich zu kämpfen hatte und dachte, die erste Frage war, wie man Zugang bekommt oder einen Mock-Schauspieler injiziert, der als Fabrik eingespritzt wird. In diesem Beispiel erstellen Sie einen Akteur mit Abhängigkeiten, die vorinstanziert sind. Das ist, was ich tun möchte: 'Klasse GlobalLinks @Inject() (uns: UnshortLinks.Factory) erweitert Actor {context.actorOf (Props (us())!" Stuff "}' Dann im Test in der Lage sein, etwas zu tun wie 'injector.bind [UnshortLinks.Factory] .toInstance (TestProbe(). ref)' dann teste 'testProbe.expectMsg (" stuff ")' – user1308752

Verwandte Themen