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