Mockito: Liệt kê các trận đấu với tướng


167

Mockito cung cấp:

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

Làm thế nào để tránh cảnh báo nếu processmất một List<Bar>thay thế?

Câu trả lời:


279

Đố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, trình biên dịch cần một chút trợ giúp. Sử dụng anyListOf(Class<T> clazz):

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

16
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 dùng nữa vì trình biên dịch Java 8 có thể suy ra kiểu này ngay bây giờ.
Kip

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

1
Tốt hơn để sử dụng anyListOf. Mặc dù anyListhoạt động, nó phát ra một cảnh báo.
balki

3
anyListOfkhông được dùng nữa, vì vậy tốt hơn là KHÔNG sử dụng nó. Ví dụ cho Java 8 không hoạt động trong trường hợp quá tải phương thức, ví dụ: nếu bạn có một phương thức chấp nhận 2 danh sách khác nhau: List<DBEntity>List<DTO>tôi đã giải quyết vấn đề này bằng cách sử dụng ArgumentMatcherschung:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
edufinn

14

Ngoài ra anyListOf, bạn luôn có thể chỉ định rõ ràng khái quát bằng cách sử dụng cú pháp này:

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

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

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

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

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


4
Matchers.any()rất tiện lợi
MBach

Các trình so khớp hiện không được chấp nhận, đây là thông tin từ mockito "Sử dụng ArgumentMatchers. Lớp này hiện không được chấp nhận để tránh xung đột tên 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." static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/ đá
lẻmeter

@oddmeter Thay đổi được thực hiện.
Jeff Bowman

5

Trước Java 8 (phiên bản 7 hoặc 6) tôi sử dụng phương thức mới ArgumentMatchers.anyList:

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

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.