Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I return different values on different calls to a mock?

I have the following code which is getting the current counter value from DB. Then it updates the counter in DB and then again it retrieves the value.

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

I want to mock the static methods in such a way that the first call should return 100 and the second call should return 150. How can I use PowerMockito to achieve this? I am using TestNG, Mockito along with PowerMock.

like image 343
user2032118 Avatar asked Sep 07 '15 02:09

user2032118


1 Answers

Mockito supports changing the returned value; this support extends to PowerMockito. Just use 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.

So, in this case, you would do:

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

Note: this answer assumes you already know how to mock static methods. If you do not, see this question.

like image 136
durron597 Avatar answered Oct 19 '22 05:10

durron597