2015-11-21 6 views
19

हैमक्रिस्ट संग्रह की सामग्री पर जोर देने के लिए कई मैचर्स प्रदान करता है। इन मामलों में से सभी पारित:हैमक्रिस्ट के पास इटम्स कैसे हैं, इसमें शामिल हैं और इनइनीओडर अलग हैं?

Collection<String> c = ImmutableList.of("one", "two", "three"); 
assertThat(c, hasItems("one", "two", "three"); 
assertThat(c, contains("one", "two", "three"); 
assertThat(c, containsInAnyOrder("one", "two", "three"); 

hasItems, contains और containsInAnyOrder क्या अंतर है?

उत्तर

25

hasItems checks:

जांच Iterable उपज कम से कम एक आइटम है कि निर्दिष्ट items से इसी मद के बराबर है से अधिक लगातार गुजरता।

है यही कारण है, यह सुनिश्चित करें कि संग्रह कम से कम इन वस्तुओं की किसी भी क्रम में शामिल करता है। तो,

assertThat(c, hasItems("one", "two")); 

अतिरिक्त आइटम को अनदेखा कर दिया जाएगा, साथ ही पास होगा। और:

assertThat(c, hasItems("three", "two", "one")); 

भी पास होगा।

contains checks:

जांच Iterable आने वाले एक पास आइटम्स की एक श्रृंखला है, प्रत्येक तार्किक निर्दिष्ट मदों में इसी आइटम के बराबर अर्जित करता है। एक सकारात्मक मैच के लिए, निर्दिष्ट पुनरावृत्त निर्दिष्ट वस्तुओं की संख्या के समान लंबाई के होना चाहिए। ,

assertThat(c, contains("one", "two")); // Fails 

यह विफल हो जाएगा बचे हुए के रूप में "three" मेल नहीं खाता है:

तो यह सुनिश्चित करें कि संग्रह बिल्कुल इन मदों में शामिल है बनाता है।

assertThat(c, contains("three", "two", "one")); // Fails 

यह विफल रहता है क्योंकि संबंधित आइटम मेल नहीं खाते हैं।

एक अन्य संबंधित मिलान, containsInAnyOrder, checks कि वास्तव में उन वस्तुओं मौजूद हैं, लेकिन किसी भी क्रम में:

है कि जब जांच की Iterable आने वाले एक पास की एक श्रृंखला पैदावार से मेल खाता है Iterables के लिए एक आदेश नास्तिक मिलान बनाता है आइटम, निर्दिष्ट वस्तुओं में प्रत्येक आइटम को तार्किक रूप से एक आइटम के बराबर।

एक लापता आइटम के साथ एक परीक्षण में विफल रहता है:

assertThat(c, containsInAnyOrder("one", "two")); // Fails 

लेकिन एक अलग आदेश में सभी आइटम पारित करेंगे:

assertThat(c, containsInAnyOrder("three", "two", "one")); 
संबंधित मुद्दे