2012-10-19 17 views
5

मुझे असफल परीक्षणों का सामना करना पड़ा है जो मेरी सभी समझ में गुजरना चाहिए। क्या में यहां कुछ भूल रहा हूँ?स्केलटेस्ट 'डबल टोलरेंस' में एक बग?

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)" 
    } 
} 

मैंने इसे स्केलटेस्ट 1.8 और 2.0 एम 4 दोनों के साथ अनुभव किया है।

उत्तर

8

समस्या: be का उपयोग करना चाहिए, equal नहीं।

मेरी मूर्खता (ईमान, फोकस की कमी) के संकेत के रूप में यहां छोड़कर।

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

आप के साथ plusOrMinus का उपयोग करना चाहिए "हो" "बराबर" नहीं। "बराबर" हमेशा अन्य में गुजरने वाले एक ऑब्जेक्ट पर == पर आक्रमण करके समानता की तुलना करता है। पास होने वाली वस्तु के आधार पर "हो" अलग-अलग चीजें करता है। तो कोशिश:

0,5 (0,5 plusOrMinus 0,1)

+4

खैर होना चाहिए, अपने आप पर बहुत कठिन नहीं है। मुझे लगता है कि डीएसएल इस गलती को आमंत्रित करता है। मेरा मूल विचार यह था कि मैचर्स को कुछ तरीकों की आवश्यकता होती है जो हमेशा दो वस्तुओं पर == को कॉल करने का मतलब है, और यह बराबर है। इसके अलावा यह कॉल करता है। बाएं और दाएं ओर एक ऐरे पर रखें, तो यह एक अपवाद है। मुझे लगता है कि "x बराबर होना चाहिए (y plusOrMinus tol)" ऐसा लगता है कि इसे काम करना चाहिए, और मैंने देखा है कि एक से अधिक उपयोगकर्ता इसे आजमाएं। तो मुझे लगता है कि मैं वास्तव में स्कैलाटेस्ट के आने वाले संस्करण में उस वाक्यविन्यास का समर्थन करूंगा। यदि कोई वास्तव में समानता के लिए दो सहिष्णुता की तुलना करना चाहता है, तो वे एक दावा के साथ ऐसा कर सकते हैं। –