我如何编写 Scalatest 测试来将列表中的值与范围进行匹配?

How can I write a Scalatest test to match the values in a list against a range?

我如何使用 Scalatest 编写测试来查看列表是否包含给定范围内的双精度数?

例如,我如何检查以下列表是否有一个大约为 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)

好像不行。知道如何编写一个优雅的测试来完成这个吗?

您可以使用 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)