我如何单元测试一个随机内部混乱数组的方法

时间:2016-11-28 20:46:22

标签: scala unit-testing scalatest

我有一个看起来像这样的方法:

def compute[T](l: List[T]): List[T] = {
    val shuffled = util.Random.shuffle(l)
    // do some more computations
}

我想为我的单元测试播种随机数生成器,这样我就不必将我的方法分解为两种方法并仅测试计算,因为这是将在外部使用的方法。这可以在ScalaTest中完成吗?

2 个答案:

答案 0 :(得分:4)

我在ScalaTest中没有太多背景知识,但是如果你打电话给setSeed(seed: Long): Unit,那么对于任何给定的种子值,你总会得到相同的随机播放。

scala> util.Random.shuffle(Seq(1,2,3,4,5,6,7,8,9,0))
res0: Seq[Int] = List(6, 0, 8, 5, 4, 7, 2, 3, 1, 9)

scala> util.Random.setSeed(57L)

scala> util.Random.shuffle(Seq(1,2,3,4,5,6,7,8,9,0))
res1: Seq[Int] = List(5, 3, 2, 0, 6, 8, 7, 4, 1, 9)

scala> util.Random.setSeed(57L)

scala> util.Random.shuffle(Seq(1,2,3,4,5,6,7,8,9,0))
res2: Seq[Int] = List(5, 3, 2, 0, 6, 8, 7, 4, 1, 9)

答案 1 :(得分:2)

您如何测试取决于当前时间的方法?还是数据库状态?或来自谷歌的回复?或睡了一段时间?

通常当您测试依赖于某些外部状态(时间,其他系统或在您的情况下:entropy / seed)的任何代码时,您将重构该代码并提取依赖项。一种方式,正如@jwvh所说是提取种子。但是imho,你应该提取整个转型

因此,您应该创建一个接收混洗数组并测试该方法的方法