2016-04-25 5 views
2

私はGuiceを使用して、アクター内のコンポーネントを注入します(Play! Scala 2.5 documentationで説明されています)。私のアプリケーションで
は、私は私のクラスでunshortLinksFactory: UnshortLinks.Factoryを注入し、私はこのような新しい俳優を作成します(?私はできる)
val unshortLinksActor = actorSystem.actorOf(Props(unshortLinksFactory(ws)))PlayでGuiceによってコンポーネントが注入されたアクタをテストする方法scala 2.5

問題は、私は私のテストクラスのコンポーネントを注入することができないということであるそうでない場合、テストではありません開始しました。 (スカラテストを使用していますのでご注意ください)

テストでアクターを作成するにはどうすればよいですか? 。私はval unshortLinksActor = system.actorOf(Props(unshortLinksFactory(ws)))などのようにそれを作成することができますが、最高のunderlyingActorへのアクセス権を持っているために、Akka.testKitからTestActorRefでそれを作成することができることであろうあれば(それは結構です

+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

私はあなたがその質問を誤解していると思います。 unshortLinksFactoryクラスのLinkProcessor @Inject()(us:UnshortLinks.Factory)がActor'を継承する別のアクターがあります。目標は、そのアクタがakkaTestキットのTestProbeを使用して工場を内部的に使用するときです。 – user1308752

+0

私は質問してくれたので、私はよく質問を理解しました:)。もう一方のあなたのコメントを理解することはできません。私があなたが理解していないことを教えてください – Simon

+0

私は苦労して、最初の質問は工場に注入された模擬俳優にアクセスする方法や注射する方法を尋ねていたと思っていました。この例では、事前にインスタンス化された依存関係を持つアクターを作成しています。これは私がやりたいことです: 'class GlobalLinks @Inject()(私たち:UnshortLinks.Factory)はActor {context.actorOf(Props(us))!" stuff "}'を拡張します。 'injector.bind [UnshortLinks.Factory] ​​.toInstance(TestProbe()。ref)'のように 'testProbe.expectMsg(" stuff ")'を実行すると、 – user1308752

関連する問題