我刚刚开始使用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
答案 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
相比,如果发生故障,它可以提供更好的消息,并且代码与其他测试一致。