Tôi có một đoạn mã giống như sau:
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;
}
}
Bây giờ tôi đang viết một bài kiểm tra cho A.myMethod(someargs)
. Tôi muốn bỏ qua phương thức thực query.getNextId()
và thay vào đó trả về giá trị sơ khai. Về cơ bản, tôi muốn chế nhạo MyQueryClass
.
Vì vậy, trong trường hợp thử nghiệm của tôi, tôi đã sử dụng:
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
Tôi đã sử dụng @RunWith(PowerMockRunner.class)
và @PrepareForTest({MyQueryClass.class})
trong phần đầu của lớp thử nghiệm của tôi.
Nhưng khi tôi gỡ lỗi kiểm tra, nó vẫn đang gọi phương thức thực getNextId()
của MyQueryClass
lớp.
Tôi còn thiếu gì ở đây? Bất cứ ai có thể giúp đỡ vì tôi mới sử dụng Mockito và PowerMockito.