我是使用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中的内容答案 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很容易用于测试(文档中提供了规格示例)。