Cách so khớp null được truyền vào tham số của Class <T> với Mockito


84

Tôi có các phương pháp như sau:

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

Rằng tôi cần kiểm tra nullđối số được chuyển đến đối số thứ hai khi sử dụng đối sánh cho các tham số khác, tôi đã thực hiện điều này:

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

Nhưng có cách nào tốt hơn (không có cảnh báo ngăn chặn)? Tđại diện cho kiểu trả về của một số phương thức khác, đôi khi voidvà trong những trường hợp nullnày được chuyển vào.


Bạn đã thử null(thay vì any(Class.class)) chưa?
Andy

1
Vấn đề là khi bạn sử dụng trình so khớp cho các tham số khác - bạn phải sử dụng trình so khớp cho tất cả
trống

Câu trả lời:


40

Cập nhật từ câu trả lời của David Wallace:

Kể từ năm 2016-12, Java 8 và Mockito 2.3,

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

không được dùng nữa và sẽ bị xóa trong Mockito 3.0

sử dụng

public static <T> T isNull()

thay thế


4
Điều này sẽ không hoạt động 100%, bây giờ tôi cần truyền lớp, giống như vậy (Integer) isNull()thay vì isNull( Integer.class ).
Henrique de Sousa

4
cú pháp để tránh yêu cầu diễn viên ở đây làorg.mockito.Mockito.<String>isNull()
Del

143

Mockito có một isNullkhớp , nơi bạn có thể vượt qua trong tên của lớp. Vì vậy, nếu bạn cần sử dụng nó với các trình so khớp khác, điều chính xác cần làm là

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

Tính năng này hiện không được dùng nữa, hãy xem câu trả lời bên dưới cho phương pháp mới - https://stackoverflow.com/a/41250852/1348


7
Cần lưu ý rằng đối với chuỗi bạn cần sử dụng (String) isNull().
Mike Rylander

2
Vâng. isNull(String.class)(String) isNull()tương đương. Đi với cái nào có ý nghĩa hơn đối với bạn.
Dawood ibn Kareem

@mikerodent Cảm ơn bạn đã đề xuất chỉnh sửa. Bạn hoàn toàn đúng. Nhưng có lẽ bạn nên đăng đề xuất của mình như một câu trả lời mới, thay vì chỉnh sửa của tôi. Vì vậy, tôi đã từ chối chỉnh sửa của bạn, mặc dù tôi hoàn toàn đồng ý với nó.
Dawood ibn Kareem

1
ĐỒNG Ý! Không hiểu tại sao, nhưng tôi cúi đầu trước kiến ​​thức vượt trội của bạn về giao thức SO!
loài gặm nhấm mike

1
Tôi cũng không hiểu tại sao. Chắc chắn một thay đổi api sắp xảy ra nên được phản ánh bằng cách nào đó trong câu trả lời này, không ai cuộn xuống :)
blank

20

Điều này phù hợp với tôi:

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

2
Cảm ơn! Tôi không bao giờ nghĩ về việc truyền null ... tạm biệt @SuppressWarnings
blank
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.