user3942446 user3942446 - 1 month ago 13
Java Question

Using PowerMockito.whenNew() is not getting mocked and original method is called

I have a code somewhat like this below:

Class A {
public boolean myMethod(someargs) {
MyQueryClass query = new MyQueryClass();
Long id = query.getNextId();
// some more code
}
}
Class MyQueryClass {
....
public Long getNextId() {
//lot of DB code, execute some DB query
return id;
}
}


Now I'am writing a test for
A.myMethod(someargs)
. I want to skip the real method
query.getNextId()
and instead return a stub value. Basically, I want to mock
MyQueryClass
.

So in my test case, I have used:

MyQueryClass query = PowerMockito.mock(MyQueryClass.class);
PowerMockito.whenNew(MyQueryClass.class).withNoArguments().thenReturn(query);
when(query.getNextId()).thenReturn(1000000L);

boolean b = A.getInstance().myMethod(args);

//asserts


I used
@RunWith(PowerMockRunner.class)
and
@PrepareForTest({MyQueryClass.class})
in the beginning of my test class.

But when I debug the test, it is still calling the real method
getNextId()
of the
MyQueryClass
class.

What am I missing here? Can anyone help as I am new to Mockito and PowerMockito.

Answer

I think you also need to put the class where the new takes place in the @PrepareForTest annotation - see Mock construction of new objects.