Scalatest 模拟数据库

标签 scala testing mocking scalatest

我对使用 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 中的内容

最佳答案

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

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

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

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

关于Scalatest 模拟数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012599/

相关文章:

generics - Scala:是否可以指示实现某种方法的泛型类

scala - Scala 中的类型安全原语

scala - 在 Scala 中为父类(super class)生成构造函数

java - 通过测试套件中的@ExcludeCategory 忽略 junit 测试

java - 在 Java 类中进行模拟

java - 复杂的加密/解密模型——这有可能吗?

testing - Hudson/Jenkins 仅在连续失败时通知

testing - xcodebuild 测试 - 如何在一台机器上构建并在另一台机器上运行测试

c# - 如何使用 Moq 测试没有返回值的方法?

java - jUnit 意外方法调用 DAO Easymock