通常使用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()阅读以来,我一直在避免这种情况。
答案 0 :(得分:2)
获得Stubber的唯一官方方式是致电doReturn
或doAnswer
(等)。
更好的存根模式是使用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();