如何将数据库注入Play Framework中的junit测试类

时间:2018-03-29 13:06:55

标签: scala junit playframework

我有一个控制器,在创建时会向其中注入一些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

1 个答案:

答案 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[...],您必须模拟您的函数对该类/对象/任何内容所做的任何调用。