scala – 如何创建案例类的随机实例?
发布时间:2020-12-16 08:59:02 所属栏目:安全 来源:网络整理
导读:假设我有几个案例类,例如: case class C(c1: Int,c2: Double,c3: Option[String])case class B(b: Int,cs: Seq[C])case class A(a: String,bs: Seq[B]) 现在我想生成一些具有随机测试值的A实例. 我正在寻找一种通用的方法来做到这一点.我可以用运行时反射来
假设我有几个案例类,例如:
case class C(c1: Int,c2: Double,c3: Option[String]) case class B(b: Int,cs: Seq[C]) case class A(a: String,bs: Seq[B]) 现在我想生成一些具有随机测试值的A实例. 我正在寻找一种通用的方法来做到这一点.我可以用运行时反射来做,但我更喜欢编译时的解决方案. def randomInstance[A](a: A): A = ??? 我该怎么做 ?可以用无形的方式完成吗? 解决方法
最简单的方法是使用
ScalaCheck.您可以通过为实例定义Gen [A]来实现:
import org.scalacheck.Gen final case class C(c1: Int,c3: Option[String]) object C { val cGen: Gen[C] = for { c1 <- Gen.posNum[Int] c2 <- Gen.posNum[Double] c3 <- Gen.option(Gen.oneOf("foo","bar","hello")) } yield C(c1,c2,c3) } 你消耗它: object F { def main(args: Array[String]): Unit = { val randomC: C = C.cGen.sample.get } } 最重要的是,您可以添加scalacheck-shapeless,为您生成Gen [A],具有完全随机的值(您无法控制它们). 您可能还想了解random-data-generator(感谢@Gabriele Petronella),这进一步简化了事情.来自文档: import com.danielasfregola.randomdatagenerator.RandomDataGenerator object MyApp extends RandomDataGenerator { case class Example(text: String,n: Int) val example: Example = random[Example] // Example(??资钜?旅?墛炝?????咪,73967257) } 这在property based testing也特别有用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 带有延迟加载模块的Angular Router Breadcrumbs
- angular6学习(八):数据绑定
- Raspberry Pi 2上的Docker:无法访问任何注册表端点
- AngularJS中获取ng-repeat动态生成的ng-model值
- SOAP webserivce 和 RESTful webservice 对比及区别
- webservice之cxf实现[web项目中基于maven与spring整合]
- python – Docker,Flask,SQLAlchemy:ValueError:基数为
- AngularJs ng-repeat性能问题
- 配置Scala工作表的工作目录
- 《设计数据密集型应用/DDIA》精要翻译(一) :reliability