【发布时间】:2017-09-17 02:39:55
【问题描述】:
我的 Play for Scala 应用程序中有以下 @Singleton 在启动时加载:
@Singleton
class Scheduler @Inject()(@Named("mainEtl") mainEtl: ActorRef, system: ActorSystem) {
// some code
}
这是声明调度程序的模块。该模块在application.conf中启用:
class Module extends AbstractModule {
def configure() = {
bind(classOf[Scheduler]).asEagerSingleton
}
}
以及配置@Named注入对象的相关模块定义,也在application.conf中声明:
class AkkaBindings extends AbstractModule with AkkaGuiceSupport {
def configure = {
bindActor[MainEtl]("mainEtl")
}
}
当我运行任何 ScalaTest 测试时,显然单例开始运行,因为我收到一条错误消息,指出它找不到 MainEtl(注入到 Scheduler 类中的对象)。关键是我不需要为我的测试运行单例,所以我需要禁用它。
这就是我在测试中调用 Play 应用程序的方式:
class ManageBanksTest extends PlaySpec with OneAppPerSuite with MockitoSugar {
implicit override lazy val app = new GuiceApplicationBuilder().build
// more test code
}
这就是我尝试禁用它的方法,但它不起作用,因为我得到了同样的错误:
implicit override lazy val app = new GuiceApplicationBuilder()
.disable[Scheduler]
.build
或者,我可以模拟 Scheduler,但我还必须模拟 @Named 注入的对象,我找不到有关如何实现它的信息。
有什么想法吗?
【问题讨论】:
-
能分享一下你写到现在的测试课吗?
-
添加了测试类,注意@Singleton在测试中没有被调用,Play在后台运行。
标签: scala playframework playframework-2.0 scalatest