Mockito มีสองวิธีที่สามารถใช้ในการจัดการสถานะของการเยาะเย้ยในระหว่างการทดสอบ: `reten ()` และ `clearinvocations ()` ในขณะที่ทั้งสองวิธีใช้ในการจัดการสถานะจำลองพวกเขามีวัตถุประสงค์ที่แตกต่างกันและมีผลกระทบที่แตกต่างกันในการเยาะเย้ย
เมธอด
mockito `reset ()` เมธอด
วิธี `reset ()` ใน mockito ใช้เพื่อรีเซ็ตวัตถุจำลองทั้งหมด ซึ่งหมายความว่ามันไม่เพียง แต่จะต้องล้างจำนวนการเรียกร้อง แต่ยังลบการสต็อกใด ๆ ที่ถูกตั้งค่าไว้ในการเยาะเย้ย สิ่งนี้อาจเป็นปัญหาได้เพราะคุณต้องใช้การเยาะเย้ยอีกครั้งหลังจากรีเซ็ตมันหากคุณต้องการรักษาพฤติกรรมที่เฉพาะเจาะจงสำหรับการทดสอบของคุณ การใช้ `รีเซ็ต ()` โดยทั่วไปแล้วจะท้อแท้เพราะมันสามารถนำไปสู่การทดสอบที่ซับซ้อนและมุ่งเน้นน้อยลง ขอแนะนำให้หลีกเลี่ยงการใช้ `รีเซ็ต ()` เว้นแต่จำเป็นอย่างยิ่งเพราะมันสามารถปิดบังความตั้งใจของการทดสอบของคุณและทำให้ยากต่อการรักษา [1] [5] [7]
mockito `clearinvocations ()` เมธอด
วิธี `ClearInvocations ()` ที่แนะนำใน Mockito 2.1 ช่วยให้คุณสามารถล้างจำนวนการเรียกร้องของการเยาะเย้ยโดยไม่ต้องรีเซ็ต stubbing ซึ่งหมายความว่าคุณสามารถใช้ต้นขั้วเดียวกันต่อไปในขณะที่ทำให้มั่นใจได้ว่าการทดสอบแต่ละครั้งเริ่มต้นด้วยกระดานชนวนที่สะอาดเกี่ยวกับการเรียกใช้วิธีการ วิธีนี้มีประโยชน์เมื่อคุณต้องการตรวจสอบการโต้ตอบในสถานการณ์ที่เป็นสถานะหรือเมื่อใช้กรอบการฉีดพึ่งพาการพึ่งพา แต่ควรใช้อย่าง จำกัด โดยทั่วไปแล้วขอแนะนำให้หลีกเลี่ยงการใช้ `clearinvocations ()` เว้นแต่จำเป็นเพราะมันอาจทำให้การทดสอบซับซ้อนขึ้นหากไม่ได้ใช้อย่างรอบคอบ [1] [4] [9]
ความแตกต่างที่สำคัญ
- stubbing: `retenset ()` ลบ stubbing ทั้งหมดต้องการให้คุณต้องสกัดซ้ำจำลองในขณะที่ `clearinvocations ()` ใบไม้จะไม่เหมือนใคร
- การนับจำนวน: ทั้งสองวิธีการเรียกร้องให้มีการนับจำนวน แต่ `รีเซ็ต ()` ทำเช่นนั้นเป็นส่วนหนึ่งของการรีเซ็ตเต็มรูปแบบในขณะที่ `clearinvocations ()` กำหนดเป้าหมายการเรียกร้องจำนวนมาก
- ความซับซ้อนของการทดสอบ: ทั้งสองวิธีสามารถนำไปสู่การทดสอบที่ซับซ้อนมากขึ้นหากไม่ได้ใช้อย่างระมัดระวัง แต่ `reset ()` มีแนวโน้มที่จะทำให้เกิดปัญหามากขึ้นเนื่องจากความจำเป็นในการจำลองการเยาะเย้ยอีกครั้ง
โดยสรุปในขณะที่ทั้งสองวิธีสามารถใช้ในการจัดการสถานะจำลอง `รีเซ็ต ()` มีการรุกรานมากขึ้นและท้อแท้โดยทั่วไปในขณะที่ `clearinvocations ()` เป็นเป้าหมายมากขึ้น แต่ควรใช้อย่างรอบคอบเพื่อรักษาการทดสอบที่สะอาดและมุ่งเน้น
การอ้างอิง:[1] https://softwareengineering.stackexchange.com/questions/188299/is-this-an-appropripreture-use-of-mockitos-reset-method
[2] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearinvocations
[3] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearallcaches
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.clearinvocations
[5] https://stackoverflow.com/questions/19441538/ what-is-the-correct-alternative-to-resetting-a-mock-after-setup-in-mockito
[6] https://reflectioning.io/clean-unit-tests-with-mockito/
[7] https://stackoverflow.com/questions/30081161/mockito-does-verify-method-reboot-number-time
[8] https://javadoc.io/doc/org.mockito/mockito-core/2.25.1/org/mockito/mockito.html
[9] https://wesome.org/mockito-3-lear-invocations
[10] https://github.com/mockk/mockk/discussions/842