Scalatest'中的一个bug;双公差';?
我遇到过失败的测试,据我所知应该通过。我是不是漏掉了什么明显的东西Scalatest'中的一个bug;双公差';?,scala,scalatest,Scala,Scalatest,我遇到过失败的测试,据我所知应该通过。我是不是漏掉了什么明显的东西 import org.scalatest._ class xxxTests extends FlatSpec with ShouldMatchers { import math.{Pi => PI} "" should "(this should pass)" in { assert( 0.0 === 0.0 ) // ok (1e-100) should equal ((0.0) plus
import org.scalatest._
class xxxTests extends FlatSpec with ShouldMatchers {
import math.{Pi => PI}
"" should "(this should pass)" in {
assert( 0.0 === 0.0 ) // ok
(1e-100) should equal ((0.0) plusOrMinus 1e-5) // FAILS!!! "1.0E-100 did not equal DoubleTolerance(0.0,1.0E-5)"
(1e-3) should not equal ((0.0) plusOrMinus 1e-5) // ok
(0.0) should equal ((0.0) plusOrMinus 1e-5) // FAILS!!! "0.0 did not equal DoubleTolerance(0.0,1.0E-5)"
}
}
我在Scalatest 1.8和2.0M4中都遇到过这种情况。问题:必须使用
be
,而不是equal
离开这里是我愚蠢的表现(嗯,注意力不集中)
你必须用加号加上“be”而不是“equal”。永远“平等”
通过在一个对象上调用==并传入
其他的。“be”根据对象的不同而做不同的事情
通过。因此,请尝试:
0.5必须是(0.5加减0.1)
好吧,不要对自己太苛刻。我认为DSL引发了这个错误。我最初的想法是matchers需要某种方法,这意味着在两个对象上调用==,而equal就是这样做的。但它确实在左右两侧的数组上调用.deep,所以这是个例外。我认为“x应该等于(y plusor减去tol)”看起来应该可以用,而且我已经看到不止一个用户尝试过了。所以我想我会在即将发布的ScalaTest版本中支持这种语法。如果有人真的想比较两个公差是否相等,他们可以通过断言来实现。