如何用Mockito获得一个空洞的Stubber用于编程

时间:2016-11-03 23:04:07

标签: java mockito

通常使用Mockito,如果你是一个被多次调用的方法,那你就

Mockito
    .doReturn(0)
    .doReturn(1)
    .doReturn(2)
    .when(mock).getValue();

我想编程一个多次调用的方法,比如

Stubber stubber;
for (int i = 0; i < 8; ++i) {
    stubber.doReturn(i);
}
stubber.when(mock).getValue();

我的问题是似乎没有 public Stubber工厂方法。有org.mockito.internal.MockitoCore.stubber()new org.mockito.internal.stubbing.StubberImpl(),但两者都是内部的,使用它们感觉不对。

这样的程序化存根是否有更好的模式?有没有更好的方法来获得空Stubber

一个解决方案是when().thenReturn(),但自从the difference between doReturn() and then()阅读以来,我一直在避免这种情况。

1 个答案:

答案 0 :(得分:2)

获得Stubber的唯一官方方式是致电doReturndoAnswer(等)。

更好的存根模式是使用returnsElementsOf

List<Integer> returnValues = new ArrayList<>();
for (int i = 0; i < 8; ++i) {
    returnValues.add(i);
}
doAnswer(returnsElementsOf(returnValues)).when(mock).getValue();

你也可以将一个数组传入doReturn,它已经采用了与数组兼容的变量,但只是作为它的双参数重载:

int[] returnValues = new int[7];
for (int i = 1; i < 8; ++i) {
    returnValues[i] = i;
}
doReturn(0, returnValues).when(mock).getValue();