assertEquals(Object, Object)
JUnit4 से / JUnit 5 या assertThat(actual, is(expected));
Hamcrest से अन्य उत्तर में प्रस्तावित केवल दोनों के रूप में काम करेंगे equals()
औरtoString()
तुलना वस्तुओं के वर्गों (और गहराई से) के लिए overrided कर रहे हैं।
यह मायने रखता है क्योंकि दावे में समानता परीक्षण निर्भर करता है equals()
और परीक्षण विफलता संदेश toString()
तुलनात्मक वस्तुओं पर निर्भर करता है ।
अंतर्निहित कक्षाओं के लिए जैसे कि String
, Integer
और इसलिए ... इन दोनों के रूप में कोई समस्या नहीं है equals()
और toString()
। तो यह पूरी तरह से मान्य है List<String>
या List<Integer>
साथ assertEquals(Object,Object)
।
और इस मामले के बारे में: आपको equals()
एक वर्ग में ओवरराइड करना होगा क्योंकि यह वस्तु समानता के संदर्भ में समझ में आता है, न केवल JUnit के साथ एक परीक्षण में जोर देना।
कथनों को आसान बनाने के लिए आपके पास अन्य तरीके हैं।
एक अच्छे अभ्यास के रूप में मैं दावे / मिलान पुस्तकालयों का पक्ष लेता हूं।
यहाँ एक AssertJ समाधान है।
org.assertj.core.api.ListAssert.containsExactly()
आपको जो चाहिए वह है: यह पुष्टि करता है कि वास्तविक समूह में दिए गए मान बिल्कुल हैं और कुछ और नहीं, जैसा कि जवादोक में कहा गया है।
एक Foo
वर्ग मान लीजिए कि आप कहां तत्व जोड़ते हैं और आप कहां से प्राप्त कर सकते हैं।
इस बात का एक इकाई परीक्षण Foo
यह दावा करता है कि दो सूचियों में एक जैसी सामग्री हो सकती है:
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
@Test
void add() throws Exception {
Foo foo = new Foo();
foo.add("One", "Two", "Three");
Assertions.assertThat(foo.getElements())
.containsExactly("One", "Two", "Three");
}
एक AssertJ अच्छी बात यह है कि एक List
उम्मीद के रूप में घोषित करना अनावश्यक है: यह जोर को कठोर बनाता है और कोड अधिक पठनीय है:
Assertions.assertThat(foo.getElements())
.containsExactly("One", "Two", "Three");
लेकिन जोर / मिलान पुस्तकालयों एक चाहिए क्योंकि ये वास्तव में आगे होगा।
अब मान लीजिए कि s लेकिन इंस्टेंस को Foo
स्टोर नहीं करता है ।
यह एक बहुत ही आम जरूरत है। AssertJ के साथ अभिकथन अभी भी लिखना सरल है। बेहतर होगा कि आप सूची सामग्री को बराबर कर सकते हैं भले ही तत्वों का वर्ग ओवरराइड नहीं करता हो, जबकि JUnit रास्ते के लिए यह आवश्यक है:String
Bar
equals()/hashCode()
import org.assertj.core.api.Assertions;
import static org.assertj.core.groups.Tuple.tuple;
import org.junit.jupiter.api.Test;
@Test
void add() throws Exception {
Foo foo = new Foo();
foo.add(new Bar(1, "One"), new Bar(2, "Two"), new Bar(3, "Three"));
Assertions.assertThat(foo.getElements())
.extracting(Bar::getId, Bar::getName)
.containsExactly(tuple(1, "One"),
tuple(2, "Two"),
tuple(3, "Three"));
}
assertArrayEquals
आजकल इस्तेमाल करना पसंद है। के साथ संयोजन में उपयोग करेंList#toArray
।