在ScalaTest中处理双打

M.K*_*.K. 8 scala scalatest

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

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

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

编辑:

def price () : Double
Run Code Online (Sandbox Code Playgroud)

Spi*_*lov 13

它看起来像你有一个隐含的Equality[Double]范围实例org.scalactic.TolerantNumerics,其中的文档就在这里.

该文档的示例是:

implicit val doubleEquality = TolerantNumerics.tolerantDoubleEquality(0.01)
Run Code Online (Sandbox Code Playgroud)

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

您还可以考虑使用+-以下方法尝试显式容差:

assert(x.price() === 185.92 +- 0.01)
Run Code Online (Sandbox Code Playgroud)


Abh*_*kar 5

actual shouldBe (expected +- tolerance)如果使用FlatSpec,你可以简单地做; 其他规范有类似的匹配器而不是shouldBe. 它在失败的情况下提供比 更好的消息assert,并且代码与其他测试一致。