如何使用Scalatest编写测试以查看列表是否在给定范围内包含双精度?
例如,如何检查以下列表中的元素大约为10?
val myList = List(1.5, 2.25, 3.5, 9.9)
Run Code Online (Sandbox Code Playgroud)
对于列表之外的值,我可能会写一个测试
someVal should be (10.0 +- 1.0)
Run Code Online (Sandbox Code Playgroud)
对于可以精确知道其值的列表,我会写
someList should contain (3.5)
Run Code Online (Sandbox Code Playgroud)
但据我所知,没有一种好的方法可以使用范围来测试列表中的项目。就像是
someList should contain (10.0 +- 1.0)
Run Code Online (Sandbox Code Playgroud)
似乎不起作用。知道如何编写一个优雅的测试来实现这一目标吗?
您可以使用 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)
}
Run Code Online (Sandbox Code Playgroud)
这会失败:
List[Double](1.5, 2.25, 3.5, 9.8) should contain(10.0)
Run Code Online (Sandbox Code Playgroud)
这应该会成功:
List[Double](1.5, 2.25, 3.5, 9.9) should contain(10.0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |