【发布时间】:2017-09-25 18:28:29
【问题描述】:
我有以下需要使用 ScalaTest 测试的 Play Controller 类:
class RunFormula @Inject() (dbCache: DbCache) extends Controller {
// some code
}
DbCache 类是单例:
@Singleton
class DbCache @Inject() (properties: Properties) {
// some getters and setters
}
这是测试类:
class RunFormulaTest extends PlaySpec with OneAppPerSuite with MockitoSugar {
implicit override lazy val app = new GuiceApplicationBuilder().build
@Inject val dbCache : DbCache = null
val controller = new RunFormula(dbCache)
// more test code
}
当我运行测试时,RunFormula 内的对象 dbCache 为空,我的理解是 Guice 在注入实例时会创建实例,但显然不是。
请注意,控制器RunFormula 在非测试场景中注入dbCache 可以正常工作。
如何修复测试?
【问题讨论】:
-
ScalaTest 不使用依赖注入来创建您的套件类。您必须手动构建您测试的类。或者您可以使用 Guice api,以便它为您创建实例,但您仍然必须手动调用它。不过有几点注意事项:1)您需要真实的 DbCache 实例吗?也许你想嘲笑它。 2)使用OneAppPerSuite会增加很多开销,您可能不需要运行应用程序进行单元测试。
-
是的,我需要 DbCache 的真实实例,而不是模型。
标签: scala playframework playframework-2.0 scalatest