วิธีจับคู่ null ที่ส่งผ่านไปยังพารามิเตอร์ของ Class <T> กับ Mockito


84

ฉันมีวิธีการดังนี้:

public <T> method(String s, Class<T> t) {...}

ฉันต้องตรวจสอบว่าnullส่งผ่านไปยังอาร์กิวเมนต์ที่สองเมื่อใช้ตัวจับคู่กับพารามิเตอร์อื่นฉันได้ทำสิ่งนี้แล้ว:

@SuppressWarnings("unchecked")
verify(client).method(eq("String"), any(Class.class));

แต่มีวิธีที่ดีกว่า (โดยไม่มีคำเตือนการระงับ) หรือไม่? Tแสดงถึงประเภทการส่งคืนของวิธีการอื่น ๆ ซึ่งบางครั้งvoidและในกรณีเหล่านี้nullจะถูกส่งเข้ามา


คุณลองnull(แทนany(Class.class)) แล้วหรือยัง?
Andy

1
ปัญหาคือเมื่อคุณใช้ตัวจับคู่สำหรับพารามิเตอร์อื่น - คุณต้องใช้ตัวจับคู่ทั้งหมด
ว่างเปล่า

คำตอบ:


40

อัปเดตจากคำตอบของ David Wallace:

ณ วันที่ 2016-12, Java 8 และ Mockito 2.3,

public static <T> T isNull(Class<T> clazz)

คือเลิกและจะถูกลบออกใน Mockito 3.0

ใช้

public static <T> T isNull()

แทน


4
นี้จะไม่ทำงาน 100% ตอนนี้ผมต้องการที่จะโยนชั้นเรียนเช่นดังนั้นแทน(Integer) isNull() isNull( Integer.class )
Henrique de Sousa

4
ไวยากรณ์ที่จะหลีกเลี่ยงไม่ต้องใช้นักแสดงนี่คือorg.mockito.Mockito.<String>isNull()
เดล

143

Mockito มีตัวisNullจับคู่ซึ่งคุณสามารถส่งผ่านในชื่อชั้นเรียนได้ ดังนั้นหากคุณจำเป็นต้องใช้ร่วมกับผู้จับคู่คนอื่นสิ่งที่ถูกต้องที่ต้องทำคือ

verify(client).method(eq("String"),isNull(Class<?>.class));

ตอนนี้เลิกใช้แล้วดูคำตอบด้านล่างสำหรับวิธีการใหม่ - https://stackoverflow.com/a/41250852/1348


7
(String) isNull()มันควรจะตั้งข้อสังเกตว่าสำหรับสตริงคุณจำเป็นต้องใช้
Mike Rylander

2
ใช่. isNull(String.class)และ(String) isNull()เทียบเท่า ไปกับสิ่งที่เหมาะสมกับคุณมากกว่า
Dawood ibn Kareem

@mikerodent ขอบคุณสำหรับการแก้ไขที่แนะนำ คุณมีสิทธิ์อย่างแน่นอน แต่คุณควรโพสต์คำแนะนำของคุณเป็นคำตอบใหม่แทนที่จะแก้ไขของฉัน ดังนั้นฉันจึงปฏิเสธการแก้ไขของคุณแม้ว่าฉันจะเห็นด้วยกับการแก้ไขก็ตาม
Dawood ibn Kareem

1
ตกลง! ไม่ค่อยเข้าใจว่าทำไม แต่ฉันขอน้อมรับความรู้ที่เหนือกว่าของคุณเกี่ยวกับโปรโตคอล SO!
ไมค์หนู

1
ฉันไม่เข้าใจว่าทำไมเหมือนกัน แน่นอนว่าการเปลี่ยนแปลง api ที่กำลังจะเกิดขึ้นควรจะสะท้อนให้เห็นอย่างใดในคำตอบนี้ไม่มีใครเลื่อนลง :)
ว่างเปล่า

20

สิ่งนี้ใช้ได้กับฉัน:

verify(client).method(eq("String"), eq((Class<?>) null));

2
ขอบคุณ! ฉันไม่เคยคิดเกี่ยวกับการหล่อเป็นโมฆะ ... ลาก่อน @SuppressWarnings
ว่างเปล่า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.