Mockito ทดสอบวิธีการโมฆะพ่นข้อยกเว้น


399

ฉันมีวิธีที่มีvoidประเภทผลตอบแทน นอกจากนี้ยังสามารถโยนข้อยกเว้นจำนวนหนึ่งได้ดังนั้นฉันต้องการทดสอบข้อยกเว้นที่ถูกโยนทิ้งไป ความพยายามทั้งหมดล้มเหลวด้วยเหตุผลเดียวกัน:

วิธีการเมื่อ (T) ในประเภท Stubber ไม่สามารถใช้ได้กับข้อโต้แย้ง (เป็นโมฆะ)

ความคิดใดที่ฉันจะได้รับวิธีการโยนข้อยกเว้นที่ระบุ

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

คำตอบ:


706

วงเล็บถูกวางไว้ไม่ดี คุณต้องใช้

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);
                                          ^

และไม่

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
                                                                   ^

นี่คือคำอธิบายในเอกสาร


7
@edwardmlyte ความไม่ลงรอยกันของ Mockito นี้เป็นหนึ่งในเหตุผลที่ฉันเปลี่ยนมาใช้MoxieMocks
Muel

@clement ทั้งสามารถนำมาใช้: docs.mockito.googlecode.com/hg/latest/org/mockito/... การสร้างข้อยกเว้นไม่ได้เกิดขึ้น
JB Nizet

1
@JB Nizet ฉันเห็นด้วยกับคุณโดยสิ้นเชิง แต่ถ้าฉันเขียน doThrow (ข้อยกเว้นใหม่ ()) แทน doThrow (Exception.class) ฉันมีข้อผิดพลาดต่อไปนี้เมื่อฉันเปิดการทดสอบ คาดว่า com.company.project.exception.ElementNotFoundException ยกเว้น แต่มี org.mockito.exceptions.base.MockitoException:
ผ่อนผัน

2
ถามคำถามอื่นด้วยรหัสที่อยู่ภายใต้การทดสอบรหัสของการทดสอบและการติดตามสแต็กที่สมบูรณ์ของข้อยกเว้น
JB Nizet

6
doThrow (ข้อยกเว้นใหม่ ()) เมื่อ (วัตถุ) .voidMethod (ใด ๆ ());
Soumyajit Swain

14

หากคุณเคยสงสัยว่าจะทำอย่างไรโดยใช้รูปแบบ BDD ใหม่ของ Mockito:

willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));

และสำหรับการอ้างอิงในอนาคตอาจต้องมีข้อยกเว้นและไม่ทำอะไรเลย:

willThrow(new Exception()).willNothing().given(mockedObject).methodReturningVoid(...));

1
ขอบคุณสำหรับการโพสต์ที่นี่; ถ้าวิธีการส่งกลับค่า: ที่กำหนด (mockedObject.methodReturningAnObject ()) willThrow (ข้อยกเว้นใหม่ ()); หากวิธีการไม่ส่งคืนอะไร: willThrow (new Exception ()). ได้รับ (mockedObject) .methodReturningVoid (... )); แบบฟอร์มคำอธิบาย javadoc: "Stubbing voids ต้องการวิธีการที่แตกต่างจาก {@link Mockito # เมื่อ (Object)} (หรือ BDDMockito.given) เพราะคอมไพเลอร์ไม่ชอบวิธีที่เป็นโมฆะภายในวงเล็บ ... "
Wolf359
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.