2012-10-19 4 views
5

私はすべての私の理解に合格しなければならないテストに遭遇しました。私は明白な何かをここに欠いていますか?Scalatest 'DoubleTolerance'のバグ?

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の両方でこれを経験しました。

答えて

8

問題:beではなく、equalを使用する必要があります。

私の愚かさの兆候(ここでは、焦点の欠如)としてここに残してください。

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

あなたは "等しい" ではない "こと" とplusOrMinusを使用する必要があります。 "equal"常に は、等しいオブジェクトを比較するために、あるオブジェクトに対して==を呼び出すことによって比較します。 を渡します。どのオブジェクトが に合格しているかによって、「be」は異なることを行います。だから、試してみてください。

0.5(0.5 plusOrMinus 0.1)

+4

まあでなければならない、あなた自身にあまりにも難しいことではありません。私はDSLがこの間違いを招いたと思う。私の最初のアイデアは、matcherは2つのオブジェクトに対して常に==を呼び出すことを意味する何らかの方法が必要であり、それは同等であるということでした。例外として、左と右の配列の.deepを呼び出す点を除いては例外です。私は "xは等しくなければなりません(y plusOrMinus tol)"はうまくいくはずだと思っています。だから私は実際にScalaTestの近々のバージョンでその構文をサポートすると思います。誰かが本当に平等のために2つの公差を比較したいと思うなら、彼らは主張でそうすることができます。 –

関連する問題