如何测试依赖注入创建的actor?在我的应用程序中,我可以通过命名注入获得ActorRef:
public MyClass {
@Inject
@Named("ping")
ActorRef mPingRef;
}
如何在我的测试中获得此参考?
这是我的演员:
public class PingActor extends UntypedActor {
@Inject
public PingActor(Configuration configuration) {
... // Use config
}
@Override
public void onReceive(Object message) throws Exception {
if (message instanceof Ping) {
getSender().tell(new Pong(), getSelf());
}
}
public static class Ping {}
public static class Pong {}
}
我已经使用自己的模块配置了我的应用程序:
public class MyModule extends AbstractModule implements AkkaGuiceSupport {
private final Configuration mConfig;
public MyModule(Environment environment, Configuration configuration){
this.mConfig = configuration;
}
@Override
protected void configure() {
bindActor(PingActor.class, "ping");
}
}
该模块在application.conf中启用:
play.modules.enabled += "com.my.package.MyModule"
2 回答
此解决方案适用于
PlayScala
,但它应与PlayJava
的机制相同:所以我得到了
GuiceModule
:然后测试(我从我的测试中删除了一些东西,所以它可能无法直接编译):
所以我做的是:
创造新鲜
ActorSystem
在Akka的
TestKit
中包装actorSystem
(libraryDependencies += "com.typesafe.akka" %% "akka-testkit" % "2.4.1"
)使用
GuiceApplicationBuilder
来应用覆盖然后直接使用
app.injector
来访问我的guice配置的actor当你在
MyModule.configure()
方法中查看bindActor
的实现时,很明显会发生什么:我正在写演员单元测试
然后你可以调用你的actor中的方法,就好像它是一个普通的java类 . 根据播放框架https://www.playframework.com/documentation/2.5.x/JavaFunctionalTest
这就是我在这里做的事情 . 你需要一个依赖
为此工作 . 希望这可以帮助 .