如何使用Scalatest编写测试以查看列表是否包含给定范围内的double?
例如,我如何检查以下列表是否包含大约10的元素?
someVal should be (10.0 +- 1.0)
对于列表之外的值,我可能会编写类似
的测试someList should contain (3.5)
对于可以精确识别其值的列表,我会写
someList should contain (10.0 +- 1.0)
但据我所知,使用范围测试列表中的项目没有好办法。像
这样的东西genesis.block
似乎不起作用。知道我怎么能写一个优雅的测试来实现这个目标吗?
答案 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)