【问题标题】:How do I return different values on different calls to a mock?如何在对模拟的不同调用中返回不同的值?
【发布时间】:2015-12-02 12:29:42
【问题描述】:

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

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。

【问题讨论】:

  • 为什么DBUtil 是静态的?注入一个实例,那么你就不需要 PowerMock。

标签: java mocking mockito powermockito


【解决方案1】:

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

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

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

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

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

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

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

注意:此答案假设您已经知道如何模拟 static 方法。如果没有,请参阅this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    相关资源
    最近更新 更多