如何编写Scalatest测试以匹配列表中的值与范围?

时间:2018-02-23 06:46:05

标签: scala scalatest

如何使用Scalatest编写测试以查看列表是否包含给定范围内的double?

例如,我如何检查以下列表是否包含大约10的元素?

someVal should be (10.0 +- 1.0)

对于列表之外的值,我可能会编写类似

的测试
someList should contain (3.5)

对于可以精确识别其值的列表,我会写

someList should contain (10.0 +- 1.0)

但据我所知,使用范围测试列表中的项目没有好办法。像

这样的东西
genesis.block

似乎不起作用。知道我怎么能写一个优雅的测试来实现这个目标吗?

1 个答案:

答案 0 :(得分:4)

您可以使用TolerantNumerics指定双精度:

import org.scalatest.FlatSpec
import org.scalactic.TolerantNumerics
import org.scalatest.Matchers._

class MyTest extends FlatSpec {

  implicit val doubleEquality = TolerantNumerics.tolerantDoubleEquality(0.1)

    9.9d should be(10.0 +- 1.0)
    List[Double](1.5, 2.25, 3.5, 9.9) should contain(10.0)
}

这会失败:

List[Double](1.5, 2.25, 3.5, 9.8) should contain(10.0)

这应该成功:

List[Double](1.5, 2.25, 3.5, 9.9) should contain(10.0)