Saya memiliki kode seperti ini di bawah ini:
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;
}
}
Sekarang saya sedang menulis tes untuk A.myMethod(someargs)
. Saya ingin melewatkan metode sebenarnya query.getNextId()
dan sebagai gantinya mengembalikan nilai rintisan. Pada dasarnya, saya ingin mengejek MyQueryClass
.
Jadi dalam kasus uji saya, saya telah menggunakan:
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
Saya menggunakan @RunWith(PowerMockRunner.class)
dan @PrepareForTest({MyQueryClass.class})
di awal kelas pengujian saya.
Tapi ketika saya debug tes, masih memanggil metode nyata getNextId()
dari MyQueryClass
kelas.
Apa yang kulewatkan di sini? Adakah yang bisa membantu karena saya baru mengenal Mockito dan PowerMockito.