如何获得为Scala案例类生成的随机数据,并能够“更改某些值”进行单元测试?

PhD*_*PhD 3 unit-testing scala scalacheck

我正在使用一段具有广泛/深层案例类层次结构的代码。对于单元测试,我想在类中填充“随机数据”,以便能够更改我关心的字段的数据?

例:

case class Foo(bar: Bar, name: String, value: Int)
case class Bar(baz: Baz, price: Double)
case class Baz(thing: String)
Run Code Online (Sandbox Code Playgroud)

所以像这样:

val randomFoo = GenerateRandomData(Foo)
randomFoo.bar.baz = Baz("custom for testing")
Run Code Online (Sandbox Code Playgroud)

我听说过ScalaCheck,并ShapelessScalacheck-shapeless与他们提供某种形式的随机数据生成,但没有与定制看来的。

我目前正在使用,ScalaMock但这会扩展null字段并破坏“其他”测试的可测试性。我在.Net中使用了类似Auto Fixture的工具,并且想知道Scala中是否有类似的工具。

Dim*_*ima 5

我想,您正在寻找scalaz lense

它会做你想要的。

但是,我得说,使用随机数据进行单元测试似乎是一个可怕的想法。您如何调试时常发生的故障?

您应该花一些时间来建立一组确定性的恒定测试对象,这些对象也类似于实际的生产数据,然后在测试中使用它们。