Scalatest'DoubleTolerance'中的一个错误?

aka*_*ppi 5 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) 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)"
  }
}
Run Code Online (Sandbox Code Playgroud)

我在Scalatest 1.8和2.0M4上都经历过这种情况.

aka*_*ppi 8

问题:必须使用be,而不是equal.

离开这里是我愚蠢的表现(恍惚,缺乏专注).

https://groups.google.com/forum/?fromgroups=#!msg/scalatest-users/pb54GzOej6I/C9714h_OW_UJ

你必须使用plusOrMinus,"be"不是"相等"."equal"总是通过在一个对象上调用==,传入另一个对象来比较相等性."be"根据传递的对象做不同的事情.所以尝试:

0.5必须是(0.5 plusOrMinus 0.1)

  • 好吧,不要对自己太过刻苦.我认为DSL会引发这个错误.我最初的想法是,匹配器需要某种方式,总是意味着在两个对象上调用==,这就是等同的.除了它在左侧和右侧的数组上调用.deep,所以这是一个例外.我认为"x应该相等(y plusOrMinus tol)"看起来应该有效,而且我看到不止一个用户现在尝试它.所以我想我会在即将推出的ScalaTest版本中支持这种语法.如果有人真的想要比较两个相等的容差,他们可以用断言来做. (4认同)