database - 使用ScalaCheck生成数据库数据

标签 database scala testing scalacheck

有没有办法使用 ScalaCheck 生成伪造的数据库数据?例如,如果我将我的数据库架构定义泵入 ScalaCheck,是否有一种方法可以生成我需要的东西来测试我拥有的每个模型?有没有办法让它保持参照完整性?

最佳答案

您将需要为模型手动创建生成器。您可以从生成器为任何对象和类创建任意实例。例如:

case class Hoge(a: String, b: Int)可以轻松生成:

val hogeGen: Generator[Hoge] = for {
  aGen <- arbitrary[String]
  bGen <- arbitrary[Int]
} yield Hoge(aGen, bGen)

为了在您的属性测试中自动使用它,您将需要生成器的隐式任意实例。我建议在编写这些时包括类型以避免出现问题。

implicit val arbHoge: Arbitrary[Hoge] = Arbitrary(hogeGen) 

您也可以跳过生成器步骤,只需编写 implicit val arbHoge: Arbitrary[Hoge] = Arbitrary(for { ... } yield Hoge(...))

但是,如果您正在处理一些真实的数据库,您很可能会有嵌套结构。

case class Fuga(h: Hoge, i: Int)

既然你已经为Hoge定义了生成器,我们可以用同样的方式为Fuga编写一个生成器。

val fugaGen: Generator[Fuga] = for {
  hGen <- hogeGen
  iGen <- arbitrary[Int]
} yield Fuga(hGen, iGen)

您还可以使用 Hoge 的任意实例,就像我们通过 arbitrary[Hoge]

使用 scalacheck 中可用的标准任意整数一样

最后一点,如果你只处理非常基本的结构,比如本例中的 Hoge,那么你可以只使用 shapeless并跳过手动定义。

关于database - 使用ScalaCheck生成数据库数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43444360/

相关文章:

ruby-on-rails - ruby rails : two references with different name to the same model

sql - 如何使用 Windows 身份验证从命令提示符连接到 SQL Server

scala - 处理枚举类型的通用映射函数

testing - Gradle + Robolectric + Espresso : can't run separately

java - 使用 java 在 HSQL 数据库中出现异常 - 用户缺乏权限或未找到对象错误

php - 删除数据库中的重复项

带有文字类型的 Scala 3 "a match type could not be fully reduced"

scala - SBT 在 Build.scala 中指定 java 堆大小

reactjs - 集成测试 - redux/react + nock.js

testing - 您如何跨浏览器和设备测试功能?