Scalatest嘲笑数据库

时间:2014-07-29 09:55:59

标签: scala testing mocking scalatest

我是使用Scala / Scalatest的新手,我正在尝试编写一些模拟数据库的测试用例。

我有一个名为FindInDB(entry:String)的函数,用于检查" entry"在db中,就像这样:

entry match {
  case `entry` =>
  if(db.table contains entry) {
    true
  }
    false
}

在另一个函数中调用FindInDB,该函数在名为Service的类中定义。 我希望能够模拟db.table部分。从阅读scalatest我知道我可以模拟FindInDB定义的类并控制调用FindInDB返回的函数,但我想测试FindInDB函数本身并通过mock

控制db.table中的内容

1 个答案:

答案 0 :(得分:1)

您可以使用DB模型框架,例如jOOQ或我的框架Acolyte。对于直接或间接基于一个JDBC的任何项目(例如JPA,EJB,Anorm,Slick),Acolyte可以在JDBC级别模拟DB:您为每个测试用例描述哪个JDBC结果(结果集,更新计数,错误)是针对哪个语句。

它允许模拟完全相同的JDBC数据将由您的app / lib与预期的DB进行交换,具有许多测试优势:单元隔离,简单(无需使用夹具设置/拆除测试DB)。

文档已在http://acolyte.eu.org/上线。

Scala DSL很容易用于测试(文档中提供了规格示例)。