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

Java 如何在对模拟的不同调用上返回不同的值?,java,mocking,mockito,powermockito,Java,Mocking,Mockito,Powermockito,我有下面的代码,它从DB获取当前计数器值。然后它更新DB中的计数器,然后再次检索值 int current = DBUtil.getCurrentCount(); DBUtil.updateCount(50);// it updates the current count by adding 50 int latest = DBUtil.getCurrentCount(); 我想以这样的方式模拟静态方法:第一个调用应该返回100,第二个调用应该返回150。如何使用PowerMockito实现这

我有下面的代码,它从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。只用

序列中的最后一个返回值(在示例3中)确定进一步连续调用的行为

因此,在这种情况下,您将执行以下操作:

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

注意:这个答案假设您已经知道如何模拟
静态方法。如果没有,请参见。

为什么
DBUtil
是静态的?注入一个实例,那么就不需要PowerMock了。
when(mock.someMethod()).thenReturn(1, 2, 3);
PowerMockito.when(DBUtil.getCurrentCount()).thenReturn(100, 150);