【问题标题】:How can I write a Scalatest test to match the values in a list against a range?如何编写 Scalatest 测试以将列表中的值与范围相匹配?
【发布时间】:2018-08-03 04:45:10
【问题描述】:

如何使用 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)

似乎不起作用。知道如何编写一个优雅的测试来完成此任务吗?

【问题讨论】:

    标签: scala scalatest


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      相关资源
      最近更新 更多