【问题标题】:Scalatest mocking a dbScalatest 模拟数据库
【发布时间】:2014-09-20 15:57:43
【问题描述】:

我对使用 Scala/Scalatest 很陌生,我正在尝试编写一些模拟数据库的测试用例。

我有一个名为 FindInDB(entry : String) 的函数,它检查“entry”是否在数据库中,如下所示:

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

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

【问题讨论】:

  • 你知道...一个布尔表达式已经返回真或假,具体取决于它是真还是假,在它周围加上if 语句并不是真正必要的
  • 是的,该方法中还发生了其他事情,但为了简化问题,我把它们拿出来

标签: scala testing mocking scalatest


【解决方案1】:

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

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

文档在线http://acolyte.eu.org/

有一个易于用于测试的 Scala DSL(文档中提供了带有规范的示例)。

【讨论】:

    猜你喜欢
    • 2015-09-20
    • 2020-12-21
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2011-03-14
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多