Tôi đang cố gắng thay thế JMock bằng Mockito (1.10.17). Tôi đã thực hiện một số xét nghiệm đơn vị thành công, nhưng bây giờ tôi muốn sử dụng tính năng timeoutjava.lang.VerifyError với Mockito 1.10.17
verify(publisher, timeout(5000)).notifySubscribers(any(BecameMasterMessage.class));
và tôi nhận được ngoại lệ này:
java.lang.VerifyError: (class: org/mockito/internal/verification/VerificationOverTimeImpl, method: verify signature: (Lorg/mockito/internal/verification/api/VerificationData;)V) Incompatible argument to function
at org.mockito.verification.Timeout.<init>(Timeout.java:32)
at org.mockito.verification.Timeout.<init>(Timeout.java:25)
at org.mockito.Mockito.timeout(Mockito.java:2164)
Vấn đề này xảy ra trong IntelliJ và với Maven. Chỉ có 1 phiên bản của Mockito trên classpath. Ngoài ra còn có JMock 2.5.1 trên classpath mà tôi không thể loại bỏ vì 99% các bài kiểm tra đơn vị của tôi vẫn sử dụng JMock tại thời điểm này. Tôi không biết liệu nó có liên quan gì đến nó không.
CẬP NHẬT: Tôi đã thử với JMock 2.6.0 và Hamcrest 1.3 nhưng kết quả là như nhau.
UPDATE 2:
này hoạt động:
Thread.sleep(5000);
verify(m_publisher).notifySubscribers(any(BecameMasterMessage.class));
Và đây không:
verify(publisher, timeout(5000)).notifySubscribers(any(BecameMasterMessage.class));
UPDATE 3: Tôi đã thực hiện một dự án thử nghiệm nhỏ mà có vấn đề chính xác cùng : Xem https://github.com/wimdeblauwe/mockito-verify-problem và chạy nó từ IntelliJ hoặc với Maven.
Đây là câu hỏi "tắt đi và bật lại" ngớ ngẩn, nhưng nó lại hỏi: Bạn đã dọn dẹp các tạo phẩm biên dịch chưa? Thậm chí nếu chỉ có một phiên bản của Mockito trên classpath, VerificationOverTimeImpl mới được đổi tên từ VerificationWithTimeoutImpl 1.9.5 và nếu bạn đã từng sử dụng 1.9.5 hoặc sớm hơn một số tệp lớp học kéo dài có thể đang ném mọi thứ. –
@JeffBowman Tôi đã làm một 'mvn clean install' để chắc chắn rằng đó không phải là vấn đề. Bây giờ tôi đã chỉnh sửa câu hỏi với một liên kết đến một dự án mẫu cho thấy vấn đề. –