2012-05-09 26 views

Trả lời

208

Đối với Java 8 trở lên, thật dễ dàng:

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

Đối với Java 7 trở xuống, biên dịch cần một chút giúp đỡ. Sử dụng anyListOf(Class<T> clazz):

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

Lưu ý: điều này không được chấp nhận trong Mockito 2. * và sẽ bị xóa trong Mockito 3. Không được chấp nhận vì trình biên dịch Java 8 có thể suy ra loại này ngay bây giờ. – Kip

+0

@Kip cảm ơn tôi đã cập nhật câu trả lời – artbristol

+0

@artbristol bạn có biết nếu với anySet() sẽ hoạt động giống như anyList() không? Tôi đang ở trong Java 8 và một cảnh báo được đưa ra trong Eclipse IDE –

10

Ngoài anyListOf trên, bạn luôn có thể xác định một cách rõ ràng Generics sử dụng cú pháp sau:

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

Java 8 mới cho phép loại suy luận dựa trên các thông số, vì vậy nếu bạn đang sử dụng Java 8, điều này có thể làm việc tốt:

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

Hãy nhớ rằng không phải any() cũng không anyList() w bị áp dụng bất kỳ séc nào, bao gồm kiểm tra loại hoặc séc. Trong Mockito 2.x, any(Foo.class) đã được thay đổi thành "bất kỳ instanceof Foo", nhưng any() vẫn có nghĩa là "bất kỳ giá trị nào bao gồm null".

LƯU Ý: Ở trên đã chuyển sang ArgumentMatchers trong các phiên bản mới hơn của Mockito, để tránh va chạm tên với org.hamcrest.Matchers. Các phiên bản Mockito cũ hơn sẽ cần tiếp tục sử dụng org.mockito.Matchers như trên.

+2

'' 'Matchers.any()' '' rất thuận tiện! – MBach

+0

Đối sánh hiện không còn được chấp nhận, đây là thông tin từ mockito "Sử dụng đối số tham chiếu. Lớp này hiện không còn được dùng để tránh xung đột với lớp Hamcrest org.hamcrest.Matchers. Lớp này có thể sẽ bị xóa trong phiên bản 3.0". https://static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/Matchers.html – oddmeter

+0

@JeffBowman không đổ mồ hôi, chỉ để lại ghi chú cho người khác :) – oddmeter

Các vấn đề liên quan