這是關於Play 2.3應用程序,我試圖將Guice引入。 我有以下的遺留代碼Guicify和我走到這一步注入彈性數據庫服務的Play應用程序
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
? 我該如何解決這個問題?
附加信息 重寫的OneAppPerTest變型中,使用以下邏輯
override def newAppForTest(testData: TestData): FakeApplication = {
new FakeApplication(
additionalConfiguration = additionalConfiguration,
withGlobal = Some(globalSettings)
)
}
其中additionalConfiguration
可以通過實際測試和globalSettings
重寫是其中吉斯在框架
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
}
}
}
內引入還有其他的測試案例具有類似的設置,可以很好地工作。我能夠注入模擬,測試類。但是,使用此DatabaseService類的每個測試都失敗,因爲我無法乾淨地注入它。
如果'DatabaseService'被注入,爲什麼不注入'DB'呢? – rethab
不過要試一試。我假設這需要'Application'注入。然而,結果卻是一個隱含的參數。我會嘗試你提到的並回復你。 – Serendipity
@rethab DB不是注入式屬性。它更多的是創建數據庫的方法。數據庫不容易注入,因爲它沒有無參數的構造函數。 – Serendipity