2016-10-21 9 views
5

में संग्रह में कुछ वस्तुओं के आकार और उपस्थिति की जांच कैसे करें मैं हैमक्रिस्ट 1.3 का उपयोग कर रहा हूं और अधिक कॉम्पैक्ट तरीके से निम्नलिखित प्राप्त करने का प्रयास कर रहा हूं।हैमक्रिस्ट

परीक्षण का मामला निम्नलिखित पर विचार करें:

@Test 
public void testCase() throws Exception { 

    Collection<String> strings = Arrays.asList(
     "string one", 
     "string two", 
     "string three" 
    ); 

    // variant 1: 
    assertThat(strings, hasSize(greaterThan(2))); 
    assertThat(strings, hasItem(is("string two"))); 

    // variant 2: 
    assertThat(strings, allOf(
     hasSize(greaterThan(2)), 
     hasItem(is("string two")) 
    )); 
} 

यहां लक्ष्य और कुछ विशिष्ट आइटम संग्रह के दोनों आकार के लिए जाँच करने के लिए शामिल किया जाना है।

जहां पहली भिन्नता संभव है और स्वीकार किया जाता है, यह हमेशा ऐसा करना आसान नहीं होता है, क्योंकि संग्रह स्वयं ही कुछ अन्य परिचालनों का परिणाम होता है और इसलिए allOf का उपयोग करके सभी परिचालनों को करने में अधिक समझदारी होती है ऑपरेशन। जो ऊपर दूसरे बदलाव में किया जाता है।

error: no suitable method found for allOf(Matcher<Collection<? extends Object>>,Matcher<Iterable<? extends String>>) 

है वास्तव में आकार और एक भी गोली आपरेशन का उपयोग कर Hamcrest में एक संग्रह के आइटम (के लिए परीक्षण के किसी भी विशिष्ट तरीके से की तरह वहाँ:

हालांकि दूसरी भिन्नता संकलन समय त्रुटि निम्नलिखित में परिणाम होगा की कोड युक्त allOf)?

+0

संबंधित https://stackoverflow.com/questions/21624592/hamcrest-compare-collections/44030511#44030511 – rvazquezglez

+0

@rvazquezglez भावना है कि वे दोनों कर रहे हैं में संबंधित hamcrest और संग्रह के बारे में;) अन्यथा खिताब फिर से पढ़ा! – mohamnag

उत्तर

6

मुझे लगता है कि संकलक जेनरिक को हल करने में सक्षम नहीं है। निम्नलिखित मेरे लिए काम कर रहा है (JDK 8u102):

assertThat(strings, Matchers.<Collection<String>> allOf(
    hasSize(greaterThan(2)), 
    hasItem(is("string two")) 
)); 
+0

यह वास्तव में काम करता है, भले ही वह हैमक्रिस्ट के पठनीयता के मूल विचार से थोड़ा दूर है। – mohamnag

0

अनुमान: आप मौजूदा मैचर्स का उपयोग करके वहां नहीं पहुंच पाएंगे।

लेकिन अपना खुद का मैचर लिखना ... केवल एक ही मिनट लगते हैं, एक बार जब आप समझते हैं कि चीजें कैसे मिलती हैं।

शायद आप मेरा दूसरा answer देखें; जहां मैं एक पूर्ण उदाहरण देता हूं कि कोई अपना खुद का मैचर कैसे लिख सकता है। उसके बाद, मुझे शायद 15 मिनट लग गए; हालांकि मैंने पहले कस्टम मैचर्स कभी नहीं लिखा था।

+0

मुझे अपने मैचर्स लिखने में कोई समस्या नहीं है, लेकिन ऐसा लगता है कि मुझे ऐसा जरूरी चीज है कि मैंने सोचा कि ऐसा करने के लिए कुछ रास्ता मौजूद होना चाहिए। – mohamnag

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