Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon วิธีการรีเซ็ตของ Mockito เปรียบเทียบกับห้องสมุดที่เยาะเย้ยอื่น ๆ ได้อย่างไร


วิธีการรีเซ็ตของ Mockito เปรียบเทียบกับห้องสมุดที่เยาะเย้ยอื่น ๆ ได้อย่างไร


วิธีการ `retes ()` ของ Mockito เป็นคุณสมบัติที่ช่วยให้คุณรีเซ็ตวัตถุจำลองเพื่อให้สามารถนำกลับมาใช้ใหม่ได้ อย่างไรก็ตามการใช้งานโดยทั่วไปนั้นไม่ได้รับการสนับสนุนจากนักพัฒนาและผู้ใช้ Mockito เนื่องจากสามารถระบุการทดสอบหรือรหัสที่ออกแบบมาไม่ดีซึ่งซับซ้อนเกินไปและยากที่จะทดสอบอย่างหมดจด [7] [9] แต่วิธีการที่แนะนำคือการสร้างการเยาะเย้ยใหม่สำหรับแต่ละวิธีการทดสอบเพื่อให้แน่ใจว่าเป็นอิสระและความชัดเจนในการทดสอบ [7] [9]

เปรียบเทียบกับห้องสมุดเยาะเย้ยอื่น ๆ

1. JMOCK2: แตกต่างจาก Mockito, JMOCK2 ใช้บริบทเพื่อจัดการความคาดหวังและข้อมูลจำลองซึ่งสร้างขึ้นใหม่สำหรับแต่ละวิธีการทดสอบ ซึ่งหมายความว่า JMock2 ไม่จำเป็นต้องมีการรีเซ็ตอย่างชัดเจนเช่น Mockito ทำ [10] วิธีการของ JMOCK2 ช่วยรักษาการแยกการทดสอบโดยไม่จำเป็นต้องรีเซ็ตการจำลองด้วยตนเอง

2. Easymock: Easymock มักจะไม่จำเป็นต้องใช้วิธีการรีเซ็ต มันถูกออกแบบมาเพื่อสร้างวัตถุจำลองใหม่สำหรับการทดสอบแต่ละครั้งคล้ายกับการฝึกฝนที่แนะนำกับ Mockito Szczepan Faber นักพัฒนา Mockito กล่าวว่าเขาไม่เคยต้องการคุณสมบัติการรีเซ็ตในขณะที่ใช้ EasyMock [8]

3. Mockito กับห้องสมุดอื่น ๆ : โดยทั่วไปห้องสมุดเยาะเย้ยอื่น ๆ เช่น JMOCK2 และ EasyMock ส่งเสริมวิธีการทดสอบที่สะอาดโดยการจัดการสถานะจำลองโดยอัตโนมัติหรือสนับสนุนการสร้างการเยาะเย้ยใหม่สำหรับการทดสอบแต่ละครั้ง วิธีการ `reteset ()` ของ Mockito เป็นข้อยกเว้นมากกว่าบรรทัดฐานในการเยาะเย้ยเฟรมเวิร์ก

แนวทางปฏิบัติที่ดีที่สุด

- หลีกเลี่ยงการใช้ `รีเซ็ต ()`: เว้นแต่จำเป็นอย่างยิ่งเช่นเมื่อมีการจำลองการจำลองโดยคอนเทนเนอร์และไม่สามารถสร้างใหม่สำหรับการทดสอบแต่ละครั้งขอแนะนำให้หลีกเลี่ยงการใช้ `รีเซ็ต ()` ให้มุ่งเน้นไปที่การสร้างการทดสอบที่ง่ายและมุ่งเน้นด้วยการเยาะเย้ยใหม่สำหรับแต่ละสถานการณ์ [7] [9]

- ใช้ `ClearInvocations ()`: หากคุณต้องการล้างการโต้ตอบโดยไม่ต้องรีเซ็ตการตับให้ใช้ `ClearInvocations ()` วิธีนี้ช่วยให้คุณสามารถรักษาสตับได้ในขณะที่ล้างการโต้ตอบใด ๆ ที่บันทึกไว้ซึ่งอาจเป็นประโยชน์ในบางสถานการณ์ [5]

- รหัส refactor สำหรับความสามารถในการทดสอบ: หากคุณพบว่าตัวเองต้องการใช้ `รีเซ็ต ()` บ่อยครั้งอาจบ่งบอกว่ารหัสของคุณจะได้รับประโยชน์จากการปรับโครงสร้างใหม่เพื่อให้สามารถทดสอบได้มากขึ้น สิ่งนี้อาจเกี่ยวข้องกับการทำลายวิธีการที่ซับซ้อนหรือปรับปรุงการฉีดพึ่งพา [9]

โดยสรุปในขณะที่ Mockito ให้วิธี `รีเซ็ต ()` การใช้งานโดยทั่วไปจะไม่สนับสนุนในการสร้าง mocks ใหม่สำหรับการทดสอบแต่ละครั้ง ห้องสมุดเยาะเย้ยอื่น ๆ มักจะส่งเสริมการปฏิบัติที่คล้ายกันโดยเน้นการทดสอบที่สะอาดและเป็นอิสระเกี่ยวกับการจัดการจำลองที่ซับซ้อน

การอ้างอิง:
[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://groups.google.com/g/mockito/c/y_ihdc8lx_m
[3] https://www.vogella.com/tutorials/mockito/article.html
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.reset
[5] https://www.toptal.com/java/a-guide-to-ereryday-mockito
[6] https://www.jrebel.com/blog/mock-unit-testing-with-mockito
[7] https://stackoverflow.com/questions/34412106/appropropreate-use-of-mockito-reset
[8] https://groups.google.com/g/mockito/c/_vxg33tlzl8
[9] https://softwareengineering.stackexchange.com/questions/188299/is-this-an-approprive-use-us-of-mockitos-reset-method
[10] https://stackoverflow.com/questions/18164123/how-to-to-up-mocks-in-spring-tests-when-using-mockito