注入亮度数据库服务的Play应用程序



这与我试图将GUICE引入的应用程序有关2.3 应用程序。我有以下遗留代码可以进行guicify,我达到了这一点

class DatabaseService {
  def db: Database = DB(play.api.Play.current)
  //More code below.
}

com.testa表示,该课程注入了正在测试的类中。当我使用修改的OneAppPerTest设置运行测试用例时,我会看到以下类型的ProvisionExceptions。

Error injecting constructor, java.lang.RuntimeException: There is no started application

是因为使用play.api.Play.current吗?我该如何解决此问题?

附加信息覆盖的oneappertest变体,使用以下逻辑

override def newAppForTest(testData: TestData): FakeApplication = {
    new FakeApplication(
      additionalConfiguration = additionalConfiguration,
      withGlobal = Some(globalSettings)
    )
}

可以通过实际测试覆盖additionalConfiguration,而globalSettings是框架中引入GUICE的地方

  protected def globalSettings = {
    new TestGlobalSettings {
      val injector = Guice.createInjector(overriddenModules: _*)
      override def getControllerInstance[A](controllerClass: Class[A]): A = {
        injector.getInstance(controllerClass)
      }
      override def getInjector = {
        injector
      }
    }
  }

还有其他具有类似设置的测试用例可以很好地工作。我能够注入模拟,测试课程。但是,此数据库服务类的每个测试都失败了,因为我不能干净地注入。

问题与Guice如何创建对象和何时相关。此处的数据库服务可以访问当前应用程序,即当前配置。但是,在我的global.scala中,我在" onstart"之前被注入了它。这意味着我们正在尝试在适当初始化应用程序之前访问该应用程序。

在测试类lazy中进行数据库服务注入有助于避免错误。

相关内容

最新更新