Mockito: จับคู่ลิสต์ข้อมูลทั่วไป


คำตอบ:


279

สำหรับ Java 8 ขึ้นไปมันง่าย:

when(mock.process(Matchers.anyList()));

สำหรับ Java 7 และต่ำกว่าคอมไพเลอร์ต้องการความช่วยเหลือเล็กน้อย การใช้anyListOf(Class<T> clazz):

when(mock.process(Matchers.anyListOf(Bar.class)));

16
หมายเหตุ: สิ่งนี้ถูกคัดค้านใน Mockito 2 * และจะถูกลบใน Mockito 3 เลิกใช้แล้วเนื่องจากคอมไพเลอร์ Java 8 สามารถอนุมานชนิดได้ในขณะนี้
กี

@artbristol คุณรู้ไหมว่าถ้ามี anySet () ควรทำงานเช่นเดียวกับ anyList ()? ฉันอยู่ใน Java 8 และมีการส่งสัญญาณเตือนใน Eclipse IDE
Fernando Fradegrada

1
anyListOfดีกว่าที่จะใช้ แม้ว่าจะใช้anyListงานได้แต่ก็ส่งเสียงเตือน
balki

3
anyListOfเลิกใช้แล้วดังนั้นจะดีกว่าที่จะไม่ใช้ ตัวอย่างสำหรับ Java 8 ไม่ทำงานในกรณีที่เมธอดโอเวอร์โหลดตัวอย่างเช่นถ้าคุณมีวิธีรับ 2 รายการที่แตกต่างกัน: List<DBEntity>และList<DTO>ฉันได้แก้ไขปัญหานี้โดยใช้ArgumentMatchersกับ generic:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
edufinn

14

นอกเหนือจากanyListOfข้างต้นคุณสามารถระบุ generics อย่างชัดเจนโดยใช้ไวยากรณ์นี้:

when(mock.process(Matchers.<List<Bar>>any(List.class)));

Java 8 อนุญาตการอนุมานชนิดใหม่ตามพารามิเตอร์ดังนั้นหากคุณใช้ Java 8 สิ่งนี้อาจใช้ได้เช่นกัน

when(mock.process(Matchers.any()));

โปรดจำไว้ว่าค่าany()มิได้anyList()จะใช้การตรวจสอบใด ๆ รวมทั้งประเภทหรือ null การตรวจสอบ ใน Mockito 2.x any(Foo.class)เปลี่ยนเป็นหมายถึง "any instanceofFoo" แต่any()ยังคงหมายถึง "ค่าใด ๆ รวมถึงnull"

หมายเหตุ: ข้างต้นได้เปลี่ยนไปArgumentMatchersในรุ่นใหม่ของ Mockito org.hamcrest.Matchersเพื่อหลีกเลี่ยงการปะทะกันกับชื่อ Mockito เวอร์ชันเก่าจะต้องใช้ต่อorg.mockito.Matchersไป


4
Matchers.any()สะดวกมาก!
MBach

Matchers เลิกใช้แล้วและนี่คือข้อมูลจาก mockito "ใช้ ArgumentMatchers ตอนนี้คลาสนี้เลิกใช้แล้วเพื่อหลีกเลี่ยงการปะทะกันของชื่อด้วยคลาส Hamcrest org.hamcrest.Matchers คลาสนี้น่าจะถูกลบในเวอร์ชัน 3.0" static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/ …
oddmeter

@oddmeter เปลี่ยนแปลงแล้ว
Jeff Bowman

5

ก่อน Java 8 (เวอร์ชัน 7 หรือ 6) ฉันใช้วิธีการใหม่ ArgumentMatchers.anyList:

import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.