Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon อะไรคือความแตกต่างระหว่าง @GenerAtemocks และ @GenerAtenicemocks


อะไรคือความแตกต่างระหว่าง @GenerAtemocks และ @GenerAtenicemocks


`@generatemocks` และ`@@generatenicemocks 'คำอธิบายประกอบใน mockito ใช้เพื่อสร้างคลาสจำลองสำหรับการทดสอบหน่วยในแอปพลิเคชัน DART และ FLUTTER ในขณะที่คำอธิบายประกอบทั้งสองมีจุดประสงค์หลักเดียวกันพวกเขาแตกต่างกันอย่างมีนัยสำคัญในพฤติกรรมของพวกเขาเมื่อจัดการการเรียกวิธีการที่ไม่ได้รับการเรียก

@GenerAtemocks

- พฤติกรรมสำหรับวิธีการ unstubbed: เมื่อมีการเรียกวิธีการบนวัตถุจำลองที่สร้างขึ้นด้วย `@generatemocks` และไม่มีการกำหนดต้นขั้วสำหรับวิธีการนั้น Mockito จะโยนข้อยกเว้น พฤติกรรมนี้ช่วยให้มั่นใจได้ว่าคุณจะกำหนดต้นขั้วอย่างชัดเจนสำหรับวิธีการทั้งหมดที่คาดว่าจะถูกเรียกในระหว่างการทดสอบเพื่อช่วยจับการกำกับดูแลที่มีศักยภาพในการตั้งค่าการทดสอบ

- การใช้งาน: โดยทั่วไปแล้วคำอธิบายประกอบนี้จะใช้เมื่อคุณต้องการควบคุมพฤติกรรมของการเยาะเย้ยอย่างเข้มงวดเพื่อให้แน่ใจว่าการโทรวิธีการที่ไม่คาดคิดจะถูกตั้งค่าสถานะเป็นข้อผิดพลาดทันที

- สถานะการเสื่อมสภาพ: `@generatemocks` ได้รับการพิจารณาว่ามีการแนะนำน้อยกว่าเมื่อเทียบกับ`@generatenicemocks` เนื่องจากพฤติกรรมที่เข้มงวดซึ่งอาจนำไปสู่รหัสทดสอบ verbose มากขึ้นหากไม่ได้จัดการอย่างระมัดระวัง

@generatenicemocks

- พฤติกรรมสำหรับวิธีการ unstubbed: ในทางตรงกันข้ามการเยาะเย้ยที่สร้างขึ้นด้วย `@generatenicemocks` จะส่งคืนค่าเริ่มต้นค่าทางกฎหมายสำหรับประเภทผลตอบแทนของวิธีการเมื่อมีการเรียกวิธีการ unstubbed ค่าเริ่มต้นนี้ไม่ได้มีไว้สำหรับใช้ในตรรกะการทดสอบ แต่ทำหน้าที่ป้องกันข้อผิดพลาดรันไทม์เนื่องจากค่าว่างหรือค่าหายไป

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

- คุณสมบัติเพิ่มเติม: `@generatenicemocks 'อนุญาตให้` mockspec' ในรายการอาร์กิวเมนต์เท่านั้นให้ความยืดหยุ่นมากขึ้นในการปรับแต่งคลาสจำลองที่สร้างขึ้น ตัวอย่างเช่นคุณสามารถระบุชื่อที่กำหนดเองสำหรับคลาสจำลองโดยใช้พารามิเตอร์ `AS` ใน` MockSpec '

ความแตกต่างที่สำคัญ

1. การจัดการวิธีการ unstubbed: ความแตกต่างที่สำคัญที่สุดคือวิธีการที่แต่ละคำอธิบายประกอบการเรียกใช้โดยไม่ต้องมีต้นขั้วที่ชัดเจน `@generatemocks` โยนข้อยกเว้นในขณะที่`@generatenicemocks 'ส่งคืนค่าเริ่มต้น

2. ความเรียบง่ายของรหัสและความทนทาน: `@generatenicemocks` โดยทั่วไปจะนำไปสู่รหัสทดสอบที่ง่ายขึ้นและมีประสิทธิภาพมากขึ้นโดยการลดความจำเป็นในการสต็อกอย่างละเอียดถี่ถ้วน

3. การปรับแต่ง: `@generatenicemocks` นำเสนอตัวเลือกการปรับแต่งมากขึ้นผ่าน` mockspec` ซึ่งอนุญาตให้ใช้ชื่อคลาสจำลองที่กำหนดเองและการกำหนดค่าขั้นสูงอื่น ๆ

โดยสรุป `@generatenicemocks` โดยทั่วไปเป็นที่ต้องการสำหรับความสามารถในการลดความซับซ้อนของรหัสทดสอบและลดข้อผิดพลาดเนื่องจากวิธีการที่ไม่ได้รับการบดขยี้ในขณะที่`@generatemocks 'ให้วิธีการที่เข้มงวดซึ่งอาจเป็นประโยชน์ในสถานการณ์เฉพาะที่จำเป็นต้องมีการควบคุมพฤติกรรมจำลองอย่างชัดเจน [1]

การอ้างอิง:
[1] https://www.amaysim.technology/blog/flutter-test-mockito-generatemocks-vs-generatenicemocks
[2] https://www.reddit.com/r/golang/comments/ua0hps/generated_vs_handwritten_mocks/
[3] https://blog.logrocket.com/unit-testing-flutter-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotations/generatenicemocks-class.html
[5] https://plugins.jetbrains.com/plugin/23513-generate-flutter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not-not-generated-mock-class
[7] https://github.com/dart-lang/mockito/blob/master/null_safety_readme.md
[8] https://github.com/dart-lang/mockito/issues/367
[9] https://github.com/dart-lang/mockito/issues/422
[10] https://stackoverflow.com/questions/74406977/the-generatemocks-annotation-contains-a-class- ซึ่งเป็นที่รู้จัก
[11] https://pub.dev/packages/mockito