Câu trả lời:
Có một cách an toàn loại: sử dụng ArgumentMatchers.any()
và đủ điều kiện với loại:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matchers
thực sự không được chấp nhận, nhưng ArgumentMatchers
đã làm việc
Sử dụng Java 8, bạn có thể chỉ cần sử dụng any()
(giả sử nhập tĩnh) mà không cần tham số hoặc tham số loại vì suy luận kiểu nâng cao. Bây giờ trình biên dịch biết từ loại đích (loại đối số phương thức) mà bạn thực sự muốn nói Matchers.<AsyncCallback<ResponseX>>any()
, đó là giải pháp tiền Java 8.
any()
phù hợp AsyncCallback<AnyOtherType>
?
AsyncCallback<AnyOtherType>
thậm chí không nên biên dịch nếu loại đối số là 'AsyncCallback <FeedbackX>'.
when(x.y(any())).thenAnswer(...)
ví dụ, nơi y
là public <T> T y(AsyncCallback<T> arg)
. Có lẽ sẽ tốt hơn nếu kiểm tra loại trong câu trả lời, nếu đó là những gì cần thiết?
isA()
. Nếu đối tượng giữ một Class
đối tượng tương ứng với loại và giao diện hiển thị điều này, tôi đoán bạn có thể kiểm tra nó trong một công cụ đối sánh tùy chỉnh. Hoặc ví dụ trong trường hợp Collection
bạn có thể kiểm tra loại phần tử.
Matchers
đã được thay thế bằng ArgumentMatchers
trong Mockito v2
Tôi đã phải áp dụng các cơ chế sau đây để cho phép khái quát:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Hy vọng điều này sẽ giúp được ai đó.
Bạn chỉ có thể truyền nó, thêm cảnh báo triệt tiêu nếu bạn muốn:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Nếu Java cho phép chung chung 'chung', họ có thể có một phương thức như thế này, đó là những gì bạn đang tìm kiếm
private static <T, E> T<E> mock(Class<T<E>> clazz)
You cannot use argument matchers outside of verification or stubbing.
@SuppressWarnings
: pre-java 8, nếu bạn định gán nó cho một biến riêng biệt, bạn chỉ có thể sử dụng any()
như trong câu trả lời của theINtoy. Bây giờ với java 8, any()
có thể được sử dụng nội tuyến mà không cần một bài tập riêng.
Tôi gặp vấn đề tương tự khi sử dụng Spring Example
:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
Tại đây, bạn phải sử dụng trình độ chuyên môn, phương pháp b / c findAll có thể có nhiều loại, như Sort
và Iterable
. Tất nhiên bạn cũng có thể sử dụng Mockito.any(Example.class)
với cảnh báo an toàn loại.