คำตอบของ Tomasz Nurkiewicz ดูเหมือนจะไม่บอกเรื่องราวทั้งหมด!
รุ่น NB Mockito: 1.10.19
ฉันเป็น Mockito newb เป็นอย่างมากดังนั้นจึงไม่สามารถอธิบายพฤติกรรมดังต่อไปนี้: หากมีผู้เชี่ยวชาญที่สามารถปรับปรุงคำตอบนี้ได้โปรดอย่าลังเล
วิธีการในคำถามที่นี่ที่getContentStringValue
เป็นไม่ได้ final
และไม่ได้ static
บรรทัดนี้เรียกวิธีการเดิมgetContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
บรรทัดนี้ไม่ได้เรียกวิธีการเดิมgetContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
สำหรับเหตุผลที่ฉันไม่สามารถตอบได้การใช้isA()
ทำให้พฤติกรรมที่ตั้งใจ (?) "ไม่เรียกใช้เมธอด" ของที่doReturn
จะล้มเหลว
ดู Let 's ที่ลายเซ็นวิธีการที่เกี่ยวข้องกับที่นี่: พวกเขาเป็นทั้งวิธีการstatic
Matchers
ทั้งคู่กล่าวโดย Javadoc ที่จะกลับมาnull
ซึ่งเป็นเรื่องยากเล็กน้อยที่จะนำพาคุณไปรอบ ๆ สันนิษฐานว่าClass
วัตถุที่ส่งผ่านขณะที่พารามิเตอร์ถูกตรวจสอบ แต่ผลลัพธ์ไม่เคยถูกคำนวณหรือทิ้ง ระบุว่าnull
สามารถยืนสำหรับการเรียนใด ๆ และที่คุณกำลังหวังสำหรับวิธีการเยาะเย้ยไม่ได้ที่จะเรียกว่าไม่สามารถลงลายมือชื่อผู้isA( ... )
และany( ... )
เพียงแค่กลับมาnull
แทนที่จะเป็นพารามิเตอร์ทั่วไป * <T>
?
อย่างไรก็ตาม:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
เอกสาร API ไม่ได้ให้เงื่อนงำใด ๆ เกี่ยวกับเรื่องนี้ นอกจากนี้ยังดูเหมือนว่าต้องการพฤติกรรมดังกล่าว "ไม่เรียกวิธี" คือ "หายากมาก" โดยส่วนตัวแล้วฉันใช้เทคนิคนี้ตลอดเวลา : โดยทั่วไปแล้วฉันพบว่าการเยาะเย้ยนั้นเกี่ยวข้องกับสองสามบรรทัดที่ "กำหนดฉาก" ... ตามด้วยการเรียกวิธีการที่ "เล่น" ฉากในบริบทจำลองซึ่งคุณแสดงไว้ .. และในขณะที่คุณกำลังจัดฉากและอุปกรณ์ประกอบฉากสิ่งสุดท้ายที่คุณต้องการคือให้นักแสดงเข้าสู่เวทีด้านซ้ายและเริ่มแสดงหัวใจของพวกเขาออกไป ...
แต่นี่เป็นวิธีที่เกินระดับการจ่ายเงินของฉัน ... ฉันเชิญคำอธิบายจากมหาปุโรหิต Mockito ที่ผ่านมา ...
* คือ "พารามิเตอร์ทั่วไป" เป็นคำที่ถูกต้องหรือไม่