Ich habe einen Code wie diesen unten:
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;
}
}
Jetzt schreibe ich einen Test für A.myMethod(someargs)
. Ich möchte die reale Methode überspringen query.getNextId()
und stattdessen einen Stub-Wert zurückgeben. Grundsätzlich möchte ich verspotten MyQueryClass
.
In meinem Testfall habe ich also Folgendes verwendet:
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
Ich habe @RunWith(PowerMockRunner.class)
und @PrepareForTest({MyQueryClass.class})
am Anfang meiner Testklasse verwendet.
Aber wenn ich den Test debugge, ruft er immer noch die eigentliche Methode getNextId()
der MyQueryClass
Klasse auf.
Was vermisse ich hier? Kann mir jemand helfen, da ich neu bei Mockito und PowerMockito bin.