2011-12-01 13 views
26

यह एक आसान होने वाला है, लेकिन मुझे उनके बीच का अंतर नहीं मिल रहा है और किसके लिए उपयोग करना है, अगर मेरे पास मेरे क्लासपाथ में लिब शामिल है?मॉकिटो के मैचर बनाम हैमक्रिस्ट मैचर?

+0

संबंधित: [? कैसे Mockito काम matchers करना] (http://stackoverflow.com/a/22822514/1426891) –

उत्तर

71

Hamcrest मिलान तरीकों Matcher<T> लौट सकते हैं और Mockito वापसी टी matchers तो, उदाहरण के लिए: org.hamcrest.Matchers.any(Integer.class)org.hamcrest.Matcher<Integer> का एक उदाहरण देता है, और org.mockito.Matchers.any(Integer.class)Integer का एक उदाहरण देता है।

इसका मतलब है कि आप केवल Matcher<?> ऑब्जेक्ट को हस्ताक्षर में अपेक्षित होने पर हैमरेस्ट मैचर्स का उपयोग कर सकते हैं - आमतौर पर, assertThat कॉल में। उम्मीदों या सत्यापनों को स्थापित करते समय जहां आप नकली वस्तु के तरीकों को बुला रहे हैं, आप मॉकिटो मैचर्स का उपयोग करते हैं।

उदाहरण के लिए (स्पष्टता के लिए पूरी तरह से योग्य नाम के साथ):

@Test 
public void testGetDelegatedBarByIndex() { 
    Foo mockFoo = mock(Foo.class); 
    // inject our mock 
    objectUnderTest.setFoo(mockFoo); 
    Bar mockBar = mock(Bar.class); 
    when(mockFoo.getBarByIndex(org.mockito.Matchers.any(Integer.class))). 
     thenReturn(mockBar); 

    Bar actualBar = objectUnderTest.getDelegatedBarByIndex(1); 

    assertThat(actualBar, org.hamcrest.Matchers.any(Bar.class)); 
    verify(mockFoo).getBarByIndex(org.mockito.Matchers.any(Integer.class)); 
} 

यदि आप कोई संदर्भ है कि एक Mockito मिलान की आवश्यकता है में एक Hamcrest मिलान का उपयोग करना चाहते हैं, तो आप org.mockito.Matchers.argThat मिलान का उपयोग कर सकते हैं। यह एक हैमक्रिस्ट मैचर को एक मॉकिटो मैचर में परिवर्तित करता है। तो, कहें कि आप कुछ परिशुद्धता (लेकिन ज्यादा नहीं) के साथ एक डबल वैल्यू से मेल खाना चाहते थे। उस मामले में, तुम कर सकते हो:

when(mockFoo.getBarByDouble(argThat(is(closeTo(1.0, 0.001))))). 
    thenReturn(mockBar); 
+3

बस यह देखते हुए कि, Mockito 2, में ' ArgThat 'अधिभार जो Hamcrest' Matcher 'के साथ काम करता है' MockitoHamcrest 'ले जाया गया था। [मॉकिटो 2 में नया क्या है] (https://github.com/mockito/mockito/wiki/What%27s-new-in-Mockito-2#incompatible) इसकी "1.10 के साथ असंगत परिवर्तन" खंड में चर्चा करता है। –

संबंधित मुद्दे