Mockito Javadoc似乎说明了为什么使用 doReturn()
代替 when()
在极少数情况下,当您无法使用Mockito.时(对象)时,请使用Doreturn()。
当心始终建议使用Mockito.时(对象)进行固执,因为它是参数类型安全性并且更可读性(尤其是连续呼叫时)。
以下是Doreturn()方便的罕见情况:
1. 当监视真实物体并在间谍上调用真实方法时会带来副作用
List list = new LinkedList(); List spy = spy(list);
//不可能:真实方法被称为spy.get(0)抛出indexoutofboundsexception(列表尚未为空)
when(spy.get(0)).thenReturn("foo");
//您必须使用doreturn()进行固定: doReturn("foo").when(spy).get(0);
2. 覆盖以前的例外费集:
when(mock.foo()).thenThrow(new RuntimeException());
//不可能:称为foo()方法的异常插入,因此抛出了RuntimeException。 when(mock.foo()).thenReturn("bar");
//您必须使用doreturn()进行固定:
doReturn("bar").when(mock).foo();
上面的方案显示了Mockito优雅语法的权衡。请注意,这种情况非常罕见。间谍应该是零星的,并且重大的异常插入非常罕见。更不用说一般而言的超级固执是一种潜在的代码气味,指出了太多的固执。