Mockito kiểm tra một phương thức void ném một ngoại lệ


399

Tôi có một phương thức với voidkiểu trả về. Nó cũng có thể đưa ra một số ngoại lệ vì vậy tôi muốn kiểm tra những ngoại lệ đó được ném ra. Tất cả các nỗ lực đã thất bại với cùng một lý do:

Phương thức khi (T) trong loại Stubber không áp dụng cho các đối số (void)

Bất kỳ ý tưởng làm thế nào tôi có thể có được phương pháp để ném một ngoại lệ được chỉ định?

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

Câu trả lời:


706

Các dấu ngoặc được đặt xấu. Bạn phải dùng

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);
                                          ^

và không

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
                                                                   ^

Điều này được giải thích trong tài liệu


7
@edwardmlyte Sự không nhất quán Mockito này là một trong những lý do tôi chuyển sang MoxieMocks
Muel

@clement cả hai có thể được sử dụng: docs.mockito.googlecode.com/hg/latest/org/mockito/ . Tạo một ngoại lệ không ném nó.
JB Nizet

1
@JB Nizet Tôi hoàn toàn đồng ý với bạn nhưng tuy nhiên nếu tôi viết doThrow (ngoại lệ mới ()) thay vì doThrow (Exception. Class), tôi gặp lỗi sau khi khởi chạy thử nghiệm; Ngoại lệ dự kiến ​​com.company.project.exception.EuityNotFoundException nhưng có org.mockito.exceptions.base.MockitoException:
clement

2
Đặt một câu hỏi khác, với mã được kiểm tra, mã của bài kiểm tra và dấu vết ngăn xếp hoàn chỉnh của ngoại lệ.
JB Nizet

6
doThrow (ngoại lệ mới ()). khi (đối tượng) .voidMethod (any ());
Soumyajit Swain

14

Nếu bạn đã từng tự hỏi làm thế nào để làm điều đó bằng cách sử dụng kiểu Mockito mới của BDD:

willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));

Và để tham khảo trong tương lai, người ta có thể cần phải ném ngoại lệ và sau đó không làm gì:

willThrow(new Exception()).willNothing().given(mockedObject).methodReturningVoid(...));

1
Cảm ơn bạn đã đăng bài này ở đây; nếu phương thức trả về một giá trị: đã cho (mockedObject.methodReturnAnObject ()). willThrow (new Exception ()); nếu phương thức không trả về bất cứ điều gì: willThrow (ngoại lệ mới ()). đã cho (mockedObject) .methodReturnVoid (...)); Biểu mẫu giải thích javadoc: "Các khoảng trống khai thác yêu cầu cách tiếp cận khác với {@link Mockito # khi (Object)} (hoặc BDDMockito.given) vì trình biên dịch không thích các phương thức void trong ngoặc ..."
Wolf359
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.