Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon อะไรคือความแตกต่างหลักระหว่าง mockito matchers และ hamcrest matchers


อะไรคือความแตกต่างหลักระหว่าง mockito matchers และ hamcrest matchers


Mockito Matchers และ Hamcrest Matchers ใช้ใน Java เพื่อสร้างการทดสอบการทดสอบ แต่พวกเขามีจุดประสงค์ที่แตกต่างกันและมีลักษณะที่แตกต่างกัน

mockito matchers

Mockito matchers ส่วนใหญ่ใช้สำหรับการตั้งค่าความคาดหวังหรือการตรวจสอบเมื่อทำงานกับวัตถุจำลอง เครื่องจับคู่เหล่านี้ส่งคืนประเภทของวัตถุที่ถูกจับคู่ซึ่งช่วยให้พวกเขาสามารถใช้โดยตรงเป็นอาร์กิวเมนต์ในการเรียกวิธีการบนวัตถุจำลอง ตัวอย่างเช่น `org.mockito.matchers.any (integer.class)` ส่งคืน `จำนวนเต็ม 'ทำให้เหมาะสำหรับใช้ในวิธีการหรือการตรวจสอบเช่น` เมื่อ (mockfoo.getBarbyindex (ใด ๆ

Mockito Matchers ได้รับการออกแบบมาเพื่อทำงานอย่างราบรื่นกับกรอบการเยาะเย้ยของ Mockito ช่วยให้คุณสามารถกำหนดความคาดหวังที่ยืดหยุ่นสำหรับวิธีการเรียกใช้วิธีการเยาะเย้ย อย่างไรก็ตามโดยทั่วไปแล้วจะไม่ใช้กับข้อความ `assertThat` ซึ่งมักเกี่ยวข้องกับ Hamcrest

hamcrest matchers

ในทางกลับกัน Hamcrest Matchers ได้รับการออกแบบให้ใช้กับคำสั่ง `assertThat` สำหรับการยืนยันเงื่อนไขในการทดสอบ พวกเขาส่งคืนวัตถุ `matcher 'ซึ่งเป็นเพรดิเคตที่สามารถใช้ในการประเมินว่ามีการปฏิบัติตามเงื่อนไขหรือไม่ Hamcrest Matchers มีความยืดหยุ่นสูงและสามารถรวมกันได้โดยใช้ตัวดำเนินการเชิงตรรกะเช่น `allof`,` anyof` และ `ไม่ 'เพื่อสร้างการยืนยันที่ซับซ้อน [2] [3]

Hamcrest Matchers มีการใช้กันอย่างแพร่หลายร่วมกับ Junit และกรอบการทดสอบอื่น ๆ เพื่อเขียนการทดสอบการทดสอบที่ชัดเจนและอ่านได้ พวกเขาให้ API ที่คล่องแคล่วซึ่งทำให้รหัสทดสอบมีการจัดทำเอกสารด้วยตนเองมากขึ้นและเข้าใจได้ง่ายขึ้น ตัวอย่างเช่น `assertThat (" สวัสดี ", Equalto (" Hello "))) สื่อสารอย่างชัดเจนถึงความตั้งใจของการยืนยัน [7]

การรวมระหว่าง Mockito และ Hamcrest

ในกรณีที่คุณต้องการใช้ Hamcrest Matcher ในบริบทที่ต้องใช้ mockito matcher (เช่น stubbing หรือตรวจสอบวิธีการโทร), Mockito ให้วิธี `argthat` วิธีนี้ช่วยให้คุณสามารถห่อจับคู่ Hamcrest และใช้เป็นตัวจับคู่ mockito ตัวอย่างเช่น `เมื่อ (mockfoo.getBarByDouble (Argthat (Closeto (1.0, 0.001)))) ใช้ตัวจับคู่ Hamcrest เพื่อระบุเงื่อนไขสำหรับค่าสองเท่าที่มีความแม่นยำบางอย่าง [1] [5]

ใน Mockito 2 และหลังจากนั้นการรวมเข้ากับ Hamcrest ได้รับการจัดการผ่านคลาส `Mockitohamcrest` ซึ่งให้วิธี` argthat` ออกแบบมาโดยเฉพาะเพื่อทำงานกับ Hamcrest Matchers [5] [10] decoupling นี้ช่วยหลีกเลี่ยงความขัดแย้งในรุ่นระหว่าง Mockito และ Hamcrest Libraries

โดยสรุปจะใช้ mockito matchers เป็นหลักสำหรับการเยาะเย้ยและการตบเบา ๆ ในขณะที่ Hamcrest matchers ใช้สำหรับการยืนยัน ทั้งสองสามารถใช้ร่วมกันได้อย่างมีประสิทธิภาพในการทดสอบโดยใช้ประโยชน์จากวิธี `Argthat` เพื่อรวมการจับคู่ Hamcrest เข้ากับกรอบการเยาะเย้ยของ Mockito

การอ้างอิง:
[1] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://www.vogella.com/tutorials/hamcrest/article.html
[4] https://support.intershop.com/kb/go.php/a/enfdevdoc/pages/1827636063/guide+-+7.10+migration+mockito+1+1o
[5] https://site.mockito.org/javadoc/current/org/mockito/hamcrest/mockitohamcrest.html
[6] https://www.baeldung.com/hamcrest-text-matchers
[7] https://automatenow.io/complete-guide-to-hamcrest-matchers/
[8] https://www.scalatest.org/scaladoc/3.0.7/org/scalatest/matchers.html
[9] https://hamcrest.org/javahamcrest/tutorial
[10] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.hamcrest.mockitohamcrest.argthat