Mockito测试void方法会引发异常


399

我有一个带有void返回类型的方法。它还可以引发许多异常,因此我想测试所引发的异常。所有尝试均以相同的原因失败:

Stubber类型中的when(T)方法不适用于参数(void)

有什么想法可以获取引发指定异常的方法吗?

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

Answers:


706

括号放置不正确。您必须使用

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

并不是

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

文档中对此进行了解释


7
@edwardmlyte这种Mockito不一致的原因是我改用MoxieMocks
Muel

都可以使用@clementdocs.mockito.googlecode.com/hg/latest/org/mockito/…。创建异常不会抛出该异常。
JB Nizet

1
@JB Nizet我完全同意您的意见,但是,如果我编写doThrow(new Exception())而不是doThrow(Exception.class),则在启动测试时会遇到以下错误;预计例外com.company.project.exception.ElementNotFoundException,但得到org.mockito.exceptions.base.MockitoException:
克莱门特

2
询问另一个问题,测试的代码,测试的代码以及异常的完整堆栈跟踪。
JB Nizet

6
doThrow(new Exception())。when(object).voidMethod(any());
Soumyajit Swain

14

如果您想知道如何使用新的BDD样式的Mockito来做到这一点:

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

为了将来参考,可能需要抛出异常,然后什么也不做:

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

1
感谢您在此处发布;如果该方法返回值:给定(mockedObject.methodReturningAnObject())。willThrow(new Exception()); 如果该方法未返回任何内容:willThrow(new Exception())。given(mockedObject).methodReturningVoid(...)); javadoc形式的说明:“对空位进行存根与{@link Mockito#when(Object)}(或BDDMockito.given)需要不同的方法,因为编译器不喜欢方括号内的空方法...”
Wolf359,18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.