在ScalaTest中处理双打

时间:2015-01-07 00:06:44

标签: scala scalatest

我刚刚开始使用ScalaTest,我使用以下内容比较我的规范中的两个双打如下:

  it should "calculate the price" in {
    val x = new X(10,10,12,1000)
    assert(x.price() === 185.92)
  }

规格正在通过,即使我输入错误的值185.92来与价格函数返回的内容进行比较(实际上,上述情况下实际返回10.23)。我有其他规格,我只是比较Ints,他们按预期工作。但是那些涉及Doubles的人无论如何都会过世。除了assert之外还有其他功能我应该用来比较Doubles吗?

编辑:

def price () : Double

2 个答案:

答案 0 :(得分:11)

在我看来,您在Equality[Double]范围内有org.scalactic.TolerantNumerics的隐式实例,其文档为here

该文档的示例是:

implicit val doubleEquality = TolerantNumerics.tolerantDoubleEquality(0.01)

但看起来有人在你的情况下以一个非常大的容差值来实例化它。

您还可以考虑使用+-

来尝试显式容差
assert(x.price() === 185.92 +- 0.01)

答案 1 :(得分:0)

如果使用actual shouldBe (expected +- tolerance),则只需执行FlatSpec;其他规范具有类似的匹配器,而不是shouldBe。与assert相比,如果发生故障,它可以提供更好的消息,并且代码与其他测试一致。