मानक का उपयोग निम्नलिखित परीक्षण मामले पर विचार करें JUnit
का दावा है और hamcrest के assertThat
:हैमक्रिस्ट क्यों कहता है कि बाइट 0 int 0 के बराबर नहीं है?
byte b = 0;
int i = 0;
assertEquals(b, i); // success
assertThat(b, equalTo(i)); // java.lang.AssertionError: Expected: <0> but: was <0>
if (b == i) {
fail(); // test fails, so b == i is true for the JVM
}
कि इतने क्यों है? मान JVM के लिए स्पष्ट रूप से बराबर हैं क्योंकि b == i
true
है, तो hamcrest
क्यों विफल हो जाता है?
क्योंकि 'Byte.valueOf ((बाइट) 0) .equals (Integer.valueOf (0))' गलत है। – assylias
उपरोक्त * assylias * 'उदाहरण में देखा गया है, बाइट एक बाइट-ऑब्जेक्ट में ऑटो-बॉक्स किया जाता है। जैसा कि [हैमक्रिस्ट के बराबर डॉक्स] में देखा गया है (http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/core/IsEqual.html#equalTo (T)) यह ऑब्जेक्ट 1.equals (ऑब्जेक्ट 2) का उपयोग करता है। चूंकि बाइट और int दोनों प्राइमेटिव हैं, इसलिए यह उन्हें बाइट और इंटीजर ऑब्जेक्ट्स पर ऑटो-बॉक्स करता है। Byte1।बराबर (इंटीजर 1) झूठी वापसी करेगा, भले ही इन बॉक्स किए गए ऑब्जेक्ट के मान समान हों। –