抛出异常而不是返回默认值

问题描述:

我是Mockito的新手,想在单元测试中使用它。抛出异常而不是返回默认值

我不喜欢的是使用Mockito.mock(Class<T>)为没有明确定义行为的方法返回默认值(如null)创建的模拟。相反,我希望他们在这种情况下抛出一个异常,所以我知道我需要添加这个定义。

我试过如下:

SomeType m = mock(SomeType.class, new ThrowsException(new SomeRuntimeException(...))); 
when(m.a()).thenReturn(...); 

m.a(); // ok 
m.b(); // throws exception 

但由于异常调用when()期间已经抛出不起作用。

有没有其他的方法来实现这一目标?

+0

+1:有趣的使用案例!我从来没有想过这个:-) – 2011-06-16 07:39:40

更换

when(m.a()).thenReturn(...);

doReturn(...).when(m).a();

+0

+1谢谢! doReturn的javadoc解释了两条线的区别。它也恰恰指出我的情况。 :-) – Wolfgang 2011-06-16 12:36:32

+2

我不知道Mockito的理由是不提供一种方法来为未打开的方法抛出异常。使用ThrowsException + doReturn的缺省答案确实有效,但它实际上意味着你永远不能使用'when',这是首选的方法。 – 2011-09-22 17:32:23

+0

您的意思是类似于以下内容: Mockito.doThrow(new RuntimeException())。when(m).a(); – fivanski 2011-09-26 13:31:11