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

标签 java mocking mockito powermockito

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

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<T> thenReturn(T value, T... values)

Sets consecutive return values to be returned when the method is called.
E.g:

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

Last return value in the sequence (in example: 3) determines the behavior of further consecutive calls.

因此,在这种情况下,您可以:

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

注意:此答案假定您已经知道如何模拟 static 方法。如果您不这样做,请参阅 this question .

关于java - 如何在对模拟的不同调用中返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32430387/

相关文章:

json - 常规/Grails : Use JSON to mock model data

java - 如何仅在 x :th call? 上返回模拟项目

java - 读取txt文件并将所有内容显示为粗体

java - 如何在java中转换具有 "ref ids"和 "ids"的XML文件

java - 矩阵乘法错误{碰巧知道错误但修复起来有困难}

javascript - 如何在 Angular 中仅模拟特定的 http 资源(URL)

python-3.x - 如何在 Python 中模拟类实例(不是类函数)

python - pytest支持验证吗?

android - Android 中的模拟对象未作为参数传递

java 我如何检查文件名并使用 FileResource auxFr = new FileResource ("/testing/yob"+ auxYear + "short.csv"); 打开