assertEquals(Object, Object)
JUnit4 থেকে / JUnit 5 বা assertThat(actual, is(expected));
Hamcrest থেকে অন্য উত্তর প্রস্তাবিত শুধুমাত্র উভয় হিসাবে কাজ করবে equals()
এবং toString()
তুলনা বস্তুর শ্রেণীর (এবং গভীরভাবে) জন্য overrided করছে।
এটি গুরুত্বপূর্ণ কারণ দাবিতে সমতা পরীক্ষা নির্ভর করে equals()
এবং পরীক্ষার ব্যর্থতার বার্তা toString()
তুলনা করা অবজেক্টগুলির উপর নির্ভর করে ।
জন্য বিল্ট ইন যেমন শ্রেণীর String
, Integer
এবং তাই জন্য ... এই ওভাররাইড যেমন কোন সমস্যা উভয় equals()
এবং toString()
। সুতরাং এটি দৃsert়ভাবে দাবি করা List<String>
বা List<Integer>
সহকারে বৈধ assertEquals(Object,Object)
।
এবং এই বিষয়টি সম্পর্কে: আপনাকে equals()
ক্লাসে ওভাররাইড করতে হবে কারণ এটি অবজেক্টের সমতার ক্ষেত্রে অর্থবোধ করে, কেবল ইউইনিতের সাথে পরীক্ষায় দৃ .়তা আরো সহজ করে তোলে না।
দৃser়তা আরও সহজ করার জন্য আপনার অন্যান্য উপায় রয়েছে।
একটি ভাল অনুশীলন হিসাবে আমি দৃ /়তা / ম্যাচারের লাইব্রেরি পছন্দ করি।
এখানে একটি 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 এর সাথে দৃ as়তা লিখতে এখনও সহজ। আরও ভাল আপনি জোর দিয়ে বলতে পারেন যে তালিকার বিষয়বস্তু সমান হয় এমনকি 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
।