如何在对模拟的不同调用中返回不同的值?

我有以下代码从DB获取当前计数器值。 然后它更新DB中的计数器,然后再次检索该值。

int current = DBUtil.getCurrentCount(); DBUtil.updateCount(50);// it updates the current count by adding 50 int latest = DBUtil.getCurrentCount(); 

我想以这样的方式模拟静态方法,即第一个调用应返回100,第二个调用应返回150.如何使用PowerMockito实现此目的? 我正在使用TestNG,Mockito和PowerMock。

Mockito支持更改返回值; 这种支持扩展到PowerMockito。 只需使用OngoingStubbing.thenReturn(T value, T... values)

 OngoingStubbing thenReturn(T value, T... values) 

设置调用方法时要返回的连续返回值。
例如:

 when(mock.someMethod()).thenReturn(1, 2, 3); 

序列中的最后返回值(例如:3)确定了进一步连续调用的行为。

所以,在这种情况下,你会这样做:

 PowerMockito.when(DBUtil.getCurrentCount()).thenReturn(100, 150); 

注意:这个答案假设您已经知道如何模拟static方法。 如果您不这样做,请看这个问题 。