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版本中支持这种语法。如果有人真的想比较两个公差是否相等,他们可以通过断言来实现。