我有一个控制器,在创建时会向其中注入一些Scala值。我需要在我的测试类中使用控制器的实例,但我不知道如何在实例化期间插入db:Database(play.api.db.Database ...一个特性)。没有它,我的一些测试失败了,因为没有定义。
我的控制器:
class Messaging @Inject() (
config: Configuration,
db: Database)(implicit val securedActions: SecuredActions) extends Communications { ... }
在我的测试类设置中:
var messagingController = new Messaging(null, null) // TEST IS FAILING BECAUSE Database is not defined here.
如何使用数据库特征替换Messaging实例中的第二个null
?
答案 0 :(得分:1)
你可以通过模拟数据库(使用MockitoSugar)或启动一个实例(使用GuiceOneAppPerSuite)来解决这个问题:
class testSpec1 extends MockitoSugar {
val database = mock[Database]
val config = mock[Configuration]
val controller = new Messaging(config, database)
//etc
}
class testSpec2 extends GuiceOneAppPerSuite {
val database = app.injector.instanceOf[Database]
val config = app.injector.instanceOf[Configuration]
val controller = new Messaging(config, database)
//etc
}
请注意,使用mock[...]
,您必须模拟您的函数对该类/对象/任何内容所做的任何调用。