玩! Scala:如何在测试时禁用在应用程序启动时加载的 actor 模块?
Play! Scala: How to disable actor modules loaded at the start of the application when testing?
我在播放开始时加载了一些演员! 2.5 像这样的应用程序:
class Module extends AbstractModule with AkkaGuiceSupport with ScalaModule {
override def configure() = {
bindActor[MainSupervisor]("main-supervisor")
}
}
问题是,当我 运行 我的测试时,我从加载的 actor(以及整个集群和远程系统)得到了很多日志(和不必要的调用),比如
[INFO ] a.r.Remoting: Starting remoting
[INFO ] a.r.Remoting: Remoting started; listening on addresses :[akka.tcp://application@127.0.0.1:41496]
[INFO ] a.r.Remoting: Remoting now listens on addresses: [akka.tcp://application@127.0.0.1:41496]
例如,我有一个 class,我在不需要任何 actor 的地方进行测试,但我找不到任何方法来禁用它们(或者甚至更好的整个 actor 系统)。
我试过的是:
lazy val appWithoutActorsBuilder = new GuiceApplicationBuilder()
.disable[ActorSystem]
.disable[MainSupervisor]
.build()
lazy val injectorWithoutActors = appWithoutActorsBuilder.injector
lazy val wSClientWithoutActors = injectorWithoutActors.instanceOf[WSClient]
lazy val ec = scala.concurrent.ExecutionContext.Implicits.global
lazy val facebookAPI = new FacebookAPI(wSClientWithoutActors, ec)
但是当我测试 FacebookAPI 方法(例如 facebookAPI.method(...) mustBe ...
)时,我仍然看到来自 Akka 的日志。我该怎么做才能避免它?
您必须禁用您的模块而不是您的演员。所以,考虑到你有这个 class:
package com.acme.modules
class Module extends AbstractModule with AkkaGuiceSupport with ScalaModule {
override def configure() = {
bindActor[MainSupervisor]("main-supervisor")
}
}
并且您正在 conf/application.conf
注册它,如下所示:
play.modules.enabled += "com.acme.modules.Module"
然后,在您的测试中,您必须执行以下操作:
lazy val appWithoutActorsBuilder = new GuiceApplicationBuilder()
.disable[com.acme.modules.Module]
.build()
我在播放开始时加载了一些演员! 2.5 像这样的应用程序:
class Module extends AbstractModule with AkkaGuiceSupport with ScalaModule {
override def configure() = {
bindActor[MainSupervisor]("main-supervisor")
}
}
问题是,当我 运行 我的测试时,我从加载的 actor(以及整个集群和远程系统)得到了很多日志(和不必要的调用),比如
[INFO ] a.r.Remoting: Starting remoting
[INFO ] a.r.Remoting: Remoting started; listening on addresses :[akka.tcp://application@127.0.0.1:41496]
[INFO ] a.r.Remoting: Remoting now listens on addresses: [akka.tcp://application@127.0.0.1:41496]
例如,我有一个 class,我在不需要任何 actor 的地方进行测试,但我找不到任何方法来禁用它们(或者甚至更好的整个 actor 系统)。
我试过的是:
lazy val appWithoutActorsBuilder = new GuiceApplicationBuilder()
.disable[ActorSystem]
.disable[MainSupervisor]
.build()
lazy val injectorWithoutActors = appWithoutActorsBuilder.injector
lazy val wSClientWithoutActors = injectorWithoutActors.instanceOf[WSClient]
lazy val ec = scala.concurrent.ExecutionContext.Implicits.global
lazy val facebookAPI = new FacebookAPI(wSClientWithoutActors, ec)
但是当我测试 FacebookAPI 方法(例如 facebookAPI.method(...) mustBe ...
)时,我仍然看到来自 Akka 的日志。我该怎么做才能避免它?
您必须禁用您的模块而不是您的演员。所以,考虑到你有这个 class:
package com.acme.modules
class Module extends AbstractModule with AkkaGuiceSupport with ScalaModule {
override def configure() = {
bindActor[MainSupervisor]("main-supervisor")
}
}
并且您正在 conf/application.conf
注册它,如下所示:
play.modules.enabled += "com.acme.modules.Module"
然后,在您的测试中,您必须执行以下操作:
lazy val appWithoutActorsBuilder = new GuiceApplicationBuilder()
.disable[com.acme.modules.Module]
.build()