Tôi đang sử dụng mockito. Tôi muốn ném RuntimeException
khi phương thức chưa được cài đặt được gọi. Có cách nào để thực hiện việc này không?ném RuntimeException khi gọi phương thức chưa được khóa
Trả lời
Bạn có thể đặt câu trả lời mặc định cho mô hình. Tất cả các phương thức không được phân tích sẽ sử dụng câu trả lời mặc định này.
public void testUnstubbedException() {
// Create a mock with all methods throwing a RuntimeException by default
SomeClass someClass = mock(SomeClass .class, new RuntimeExceptionAnswer());
doReturn(1).when(someClass).getId(); // Must use doReturn
int id = someClass.getId(); // Will return 1
someClass.unstubbedMethod(); // Will throw RuntimeException
}
public static class RuntimeExceptionAnswer implements Answer<Object> {
public Object answer(InvocationOnMock invocation) throws Throwable {
throw new RuntimeException (invocation.getMethod().getName() + " is not stubbed");
}
}
Lưu ý rằng bạn không thể sử dụng when
với chức năng này, vì phương pháp này được gọi là trước when
(How does mockito when() invocation work?) và nó sẽ ném một RuntimeException
trước khi mô hình chuyển sang chế độ stubbing.
Vì vậy, bạn phải sử dụng doReturn
để làm việc này.
Bạn thử toàn bộ lớp và kết quả là tất cả các phương thức sẽ trả về giá trị rỗng.
Sau đó, bạn có thể sử dụng doReturn(...)
để thay đổi hành vi đó. Tương tự, bạn có thể sử dụng doThrow(...)
để thực hiện (như tôi chỉ nhớ void
) các phương thức ném ngoại lệ.
Điều đó có trả lời câu hỏi của bạn không?
Tôi nghĩ rằng anh ta muốn chắc chắn rằng tất cả các phương pháp được chế giễu, ví dụ như Mockito ném một ngoại lệ nếu một phương pháp chưa được chế giễu –
Có! Nhưng tôi muốn đảm bảo rằng tất cả các phương thức sẽ được gọi sẽ được mô phỏng. – Hlib
Tất cả các phương thức trong một lớp được mô phỏng _are_ được mô phỏng - theo định nghĩa. –
Cách tốt nhất để làm điều này là với các phương pháp tĩnh verifyNoMoreInteractions
và ignoreStubs
. Hãy gọi những điều này sau phần "hành động" của bài kiểm tra của bạn; và bạn sẽ nhận được một thất bại nếu bất kỳ phương pháp unstubbed được gọi nhưng không được xác minh.
verifyNoMoreInteractions(ignoreStubs(myMock));
Điều này được mô tả tại https://static.javadoc.io/org.mockito/mockito-core/2.8.47/org/mockito/Mockito.html#ignore_stubs_verification mặc dù tôi tin rằng ví dụ mã hiện có chứa lỗi.
+1 Tôi thích giải pháp này để khai thác. –
Điều này không giúp ích gì nếu thử nghiệm của bạn đã bị lỗi trước thời điểm này do sự thiếu cân nhắc gây ra bởi một cuộc gọi đến một phương thức chưa được khóa. –
Tuyệt vời. Tự hỏi tại sao điều này ẩn trong tài liệu. –
- 1. Các phương thức có nên ném RuntimeException cho biết nó trong chữ ký phương thức?
- 2. JDK 1.7 Phương thức `addSuppressed()` có thể ném được
- 3. Phương thức 'getSupportFragmentManager()' chưa được loại trừ
- 4. Phương thức lớp hoạt động khác khi được gọi là phương thức thể hiện?
- 5. Android Facebook.authorize không gọi phương thức chưa đầy đủ
- 6. Phương thức nào được gọi khi một QGraphicsItem được chọn
- 7. Tại sao các phương thức giao thức tùy chọn chưa thực hiện gây ra lỗi thời gian chạy khi phương thức đó được gọi trong obj-c?
- 8. Phương thức layoutSubviews được gọi là khi nào?
- 9. Khi nào thì phương thức getView() của ListView được gọi?
- 10. Khi phương thức AppInitialize được gọi trong ASP.NET?
- 11. Truyền tham số động ném RuntimeBinderException khi gọi Phương thức từ giao diện Thừa kế
- 12. Python: Liên kết một phương thức chưa được gửi?
- 13. Gọi phương thức mỗi lần trước khi bất kỳ phương pháp nào khác được gọi là
- 14. Gọi phương thức khi chuỗi kết thúc
- 15. gọi phương thức cơ sở sử dụng từ khóa mới
- 16. Xác minh phương thức được gọi là
- 17. Phương thức riêng được giả lập với PowerMock, nhưng phương thức cơ bản vẫn được gọi là
- 18. phương thức chưa xác định `remote_function '
- 19. phương thức __doPostBack được gọi như thế nào? Phương thức gọi điện ở đâu?
- 20. Destructor không được gọi khi một ngoại lệ được ném
- 21. Phương thức chưa xác định password_changed? Lỗi
- 22. Có an toàn khi gọi phương thức được đồng bộ từ một phương thức được đồng bộ khác không?
- 23. Yêu cầu jQuery AJAX không thành công trong IE8 với thông báo 'Lỗi: Phương thức này không thể được gọi cho đến khi phương thức mở được gọi.'
- 24. onServiceConnected không bao giờ được gọi sau phương thức bindService
- 25. Gọi phương thức NSTimer
- 26. onChange phương thức của ContentObserver không được gọi khi tin nhắn SMS được đọc trên Android
- 27. Phương thức chưa xác định `paginate '
- 28. Nếu phương thức được đồng bộ hóa gọi phương thức không đồng bộ khác, có khóa trên phương thức không đồng bộ
- 29. Phương thức gọi trước khi phiên hết hạn
- 30. Điều gì sẽ xảy ra nếu một phương thức ném ngoại lệ không được chỉ định trong khai báo phương thức bằng "ném"
tại sao bạn muốn thực hiện điều đó? – Woot4Moo
Chính xác, ý của bạn là gì với "phương pháp chưa được khóa" trong ngữ cảnh này? Tất cả các phương thức trong một lớp được mô phỏng khi sử dụng 'mock (...)'/'@ Mock'. –
Bởi vì tôi thường quên thử một số phương pháp. Các ngoại lệ có thể giúp tìm ra các phương pháp này. – Hlib