Câu trả lời của Tomasz Nurkiewicz dường như không nói lên toàn bộ câu chuyện!
Phiên bản NB Mockito: 1.10.19.
Tôi rất là một Mockito newb, vì vậy không thể giải thích hành vi sau: nếu có một chuyên gia ngoài kia có thể cải thiện câu trả lời này, xin vui lòng.
Phương pháp trong câu hỏi ở đây getContentStringValue
, là KHÔNG final
và KHÔNG static
.
Dòng này gọi phương thức ban đầu getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
Dòng này không gọi phương thức ban đầu getContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
Vì những lý do mà tôi không thể trả lời, sử dụng isA()
nguyên nhân hành vi "không gọi phương thức" dự định (?) Sẽ doReturn
thất bại.
Hãy xem các chữ ký phương thức liên quan ở đây: cả hai đều là static
phương pháp Matchers
. Cả hai đều được Javadoc nói sẽ quay trở lại null
, điều này hơi khó khăn để tự mình quay đầu lại. Có lẽ Class
đối tượng được truyền khi tham số được kiểm tra nhưng kết quả không bao giờ được tính toán hoặc loại bỏ. Cho rằng null
có thể đại diện cho bất kỳ lớp nào và bạn đang hy vọng phương thức giả định không được gọi, không thể là chữ ký của isA( ... )
và any( ... )
chỉ trả về null
chứ không phải là một tham số chung * <T>
?
Dù sao:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
Tài liệu API không cung cấp bất kỳ manh mối nào về việc này. Dường như cũng nói rằng nhu cầu đối với hành vi "không gọi phương thức" như vậy là "rất hiếm". Cá nhân tôi sử dụng kỹ thuật này mọi lúc : thông thường tôi thấy rằng việc chế giễu bao gồm một vài dòng "dựng cảnh" ... tiếp theo là gọi một phương thức sau đó "diễn ra" cảnh trong bối cảnh giả mà bạn đã dàn dựng .. và trong khi bạn đang thiết lập cảnh quan và đạo cụ, điều cuối cùng bạn muốn là các diễn viên bước vào sân khấu bên trái và bắt đầu diễn xuất trái tim của họ ...
Nhưng đây là cách vượt quá mức lương của tôi ... Tôi mời những lời giải thích từ bất kỳ linh mục cao cấp nào của Mockito ...
* là "tham số chung" đúng thuật ngữ?