我如何编写Scalatest测试来匹配列表中的值和范围?

我如何编写Scalatest测试来匹配列表中的值和范围?,scala,scalatest,Scala,Scalatest,如何使用Scalatest编写测试,以查看列表是否包含给定范围内的double 例如,我如何检查以下列表中的元素大约为10 val myList = List(1.5, 2.25, 3.5, 9.9) 对于列表之外的值,我可以编写如下测试 someVal should be (10.0 +- 1.0) 对于可以精确知道其值的列表,我会写 someList should contain (3.5) 但据我所知,使用范围测试列表中的项目没有好方法。差不多 someList should co

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

例如,我如何检查以下列表中的元素大约为10

val myList = List(1.5, 2.25, 3.5, 9.9)

对于列表之外的值,我可以编写如下测试

someVal should be (10.0 +- 1.0)
对于可以精确知道其值的列表,我会写

someList should contain (3.5)
但据我所知,使用范围测试列表中的项目没有好方法。差不多

someList should contain (10.0 +- 1.0)

似乎不起作用。知道我如何编写一个优雅的测试来实现这一点吗?

您可以使用公差数字来指定双精度:

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)